# FNN模型的提出主要是为了解决什么问题?它是如何解决的?
在神经网络的参数初始化过程中,往往采用不带有先验信息地随机初始化,但由于Embedding层的输入极端稀疏化,在随机梯度下降的过程中,只有与非零特征相连的Embedding层的权重会被更新,导致Embedding层的收敛速度很慢,且Embedding层的参数数量往往占整个神经网络参数数量的大半以上,模型的收敛速度往往受限于Embedding层。
针对这个难题,FNN使用FM模型训练好的各特征隐向量初始化Embedding层的参数,相当于在初始化神经网络参数时引入了先验信息,这样一来神经网络训练的起点更接近于目标的最优点,加速了神经网络的收敛。
# FNN的模型结构是什么样的?
结构如下,总体上来讲,FNN就是一个FM+MLP:
上图的右侧已经标明了每一层的含义,下面从模型自顶向下的角度详细解释一下。
- 输出层:
模型的输出是一个实数
- L2层:tanh激活函数
- L1层:同为tanh激活函数
作者尝试了线性函数,sigmoid函数,tanh函数,得出tanh函数的效果最好,因此这一层选用了tanh函数。
- Dense real层
重点说一下Dense real层,z定义如下:
其中
# FNN模型中是如何使用FM来初始化Embeddiing层参数的?
先给出FM的方程:
每个特征
需要注意的是,虽然上图中FM中的参数直接指向了FNN的Embedding层各神经元,但其具体意义是初始化Embedding神经元与输入神经元之间的连接权重。假设FM的隐向量的维度为
需要说明的是,在训练FM的过程中,并没有对特征域进行区分,但在FNN中,特征被分成了不同特征域,因此每个特征域具有对应的Embedding层,并且每个特征域Embedding的维度都应该与FM隐向量维度保持一致。
使用预训练的FM来初始化FNN模型的第一层参数可以有效地学习特征表示,并且绕开了高维二值输入带来的计算复杂度高问题。更进一步,隐含层的权重(除了FM层)可以通过预训练的RBM来进行初始化。FM的权重可以通过SGD来进行更新,我们只需要更新那些不为0的单元,这样可以减少大量的计算。通过预训练FM层和其他的层进行初始化之后,再通过监督学习的方法进行微调,使用交叉熵的损失函数.
# FNN模型的特点是什么?有那些优缺点?
FNN模型的特点:
- 采用FM预训练得到的隐含层及其权重作为神经网络的第一层的初始值,之后再不断堆叠全连接层,最终输出预测的点击率。
- 可以将FNN理解成一种特殊的embedding+MLP,其要求第一层嵌入后的各特征域特征维度一致,并且嵌入权重的初始化是FM预训练好的。
- 这不是一个端到端的训练过程,有贪心训练的思路。而且如果不考虑预训练过程,模型网络结构也没有考虑低阶特征组合。
FNN模型的优缺点:
优点:
- 引入DNN对特征进行更高阶组合,减少特征工程,能在一定程度上增强FM的学习能力,这种尝试为后续深度推荐模型的发展提供了新的思路。
缺点:
- 两阶段训练模式,在应用过程中不方便,且模型能力受限于FM表征能力的上限。
- FNN专注于高阶组合特征,但是却没有对低阶特征进行建模。