公众号后台回复“图书“,了解更多号主新书内容
作者:livan
来源:数据python与算法
FNN原理介绍
FNN模型是对FM模型的一次提升计算,主要是将FM与DNN进行结合,用FM进行第一层的Embedding操作,然后将Embedding结果输入到DNN中,实现CTR的预估。
先来看一下FM模型:
对于训练任务,首先单纯进行FM模型训练,训练完成后会得到一组(w,v,……)值,然后将这组(w,v,……)值引入到DNN模型中,进行深度训练,并将结果值作为模型的最终结果。
具体如图:
为了加速模型的收敛,FNN充分利用FM的特征表达能力,采用两阶段训练方式:
首先,针对任务构建FM模型,完成模型参数的学习;
然后,将FM的参数作为FNN底层参数的初始值;
这种两阶段方式的应用,是为了将FM作为先验知识加入到模型中,防止因为数据稀疏带来的歧义造成模型参数偏差。
模型解读为:
1)FNN最高层是输出一个实数:
其对应的公式为:
2)l2是这层的输入,l2的计算方式为:
3)我们使用tanh作为激活函数是因为从经验上,这个要比其他的激活函数表现更好,同理得出更下一层的公式为:
4)其中的z值即为:
5)其中n是领域的数量,zi是第i个领域的FM的向量参数,对应的公式为:
通过这一思路,我们就深入到了模型的第一层,这一层中,通过预先训练一个FM模型:
将FM模型中的参数(w,v,……)作为上一步中的内容。
通过这种方法,上面的神经网络可以从FM的表示中更加有效的学习。可以学到更加多的潜在的数据间的模式,能够得到更好的效果。
更进一步,隐含层的权重(除了FM层)可以通过预训练的RBM来进行初始化。FM的权重可以通过SGD来进行更新,我们只需要更新那些不为0的单元,这样可以减少大量的计算。通过预训练对FM层和其他的层进行初始化之后,再通过监督学习的方法进行finetune,使用交叉熵的损失函数:
然后通过反向传播的方法来更新权值。由于输入x中的大量的元素都是0,我们可以只更新相关的权值来加速finetune。
FNN的优缺点
优点:
1)引入DNN对特征进行更高阶组合,减少特征工程,能在一定程度上增强FM的学习能力。这种尝试为后续深度推荐模型的发展提供了新的思路。
缺点:
1)两阶段训练模式,在应用过程中不方便,且模型能力受限于FM表征能力的上限。
2)FNN专注于高阶组合特征,但是却没有将低阶特征纳入模型。
仔细分析下这种两阶段训练的方式,存在几个问题:
1)FM中进行特征组合,使用的是隐向量点积。将FM得到的隐向量移植到DNN中接入全连接层,全连接本质是将输入向量的所有元素进行加权求和,且不会对特征Field进行区分,也就是说FNN中高阶特征组合使用的是全部隐向量元素相加的方式。说到底,在理解特征组合的层面上FNN与FM是存在Gap的,而这一点也正是PNN对其进行改进的动力。
2)在神经网络的调参过程中,参数学习率是很重要的。况且FNN中底层参数是通过FM预训练而来,如果在进行反向传播更新参数的时候学习率过大,很容易将FM得到的信息抹去。个人理解,FNN至少应该采用Layer-wise learning rate,底层的学习率小一点,上层可以稍微大一点,在保留FM的二阶交叉信息的同时,在DNN上层进行更高阶的组合。
数据森麟公众号的交流群已经建立,许多小伙伴已经加入其中,感谢大家的支持。大家可以在群里交流关于数据分析&数据挖掘的相关内容,还没有加入的小伙伴可以扫描下方管理员二维码,进群前一定要关注公众号奥,关注后让管理员帮忙拉进群,期待大家的加入。
管理员二维码:
猜你喜欢
● 麟哥拼了!!!亲自出镜推荐自己新书《数据分析师求职面试指南》● 厉害了!麟哥新书登顶京东销量排行榜!● 笑死人不偿命的知乎沙雕问题排行榜
● 用Python扒出B站那些“惊为天人”的阿婆主!● 你相信逛B站也能学编程吗