推荐系统与深度学习(七)——FNN模型原理​


公众号后台回复“图书“,了解更多号主新书内容

作者: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站也能学编程吗
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值