微软2016年提出的DeepCrossing 是经典的Embedding+MLP结构。
Embedding + MLP 模型结构
微软把DeepCrossing用于广告推荐这个业务场景上。DeepCrossing从下到上可以分为5层,分别是Feature层、Embedding层、Stacking层、MLP层和Scoring层。
Feature层
feature 层也叫输入特征层,它处于DeepCrossing的最底部,作为整个模型的输入。但是仔细观察feature层,我们会发现不同的特征在细节上的一些区别,比如Feature#1向上连接到了Embedding层,而Feature#2就直接连接到了更上方的stacking层。这是怎么回事?
原因在于Feature#1 代表的是类别型特征经过one-hot编码后生成的特征向量,而Feature#2代表的是数值型特征。由于one-hot特征太稀疏,不适合直接输入到后续的神经网络中进行训练,所以我们需要通过连接到Embedding层的方式,把这个稀疏的one-hot向量转换成比较稠密的Embedding向量。
Embedding层
Embedding层就是为了把稀疏的One-hot向量转换成稠密的Embedding向量而设置的。我们需要注意的是Embedding层不是全部连接起来的,而是每一个特征对应一个Embedding层,不同Embedding层之间互不干涉。
embeding层的内部结构是什么样子的呢?Embedding内部结构就是word2vec模型中输入神经元到隐层神经元的部分,可以参考下图
一般来说Embedding向量维度应远小于原始的稀疏特征向量,按照经验,几十到上百维就能满足需求了,这样才能够实现从稀疏特征向量到稠密特征向量的转换。
Stacking层
Stacking层中文名就是堆叠层,也常叫Concatenate层,它的作用比较简单,就是把不同的Embedding特征和数值型特征拼接到一起,形成新的包含全部特征的特征向量。
MLP层
MLP层就是多层神经网络层,图中指的是Multiple Residual Units层(多层残差网络)。微软在实现Deep Crossing 时 针对特定的问题选择了残差神经元,但事实上,神经网络的选择有非常多种,比如以sigmoid函数为激活函数的神经元,以及使用tanh、reLu等其他激活函数的神经元。不管使用哪种神经元,MLP层的特点是全连接,就是不同层的神经元两两之间都有连接,它们两两连接只是连接权重会在反向传播的学习过程中会发生改变。
MLP层的作用是让特征向量不同维度之间做充分的交叉,让模型能够抓取到更多的非线性特征和组合特征的信息,这就使得深度学习模型在表达能力上较传统机器学习模型大为增加。
Scoring 层
这层也是输出层。虽然模型结果很复杂,最终我们要预测的目标就是一个分类的概率,如果是点击率预估,就是一个二分类问题,那么就可以采用逻辑回归作为输出层神经元,而如果是类似图像分类这样的多分类问题,我们往往在输出层采用softmax这样的多分类模型。
Embedding+MLP的结构重点用一句话总结就是,对于类别特征,先利用Embedding层进行稠密化,再利用Stacking层连接其他特征,输入MLP的多层结构,最后用Scoring层预估结果。
PNN
DeepCrossing + product 层就是PNN。
未完待续。。