说明
1.xdeepFM并不是由deepFM延伸而来的,而是通过deep & cross延伸过来的,其继承了deep & cross 可以控制高阶特征交互的特点。
2.感觉xdeeoFM最难理解的是CIN的架构,从形式上来看 确实是一种 RNN 与 CNN相互结合的方式, 很精妙。
架构
1.先看下整体的xDeepFM的架构吧。首先从大致的体系来看, 包括五大部分(可参照deepFM):
*对原始 特征的Field形式包装,把 特征one-hot形式 包装进同一field来克服 稀疏性, 这里就对应包括构建特征字典 和 特征索引矩阵、特征值矩阵分解的问题。
*在embeding层对 样本做embeding转换,embeding其实相当于是 全连接层,进行embedding 按照 deepFM相似的形式 来获取每个样本长度为 field_size的 embedding表示,这样embedding后的样本矩阵应该为(field_size,embedding_size)
*简单的一阶计算部分,这部分并没有使用到 特征embedding的结果,而是w*x那种类似LR的一阶计算。
*CIN模型(压缩交互网络)架构进行可控的 自动学习显式的高阶特征交互,这里说显式是因为其 传递了 deep & cross 思想 可以通过层数控制 进行学习的最高阶数,这种可控的能表示成 wij * (xi * xj)形式的就成为显式。 同时也是可以特征向量级的交互,对于 向量级 和 显式的理解可参看 注1. 关于CIN的结构接下来会详细的介绍,其是一种非常巧妙的结合 CNN+RNN思想的架构。
*最后是很常见的 DNN部分的结构,会对经过embedding转换后的 样本特征进行 隐式的高阶 特征交互,这算是经常用到的模型结构,类同于deepFM、wide&deep中的使用。
2.现在来详细看下 CIN交互网络的结构,同样我们对CIN进行观察时,也从大到小进行观察,首先整体的CIN架构如下,其是一种类 CNN+RNN的形式,首先我们是有卷积和不断对 Hi-1 和 Xo来计算出新的特征图,通知 也是一种不断从左到右构建的过程,类似RNN的时序,这里是不断加深对特征的高阶操作(但是不同于deep&cross的高阶操作,这里在L层时,CIN只包含L+1层阶的组合特征, 而在cross中,在第L层,包含了1阶-L+1阶的所有组合特征)。
其整体生成每个后一层K层 特征图的 公式表达如下,其中前一层 隐层的状态图是,初始的状态图是,这里的k是层索引,h表示的是神经元向量的条数。
通过对以上公式的观察,我们可以发现其可以分成两步:
(1)第一步是内部的计算,其相当于是RNN的过程吧,把上一层隐层的输出结果和 原始的x0进行组合,组合的方式是一种内积的形式,其中内积的计算可以表示为如下的图形,是一种向量级的计算。 黄点位置是对应的一次内积计算(3点 内积 4点 得到12点的图),可以通过单向量 与 单向量的计算得到二维的结果,通过多次乘积就得到内积的结果,也就是上面的 三维的矩阵,点乘的计算过程可以近似为右面的式子,是两两对应的乘积,经过计算可以得到上面厚度为D的三维矩阵。
(2)接下来是对应公式中的卷积核 和 第一步结果的计算, 其中w是一个卷积核,使用Hk个尺寸为的卷积核对 第一步结果进行卷积计算得到新的特征图结果(这里看左边的图就明白了,m*Hk是原特征图的维度,因为要对应卷积,所以卷积核的大小也是这样,这样每次卷积实际上是生成 D*1个数值的,因为D是厚度, 一次相当于生成一个向量,这样使用Hk个卷积核相当于 生成 的特征图为 Hk*D大小的)。 对应的计算可以理解为下面的图,是一种卷积核下的卷积计算, 这里卷积计算不同于卷积神经网络中卷积核计算的地方,在于每次卷积计算都会针对整个特征图进行卷积计算,一次卷积计算的结果是 生成特征图上的一个D*1的向量(D是原特征图的厚度),使用Hk个卷积核就可以获取到 左图上方 Hk*D大小新的特征图了。
至此,我们已经完成对 CIN 过程完全的介绍了,为了便于理解,下图是对整体过程的形象化的描述。 首先是两部分的内积计算 。
备注
注1. 对 特征向量级 和 元素向量级、 显式 和隐式的解释。