推荐系统 - 排序算法 - 神经网络:FNN 论文阅读

1. 前言

FNN 在文章 Deep Learning over Multi-field Categorical Data – A Case Study on User Response Prediction  中提出 论文地址

该篇论文于2016年发表,提出了基于FM预训练获取离散特征embedding表示(注意这里的“特征”指的是FFM中说的“field”,而不是FM中说的“特征”,比如“性别”算一个特征、“品类”算一个特征),结合MLP来进行CTR的预估,因为思想比较简洁,放在现在来看已经不算特别新奇了。

2. 简介

在FM之后出现了很多基于FM的升级改造工作,由于计算复杂度等原因,FM通常只对特征进行二阶交叉。当面对海量高度稀疏的用户行为反馈数据时,二阶交叉往往是不够的,三阶、四阶甚至更高阶的组合交叉能够进一步提升模型学习能力。如何能在引入更高阶的特征组合的同时,将计算复杂度控制在一个可接受的范围内?

参考图像领域CNN通过相邻层连接扩大感受野的做法,使用DNN来对FM显式表达的二阶交叉特征进行再交叉,从而产生更高阶的特征组合,加强模型对数据模式的学习能力]。这便是本文所要介绍的FNN模型,下面将对FNN进行详细介绍。

3. FNN结构

FNN(Factorisation Machine supported Neural Network)的模型结构如下:

推荐系统 - 排序算法 - 神经网络:FNN 论文阅读_第1张图片

FNN的思想比较简单,直接在FM(预训练)上接入若干全连接层。利用DNN对特征进行隐式交叉,可以减轻特征工程的工作,同时也能够将计算时间复杂度控制在一个合理的范围内。

这个结构和NLP中的embedding+MLP的结构基本保持一致。在NLP中,embedding matrix我们可以通过随机初始化并通过joint train来一起训练,也可以使用预训练模型(Bert, GloVe...).

FNN是利用FM来学习embedding的嵌入表达后作为embedding matrix的初始化,类似于NLP中使用了预训练模型,相当于给embedding加上了先验知识,可以更快地收敛,当然这不代表其效果就比随机初始化好… 和NLP中不同的是,在FNN中之后并没有通过fine tuning来调整参数,所以FNN不是end-to-end训练的,而是一种“贪心”的训练方法。

3.1 用FM预训练做embedding

推荐系统 - 排序算法 - 神经网络:FNN 论文阅读_第2张图片

 

FM模型会为每一个field都单独学习一个隐向量,通过隐向量之间的内积表示两个field之间的交叉权重,这里将FM训练后的特征提取出来作为FNN的embedding的初始化。

假设输入是n个离散特征(onehot 取值之前),onehot后则只有n个1(这里假设没有多值特征),假设FM的embedding_size为k. 对于每一个field, 我们会拼接k维的embedding vector以及一个偏置bias,从而得到k+1维向量;在FNN中,总共有n个field,所以所有field的embedding拼接长度为n*(k+1)。最后再concat个偏置,得到的总体embedding长度则为1+n*(k+1)。这就是我们的dense real layer z. 剩下的就是拼接若干层全连接了.

3.2 全连接层

推荐系统 - 排序算法 - 神经网络:FNN 论文阅读_第3张图片

用tanh还是16年的工作,现在relu、prelu、leakeyrelu、dice等等激活函数层出不穷,实际使用可选余地就很多了。

4. 优缺点

优点:

  • 引入DNN对特征进行更高阶组合,减少特征工程,能在一定程度上增强FM的学习能力。这种尝试为后续深度推荐模型的发展提供了新的思路。

缺点:

  • 两阶段训练模式,在应用过程中不方便,且模型能力受限于FM表征能力的上限。(不是end-to-end训练)
  • FNN专注于高阶组合特征,但是却没有将低阶特征纳入模型。

仔细分析下这种两阶段训练的方式,存在几个问题

1)FM中进行特征组合,使用的是隐向量点积。将FM得到的隐向量移植到DNN中接入全连接层,全连接本质是将输入向量的所有元素进行加权求和,且不会对特征Field进行区分,也就是说FNN中高阶特征组合使用的是全部隐向量元素相加的方式。说到底,在理解特征组合的层面上FNN与FM是不同的(FM: 点积,FNN:加权平均),而这一点也正是PNN对其进行改进的动力。

2)在神经网络的调参过程中,参数学习率是很重要的。况且FNN中底层参数是通过FM预训练而来,如果在进行反向传播更新参数的时候学习率过大,很容易将FM得到的信息抹去。个人理解,FNN至少应该采用Layer-wise learning rate(不同层的学习率不同),底层的学习率小一点,上层可以稍微大一点,在保留FM的二阶交叉信息的同时,在DNN上层进行更高阶的组合。

 

5. 关于神经网络在推荐系统中应用的碎碎念

目前具备实用化价值的DNN版本的CTR模型一般采用MLP结构,看着远远落后CV/NLP的特征抽取器的发展水平,很容易让人产生如下感觉:CTR的DNN模型还处于深度学习原始社会阶段。那这又是为什么呢?因为CNN的特性天然不太适合推荐排序这个场景,RNN作为捕捉用户行为序列,利用时间信息的辅助结构还行,但是也不太适合作为CTR预估或者推荐排序的主模型。好像剩下的选择不多了(Transformer是很有希望的,Self attention应该是个能很好地捕捉特征组合(包括二阶/三阶…多阶)的工具,于是,有其他公司尝试过用self attention和transformer作为CTR的主体排序模型,测试效果和DeepFM等主流模型效果差不太多。18年下半年已经冒出几篇用Transformer做CTR排序模型的论文了),于是剩下的选择貌似只有MLP了。在深度学习大潮下,从模型角度看,确实跟很多领域比,貌似推荐领域远远落后,这个是事实。我觉得主要原因是它自身的领域特点造成的,它可能需要打造适合自身特点的DNN排序模型。就像图像领域里有Resnet时刻,NLP里面有Bert时刻,推荐排序深度模型目前还没有,现在和未来也需要这个类似的高光时刻,而这需要一个针对它特性改造出的新结构。

你可能感兴趣的:(京东实习,神经网络,推荐系统)