FM系列—DeepFFM、DeepFM 结构详解

通过FM系列—FM+FFM详解我们知道:FM通过对于每一维特征的隐变量内积来提取特征组合。虽然理论上来讲FM可以对高阶特征组合进行建模,但实际上因为计算复杂度的原因一般都只用到了二阶特征组合。那么对于高阶的特征组合,则通过多层的神经网络即DNN去解决。

DeepFM

背景

DeepFM模型包含FM和DNN两部分,FM模型可以抽取low-order特征,DNN可以抽取high-order特征

在CTR中,通常将特征转为one-hot的形式,但如果将这些特征输入到DNN中,会导致网络参数太多,如下图所示:

在这里插入图片描述

为了解决这个问题,我们借鉴FFM的思想,将特征分为不同的field:
在这里插入图片描述

再加两层的全链接层,让Dense Vector进行组合,那么高阶特征的组合就出来了

在这里插入图片描述

但是低阶和高阶特征组合隐含地体现在隐藏层中,如果我们希望把低阶特征组合单独建模,然后融合高阶特征组合。

在这里插入图片描述

即将DNN与FM进行一个合理的融合:

在这里插入图片描述

二者的融合总的来说有两种形式,一是串行结构,二是并行结构:

在这里插入图片描述

这样就实现了:DeepFM模型包含FM和DNN两部分,FM模型可以抽取low-order特征,DNN可以抽取high-order特征。

DeepFM模型

DeepFM的模型结构如下:

在这里插入图片描述

DeepFM包含两部分:神经网络部分与因子分解机部分,分别负责低阶特征的提取和高阶特征的提取。这两部分共享同样的输入。DeepFM的预测结果可以写为:
y ^ = s i g m o i d ( y F M + y D N N ) \hat y = sigmoid(y_{FM} + y_{DNN}) y^=sigmoid(yFM+yDNN)

FM部分详细结构

结构图如下:

在这里插入图片描述

FM部分是一个因子分解机。因为引入了隐变量的原因,对于几乎不出现或者很少出现的隐变量,FM也可以很好的学习。
y F M = w 0 + ∑ i = 1 n w i x i + ∑ i n ∑ j = i + 1 n < v i , v j > x i x j < v i , v j > = ∑ f = 1 k v i f v j f {y_{FM}}=w_0+\sum_{i=1}^n{w_ix_i}+\sum_i^n{\sum_{j=i+1}^n{<v_i,v_j>x_ix_j}}\\ <v_i,v_j>=\sum_{f=1}^k{v_{if}v_{jf}} yFM=w0+i=1nwixi+inj=i+1n<vi,vj>xixj<vi,vj>=f=1kvifvjf

深度部分详细结构图

在这里插入图片描述

深度部分是一个前馈神经网络。与图像或者语音这类输入不同,图像语音的输入一般是连续而且密集的,然而用于CTR的输入一般是及其稀疏的。因此需要重新设计网络结构。具体实现中为,在第一层隐含层之前,引入一个嵌入层来完成将输入向量压缩到低维稠密向量。

在这里插入图片描述

嵌入层(embedding layer)的结构如上图所示。当前网络结构有两个有趣的特性,1)尽管不同field的输入长度不同,但是embedding之后向量的长度均为K。2)在FM里得到的隐变量Vik现在作为了嵌入层网络的权重。

这里的第二点如何理解呢,假设我们的k=5,首先,对于输入的一条记录,同一个field 只有一个位置是1,那么在由输入得到dense vector的过程中,输入层只有一个神经元起作用,得到的dense vector其实就是输入层到embedding层该神经元相连的五条线的权重,即vi1,vi2,vi3,vi4,vi5。这五个值组合起来就是我们在FM中所提到的Vi。在FM部分和DNN部分,这一块是共享权重的,对同一个特征来说,得到的Vi是相同的。

deepFFM

在这里插入图片描述

​ 要做一个神经网络版的 FFM 模型该怎么做?先把它想成 DeepFM,再想怎么改成 FFM。如果是 DeepFM,一个特征、一个 vector,然后在上面做两两特征组合,这就是 DeepFM 的思路。FFM 区别在哪里?一个特征现在不是一个 vector,是 F 个 vector,在两两做特征组合的时候,需要做特征交叉,这不就是深度的 FFM 模型吗?很简单,NeuralFFM 就是这个思想。

在这里插入图片描述

两个特征进行组合的时候,可以用内积做,也可以用哈达马积做,这是有区别的。什么是内积呢?就是两个向量,每个位置对应的相乘求和,表示一个数值;哈达马积怎么做的呢?它比内积少做了一步,把对应的位置相乘,乘完之后不进行求和。

在这里插入图片描述

我们这个 DeepFFM 是怎么改进的呢?在特征交互层,也就是两两特征在这组合,我们加了一个 Attention,也就是一个注意力模型进去。我认识两两特征组合,但是有的组合特征比较重要,有的没那么重要,怎么体现这个思想?给每个特征组加个权重就可以。怎么给权重?加个 Attention 就可以了。这就是我们 DeepFFM 的核心思想。
在这里插入图片描述

在特征交互层,我们先给出个内积版,这是一个特征组合,组合完是一个值,我给每个两两特征组合的值都加个权重 a1-an,加完权重之后,再把权重乘到值里,再加上 Layer Norm,往上面引层去走,这是第一个改进版本。
在这里插入图片描述

有没有新的改进版本?肯定有,不仅有内积,还有哈达马积。哈达马积是说两个特征组合完之后是个向量,这是一个特征组合,里面有若干个神经元,但它整体代表一个特征组合。我给组合完的 vector 整体加个权重 a1-an,每个都加权重,一样再乘回来,上面再套 LN,这就是哈达马积版本。

在这里插入图片描述

那么,能不能继续改进?我刚才是把它当作一个整体求 Attention,还可以把每一位拆开,每个位都加 Attention,每个位上面套层 LN,这就是第三个版本。

在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值