Cross层特征交叉的推导过程
DCN全称Deep Crossing Network,模型介绍可以见 这篇文章。DCN的关键设计在于Cross层,假设输入为特征向量 x 0 x_0 x0,其每一层的运算过程为 :
x i + 1 = x 0 x i T w i + 1 + x i x_{i+1}=x_0x_{i}^Tw_{i+1}+x_i xi+1=x0xiTwi+1+xi
可视化为:
前面推荐阅读的文章详细推导了为什么有 i i i 层的Cross操作可以得到从 1 阶到 i + 1 i+1 i+1 阶的任意的特征组合,这里截图放在这里方便后面引用其中符号:
来自xDeepFM的diss
后来看到xDeepFM的论文,其首先证明了Cross操作的输出是输入 x 0 x_0 x0 的标量倍,证明过程:
该论文的总结我是比较认同的,即DCN的缺点在于两点,一是其输出仍然是输入的标量倍,二是这种特征交互是将特征向量的每一位(bit)看做是一个特征,才可以认为是得到了高阶的交叉特征(特征的连乘)。但是对于这两点我认为需要补充一些想法:
关于第一点,即DCN的输出仍然是输入的标量倍。从这个结论并不是很直观能看到Cross运算的缺陷,从前面的推导过程来看,最后输出的特征向量确实包含了从 1 阶到 i + 1 i+1 i+1 阶交叉特征(一阶的 x 0 x_0 x0、 x 1 x_1 x1,二阶的 x 0 2 x_0^2 x02、 x 0 x 1 x_0x_1 x0x1等等),交叉特征都在每个分量内部作为求和项了,也都含有参数项。但一个容易被忽略的事实是:交叉特征的系数并非相互独立。举个例子,在得到的 X 1 X_1 X1 向量表达式中:
假设将两个分量直接相加(加权相加结论也不变),二次项 x 0 , 1 x 0 , 2 x_{0,1}x_{0,2} x0,1x0,2 的系数 w 0 , 1 + w 0 , 2 w_{0,1}+w_{0,2} w0,1+w0,2正是 x 0 , 1 2 x_{0,1}^2 x0,12 的系数 w 0 , 1 w_{0,1} w0,1 与 x 0 , 2 2 x_{0,2}^2 x0,22 的系数 w 0 , 2 w_{0,2} w0,2 的线性组合。如果用最传统的方法(Wide&Deep的Wide一侧仍然是这种思路),直接手工构造交叉特征并使用逻辑斯谛回归来拟合的话,每个交叉特征应该有独立于其他特征的参数,而此处DCN虽然得到所有交叉特征,但系数却是相互限制的,自由度低了很多,因此并不能等价于传统的手动构造交叉特征+LR,这自然会限制其表达能力。
关于第二点,即特征交互是一种bit-wise的方式,这种隐式的“特征交叉”使用DNN即可完成(Despite the powerful ability of learning an arbitrary function from data, plain DNNs generate feature interactions implicitly and at the bit-wise level.)。确实,如果输入的特征向量是Embedding层的输出,Cross操作就是在特征的bit上做交叉,并没有直观上的含义。不过,如果我们给定的输入是原始特征:对于数值型特征直接使用其值,对于类别型特征,将其转换成 k k k 个二元特征, k k k 为原本的类别数目,那么Cross操作得到的交互就是特征级别的了。