FNN
FNN模型结构
FNN模型是2016年伦敦大学学院的研究人员提出的,其模型结构初步看是一个类似DeepCrossing模型的经典深度神经网络,从稀疏输入向量到稠密向量的转换过程也是经典的Embedding层的结构。
问题的关键还在于Embedding层的改进。在神经网络的参数初始化过程中,往往采用随机初始化这种不包含任何先验信息的初始化方法。由于Embedding层的输入极端稀疏化,导致Embedding层的收敛速度非常缓慢。再加上Embedding层的参数数量往往占整个参数数量的大半以上,因此模型的收敛速度往往受限于Embedding层。
为什么Embedding层的收敛速度慢
在深度学习网络中,Embedding层的作用是将稀疏输入向量转换成稠密向量,但Embedding层的存在往往会拖慢整个神经网络的收敛速度,主要有两个原因:
- Embedding层的参数数量巨大:假设输入层的维度是100000,Embedding层的输出维度是32,上层再加5层32维的全连接层,最后输出层的维度是10,那么输出层到Embedding层的参数数量是3200000,其余所有层的参数总数是(32×32)×4+32×10=4416。那么,Embedding层的权重总数占比是3200000/(3200000+4416)=99.86%。也就是说,Embedding层的权重占了整个网络权重的绝大部分。所以,大部分的训练时间和计算开销都被Embedding层占据。
- 输入向量过于稀疏:在随机梯度下降的过程中,只有与非零特征连接的Embedding层权重会被更新,这进一步降低了Embedding层的收敛速度。
FNN模型的训练
针对Embedding层收敛速度的难题,FNN模型的解决思路是用FM模型训练好的各特征向量初始化Embedding层的参数,相当于在初始化神经网络参数时,已经引入了有价值的先验信息。也就是说,神经网络训练的起点更接近目标最优点,自然加速了整个神经网络的收敛过程。
上图用图示的方法显示FM各参数和FNN中Embedding层各参数的对应关系。
需要注意的是,上图虽然把FM中的参数指向了Embedding层各神经元,但其具体意义是初始化Embedding神经元与输入神经元之间的连接权重。
需要说明的是,在训练FM的过程中,并没有对特征与进行区分,但在FNN模型中,特征域被分成了不同特征域,因此每个特征域具有对应的Embedding层,并且每个特征域Embedding的维度都应与FM隐向量维度保持一致。
FNN模型除了可以使用FM参数初始化Embedding的权重,也可以使用Embedding预训练的方式来进行初始化。