type
status
date
slug
summary
tags
category
icon
password
URL
Rating
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F9341931a-53f0-48e1-b026-0f1ad17b457c%2Fc9113e23-6cd8-4440-a864-e9386f711ef8%2FUntitled.png?table=block&id=1584c149-06bd-46a0-9560-9d36dcb87c71&t=1584c149-06bd-46a0-9560-9d36dcb87c71&width=288&cache=v2)
线性模型到多项式模型
线性模型的缺点显然是表达能力有限了,只能靠各种特征工程的方法(比如交叉特征)来搞定实际问题中的非线性性。一个很自然的想法是,能否把线性模型推广到多项式模型,比如二阶多项式模型:
其中, 代表样本的特征数量, 是第 个特征的值, 、 、 是模型参数。
但显然 数量是 量级的,以及实际应用中可能很多 组合对应的 都没有足够的数据学习到。实际应用中的特征还有个特点,就是很稀疏,因为很多特征是one-hot编码的结果。
CTR预估模型中,LR,FM,FFM的目标函数或者说是损失函数,都可以统一为:
包括两部分:正则项+经验损失。经验损失用的是 logistic loss.
<ins/>
Poly2, FM, FFM
为了解决这个问题,相继提出了模型 Poly2 和 FM。Poly2 又叫做 degree-2 polynomial mappings,它对于每一对组合特征都会学习一个权重,从名字上应该能看出来,最高考虑2维组合特征;FM (Factorization Machines) 则是通过把特征组合分解成两个隐向量的内积来学习组合特征的权重,理论上可以提取任意高维组合特征,但是出于计算复杂度的考虑,实际往往也只是到2维组合特征。
FFM 全称是 Field-aware Factorization Machines,是从 PITF(pairwise interaction tensor factorization)改进而来的。PITF限制了特征维度为User、Item、Tag这三个维度,而且主要关注的问题是个性化标签推荐。FFM去掉了对于特征维度的限制,并且专注于CTR预估问题,更加泛化通用。这也是两者间仅有的区别。
先给出几个模型的公式表达:
对于线性模型有:
对于 Poly2 为:
对于 FM 有:
对于 FFM 有:
其中, 表示特征维度, 分别表示 所属的 field。
为了解决参数过多的问题,Poly2使用了Hash函数的方法,也即之前公式里的 是一个哈希函数。VW和FFM中实现的Hash函数如下:
而 FM 的方法更巧且效果更好:
FM 是可以高效计算的:
FFM 则推广了FM,把变量所属的域(Field)也考虑进去。特征 在面对不同域的特征 时,可以使用不同的向量表达 :
<ins/>
NFM (Neural Factorization Machine)
最近几年,Embedding-based方法开始成为主流,通过把高维稀疏的输入embed到低维度的稠密的隐向量空间中,模型可以学习到训练集中没有出现过的特征组合。
Embedding-based大致可以分为两类:
- factorization machine-based linear models
- neural network-based non-linear models
DNN也被引入到稀疏特征的场景中来了。比如Google的Wide&Deep,微软的DeepCross,以及FNN、PNN等。Wide&Deep的Deep部分是一个MLP,输入是把特征Embedding vector拼接起来得到的;DeepCross的区别在于NN部分不是MLP,而是使用了 residual network。
如果不对嵌入层预训练,Wide&Deep和DeepCross的性能比FM还差,而且DeepCross严重过拟合,Wide&Deep遇到了degradation问题。
如果使用FM预训练初始化嵌入层,Wide&Deep和DeepCross性能都提升了,甚至超过了FM。Wide&Deep的degradation问题也解决了,因为训练集的性能得到了提升。但是两者依旧都有过拟合的问题。实验说明DNN的训练学习真的存在困难。
NFM (Neural Factorization Machine) 架构图如下:
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F9341931a-53f0-48e1-b026-0f1ad17b457c%2Ff539cbc4-131b-41ba-80ca-158d213ca8a9%2FUntitled.png?table=block&id=b9eec127-9c1e-47cf-a899-baf508b1a700&t=b9eec127-9c1e-47cf-a899-baf508b1a700&width=640&cache=v2)
模型公式如下:
其中 是由Bi-Interaction Layer和MLP共同获得的。
Bi是Bi-linear的缩写,这一层其实是一个pooling层操作,它把很多个向量转换成一个向量,形式化如下:
其中 ⊙ 是逐元素点乘。
得到的 向量再输入到MLP中,最终产生预测值 ŷ 。
如果把MLP层去掉,只用 获得最终的 ŷ ,那NFM就退化成FM了。
如果把Bi-Interaction Layer看做一个pooling算子,那 FM 其实就可以看成一个简单的深度学习模型了。
AFM (Attentional Factorization Machine)
AFM其实就是在NFM的基础上,引入Attention机制来学习不同组合特征的重要性。
NFM中的 Bi-Interaction Layer 在获得 时没有考虑到每对相互特征的重要性可能不同。AFM通过 Attention 引入权重解决了这个问题:
其中 表示值非0的特征对集合,而 如下获得:
AFM的框架图如下:
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F9341931a-53f0-48e1-b026-0f1ad17b457c%2Fa80e430c-c6ac-4961-966f-f2a9a97b1979%2FUntitled.png?table=block&id=55c17d18-fe82-4201-9fcf-fda1e80832cf&t=55c17d18-fe82-4201-9fcf-fda1e80832cf&width=640&cache=v2)
PNN (Product-based Neural Network)
PNN (Product-based Neural Network) 的结构和 NFM 非常像,差别主要在 NFM 中的 Bi-Interaction Layer 使用逐元素点乘的方式来获得两个特征的组合方式,而PNN中建议了另一种组合方式:外积。外积后是个矩阵,再通过引入一个待学习的权重矩阵 W,两者逐元素相乘后相加,即得到标量取值。
架构图如下:
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F9341931a-53f0-48e1-b026-0f1ad17b457c%2F99f4bdc6-d18b-4c18-8d31-e03c7499f0b8%2FUntitled.png?table=block&id=708150fe-f983-42b9-921c-83cc3178cfcd&t=708150fe-f983-42b9-921c-83cc3178cfcd&width=623&cache=v2)
如果外积是另一种选择,那其他的组合函数,是不是也都可以试试?
DeepFM
DeepFM 在 DNN 的基础上,类似
Wide & deep architecture
,又并行地引入了 FM。作者期望利用FM 学习低阶特征,DNN 学习高阶特征。架构图如下,其中左边是FM模块,右边是DNN模块:读者可以参考最后一节获取更多细节。让 表示第 个字段的潜在特征向量。 DNN 的输入是
各个嵌入向量的拼接,表示为:
其中 是字段的数量。然后将其输入到以下神经网络:
其中 是激活函数。让 表示预测的输出。DeepFM 的最终预测是 FM 和 DNN 的输出之和。因此有:
DCN (Deep & Cross Network)
DCN 全称 Deep & Cross Network,是谷歌和斯坦福大学在2017年提出的用于 Ad Click Prediction 的模型。
DCN 的创新是在它不仅能学习二阶组合特征,还能学习高阶组合特征。
框架图如下,最开始是 Embedding and stacking layer,然后是并行的 Cross Network 和 Deep Network,最后是 Combination Layer 把 Cross Network 和 Deep Network 的结果组合得到 Output。
![notion image](https://www.notion.so/image/https%3A%2F%2Fprod-files-secure.s3.us-west-2.amazonaws.com%2F9341931a-53f0-48e1-b026-0f1ad17b457c%2Ffd5f3fc4-8c59-4139-ad5f-4806ed3cedea%2FUntitled.png?table=block&id=78eb9608-4fb5-4243-a783-638c654069eb&t=78eb9608-4fb5-4243-a783-638c654069eb&width=640&cache=v2)
Embedding 完了之后,就把获得的各组向量拼接起来(stacking):
Cross Network 是最主要的创新,可以通过引入 层来获得 阶的组合特征,具体如下:
其中 和 分别是第 层和第 层 cross layer 的输出。
不难看出:
其中 是 的 阶多项式函数。
因为每一层的W和b都是d维度的。从上式可以发现,复杂度是输入维度d的线性函数。所以相比于deep network,cross network引入的复杂度微不足道。这样就保证了DCN的复杂度和DNN是一个级别的。论文中表示,Cross Network之所以能够高效的学习组合特征,就是因为 的秩为 1,使得我们不用计算并存储整个的矩阵就可以得到所有的cross terms。
但是,正是因为 cross network 的参数比较少导致它的表达能力受限,为了能够学习高度非线性的组合特征,DCN并行的引入了Deep Network (DNN)。
Combination Layer 把Cross Network 和 Deep Network 的输出拼接起来,然后经过一个加权求和后得到 logits,然后经过sigmoid函数得到最终的预测概率。
损失函数使用带正则项的log loss,形式化如下:
如果 ,且把 Deep Network 去掉,那 DCN 就退化成 FM 了。
<ins/>
References
- 作者:Breezedeus
- 链接:https://www.breezedeus.com/article/fm-models
- 声明:本文采用 CC BY-NC-SA 4.0 许可协议,转载请注明出处。
相关文章