<?xml version="1.0" encoding="utf-8" standalone="yes"?><rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>特征交叉 on bitJoy</title><link>https://bitjoy.net/tags/%E7%89%B9%E5%BE%81%E4%BA%A4%E5%8F%89/</link><description>Recent content in 特征交叉 on bitJoy</description><generator>Hugo -- 0.148.2</generator><language>en</language><lastBuildDate>Sat, 22 Jan 2022 18:04:56 +0800</lastBuildDate><atom:link href="https://bitjoy.net/tags/%E7%89%B9%E5%BE%81%E4%BA%A4%E5%8F%89/index.xml" rel="self" type="application/rss+xml"/><item><title>DCN论文解读《Deep &amp; Cross Network for Ad Click Predictions》</title><link>https://bitjoy.net/posts/2022-01-22-dcn-paper-reading/</link><pubDate>Sat, 22 Jan 2022 18:04:56 +0800</pubDate><guid>https://bitjoy.net/posts/2022-01-22-dcn-paper-reading/</guid><description>&lt;h1 id="摘要">摘要&lt;/h1>
&lt;p>特征工程是很多预测模型成功的关键因素，然而特征工程并不简单，且通常需要人工设计或穷举搜索。通用DNN模型能够学习到所有隐式的特征交叉，但并不是所有特征交叉都有用、都能学好。本文提出Deep &amp;amp; Cross Network (DCN)，它保留了DNN模型，同时引入了一个新的交叉网络cross network，交叉网络能更加高效地学习特定阶以内的特征交叉。特别地，DCN在每一层都进行显式的、自动的特征交叉，既不需要人工特征工程，也不会增加太多的模型复杂度。实验结果表明，DCN在CTR任务和非CTR任务上都取得了显著的性能优势，且内存消耗最低。&lt;/p>
&lt;h1 id="简介">简介&lt;/h1>
&lt;p>CTR预估对CPC（cost-per-click）广告很重要，而特征交叉对CTR预估很重要。目前的特征交叉依赖于手工或穷举完成，并且很难泛化到没见过的特征交叉上。&lt;/p>
&lt;p>本文提出了一个新的神经网络cross network，它能自动地进行显式特征交叉。Cross network包含多层网络，每增加一层网络会产生更高一阶的特征交叉，同时保留上一层的特征交叉结果。所以层数越多，交叉阶数越高，最高交叉阶数取决于网络的层数。除了cross network，我们仍然保留了传统的DNN网络，cross network和DNN网络组成Depp &amp;amp; Cross Network (DCN)。在DCN中，cross network和DNN网络联合训练，其中cross network以较小的参数量捕捉显式的特征交叉，而DNN网络以较多的参数量捕捉非常复杂的、隐式的特征交叉。实验表明DCN具有显著的性能优势。&lt;/p>
&lt;h1 id="相关工作">相关工作&lt;/h1>
&lt;p>因子分解机相关的工作如FM、FFM，表示能力不足。通用DNN网络，很强大，可以近似任何（arbitrary）函数。然而，在现实问题中，感兴趣的特征交叉往往不是任意的（arbitrary）。在Kaggle比赛中，大多数获胜方案中使用的是手工交叉的特征，它们的阶数比较低，并且是显式的、有效的；而DNN网络学习到的特征是隐式的，且是高度非线性的。因此，有必要设计一个网络，它能自动学习到有限阶的显式的特征交叉，且比通用DNN更加高效。&lt;/p>
&lt;h1 id="主要贡献">主要贡献&lt;/h1>
&lt;ul>
&lt;li>设计了一个cross network，它能在每一层进行显式的、自动的特征交叉，无需人工特征工程。&lt;/li>
&lt;li>Cross network简单高效，随着网络层数的加深，特征交叉的阶数也不断上升，且网络能学习到从低阶到高阶的所有交叉项，所有交叉项的系数也各不相同。&lt;/li>
&lt;li>Cross network内存高效，易于实现。&lt;/li>
&lt;li>实验结果表明，DCN比DNN的目标损失更低，且参数量少了一个数量级。&lt;/li>
&lt;/ul>
&lt;h1 id="dcn网络结构">DCN网络结构&lt;/h1>
&lt;p>&lt;img loading="lazy" src="https://bitjoy.net/posts/2022-01-22-dcn-paper-reading/DCN-architecture.png">&lt;/p>
&lt;p>图1 DCN网络结构&lt;/p>
&lt;h1 id="embedding层">Embedding层&lt;/h1>
&lt;p>CTR预估任务的输入特征既有稠密特征（例如身高、体重等），也有稀疏特征（例如性别、国籍等）。在DCN网络的输入层，会先将稀疏特征通过embedding矩阵变换为低维稠密向量（图1最低层的右边两个Sparse feature），然后和其他稠密特征拼接在一起作为整体的输入特征\(x_0\)。&lt;/p>
&lt;h1 id="cross-network">Cross Network&lt;/h1>
&lt;p>&lt;img loading="lazy" src="https://bitjoy.net/posts/2022-01-22-dcn-paper-reading/DCN-cross-layer.png">&lt;/p>
&lt;p>图2 Cross layer图解&lt;/p>
&lt;p>Cross Network的每一个交叉层如图2所示。核心就是公式(3)，即第\(l+1\)层的交叉结果\(x_{l+1}\)等于对第\(l\)层的结果\(x_l\)做一个变换\(f(x_l,w_l,b_l)\)然后加上\(x_l\)。这里加\(x_l\)有点像ResNet的思想，就是直连，保留上一次交叉的结果。&lt;/p>
&lt;p>&lt;img loading="lazy" src="https://bitjoy.net/posts/2022-01-22-dcn-paper-reading/DCN-eq3.png">&lt;/p>
&lt;p>公式(3)的核心操作是\(x_0x_l^T\)，通过这个操作，一方面可以产生从1到\(l+1\)阶的所有交叉项；另一方面\(x_0x_l^T\)的维度是d*d（d为\(x_0\)的维度），使得系数\(w_l\)是一个d*1的向量而不是矩阵，即\(w_l\)只需要很少的参数量就能增加一阶的特征交叉。由于每增加一层，只增加两个维度为d的参数向量\(w_l\)和\(b_l\)，所以对于\(L_c\)层的cross network，参数量是\(d*L_c*2\)，相比于DNN的参数量要少得多。&lt;/p>
&lt;p>手工推算一下，可得：&lt;/p>
$$
x_1=x_0*x_0*w_0+b_0+x_0=x_0^2w_0+b_0+x_0
$$$$
x_2=x_0*x_1*w_1+b_1+x_1=x_0^3w_0w_1+x_0^2(w_0+w_1)+x_0(b_0w_1+1)+b_0+b_1
$$&lt;p>可以看到，随着网络层数的增加，交叉的阶数也不断上升，而且完整包括了从0到\(l+1\)的交叉项，每个交叉项的系数也各不相同。&lt;/p>
&lt;h1 id="deep-network">Deep Network&lt;/h1>
&lt;p>深度网络就是经典的MLP，公式如下：&lt;/p>
&lt;p>&lt;img loading="lazy" src="https://bitjoy.net/posts/2022-01-22-dcn-paper-reading/DCN-eq4.png">&lt;/p>
&lt;p>由于参数\(W_l\)是一个矩阵，故DNN的参数量远多于cross network。&lt;/p>
&lt;h1 id="combination-layer">Combination layer&lt;/h1>
&lt;p>最后将cross network和deep network的输出拼接起来，过一个logits layer，预测当前item的CTR。本文使用point-wise的方法，即训练样本是每个item是否点击，所以是一个二分类问题，损失函数是交叉熵损失。&lt;/p>
&lt;h1 id="实验结果">实验结果&lt;/h1>
&lt;p>相比于DNN、FM等方法，DCN的测试误差最低，且参数量、内存开销最小。此外，作者还将DCN用于其他非CTR的分类任务中，也取得了性能优势。&lt;/p>
&lt;h1 id="总结">总结&lt;/h1>
&lt;p>DCN的思路简单、巧妙，通过\(x_0\)和上一层的交叉结果相乘，则所有交叉项的阶数都上升一阶，所以随着层数的增加，交叉阶数也在不断增加。通过控制网络层数可以控制需要交叉的最高阶数。而且\(x_0x_l^T\)的设计，每层增加的参数量也很小，不错。&lt;/p></description></item></channel></rss>