FFM原理及公式推导
原文来自:博客园(华夏35度)http://www.cnblogs.com/zhangchaoyang 作者:Orisun
上一篇讲了FM(Factorization Machines),说一说FFM(Field-aware Factorization Machines )。
回顾一下FM:
$\begin{equation}\hat{y}=w_0+\sum_{i=1}^n{w_ix_i}+\sum_{i=1}^n{\sum_{j=i+1}^n{v_i\cdot v_jx_ix_j}}\label{fm}\end{equation}$ (1)
$\cdot$表示向量的内积。样本$x$是$n$维向量,$x_i$是第$i$个维度上的值。$v_i$是$x_i$对应的长度为$K$的隐向量,$V$是模型参数,所以所有样本都使用同一个$V$,即$x_{1,1}$与$x_{2,1}$都使用$v_1$。
在FFM(Field-aware Factorization Machines )中每一维特征(feature)都归属于一个特定的field,field和feature是一对多的关系。比如
field | field1年龄 | field2城市 | field3性别 | |||
feature | x1年龄 | x2北京 | x3上海 | x4深圳 | x5男 | x6女 |
用户1 | 23 | 1 | 0 | 0 | 1 | 0 |
用户2 | 31 | 0 | 0 | 1 | 0 | 1 |
1. 对于连续特征,一个特征就对应一个Field。或者对连续特征离散化,一个分箱成为一个特征。比如
field | field1年龄 | |||
feature | 小于20 | 20-30 | 30-40 | 大于40 |
用户1 | 0 | 23 | 0 | 0 |
用户2 | 0 | 0 | 31 | 0 |
2. 对于离散特征,采用one-hot编码,同一种属性的归到一个Field
不论是连续特征还是离散特征,它们都有一个共同点:同一个field下只有一个feature的值不是0,其他feature的值都是0。
FFM模型认为$v_i$不仅跟$x_i$有关系,还跟与$x_i$相乘的$x_j$所属的Field有关系,即$v_i$成了一个二维向量$v_{F\times K}$,$F$是Field的总个数。FFM只保留了(1)中的二次项.
$\begin{equation}\hat{y}=\sum_{i=1}^n{\sum_{j=i+1}^n{v_{i,fj}\cdot v_{j,fi}x_ix_j}}\label{ffm}\end{equation}$(2)
以上文的表格数据为例,计算用户1的$\hat{y}$
$\hat{y}=v_{1,f2}\cdot v_{2,f1}x_1x_2+v_{1,f3}\cdot v_{3,f1}x_1x_3+v_{1,f4}\cdot v_{4,f1}x_1x_4+\cdots$
由于$x_2,x_3,x_4$属于同一个Field,所以$f2,f3,f4$可以用同一个变量来代替,比如就用$f2$。
$\hat{y}=v_{1,f2}\cdot v_{2,f1}x_1x_2+v_{1,f2}\cdot v_{3,f1}x_1x_3+v_{1,f2}\cdot v_{4,f1}x_1x_4+\cdots$
我们来算一下$\hat{y}$对$v_{1,f2}$的偏导。
$\hat{y}=v_{1,f2}\cdot v_{2,f1}x_1x_2+v_{1,f2}\cdot v_{3,f1}x_1x_3+v_{1,f2}\cdot v_{4,f1}x_1x_4+\cdots$
等式两边都是长度为$K$的向量。
注意$x_2,x_3,x_4$是同一个属性的one-hot表示,即$x_2,x_3,x_4$中只有一个为1,其他都为0。在本例中$x_3=x_4=0, x_2=1$,所以
$\frac{\partial{\hat{y}}}{\partial{v_{1,f2}}}=v_{2,f1}x_1x_2$
推广到一般情况:
$\begin{equation}\frac{\partial{\hat{y}}}{\partial{v_{i,fj}}}=v_{j,fi}x_ix_j\label{par}\end{equation}$(3)
$x_j$属于Field$fj$,且同一个Field里面的其他$x_m$都等于0。实际项目中$x$是非常高维的稀疏向量,求导时只关注那些非0项即可。
你一定有个疑问:$v$是模型参数,为了求$v$我们$\cdot$采用梯度下降法时需要计算损失函数对$v$的导数,为什么这里要计算$\hat{y}$对$v$的导数?看看分割线下方的内容你就明白了。
在实际预测点击率的项目中我们是不会直接使用公式(2)的,通常会再套一层sigmoid函数。公式(2)中的y^我们用z来取代。
$z=\phi(v,x)=\sum_{i=1}^n{\sum_{j=i+1}^n{v_{i,fj}\cdot v_{j,fi}x_ix_j}}$
由公式(3)得
$\frac{\partial{z}}{\partial{v_{i,fj}}}=v_{j,fi}x_ix_j$
用$a$表示对点击率的预测值
$a=\sigma(z)=\frac{1}{1+e^{-z}}=\frac{1}{1+e^{-\phi(v,x)}}$
令$y=0$表示负样本,$y=1$表示正样本,$C$表示交叉熵损失函数。根据《神经网络调优》中的公式(1)(2)可得
$\frac{\partial C}{\partial z}=a-y=\left\{\begin{matrix}-\frac{1}{1+e^z} & if\ y是正样本 \\ \frac{1}{1+e^{-z}} & if\ y是负样本\end{matrix}\right .$
$\frac{\partial C}{\partial{v_{i,fj}}}=\frac{\partial C}{\partial z}\frac{\partial{z}}{\partial{v_{i,fj}}}$
看完了本博客再去看论文《Field-aware Factorization Machines for CTR Prediction》中的公式推导应该就比较容易了吧,在该论文中他是以$y=1$代表正样本,$y=−1$代表负样本,所以才有了3.1节中的
$\kappa=\frac{\partial C}{\partial z}=\frac{-y}{1+e^{yz}}$
FFM原理及公式推导的更多相关文章
- XGBoost原理和公式推导
本篇文章主要介绍下Xgboost算法的原理和公式推导.关于XGB的一些应用场景在此就不赘述了,感兴趣的同学可以自行google.下面开始: 1.模型构建 构建最优模型的方法一般是最小化训练数据的损失 ...
- 深入FM和FFM原理与实践
FM和FFM模型是最近几年提出的模型,凭借其在数据量比较大并且特征稀疏的情况下,仍然能够得到优秀的性能和效果的特性,屡次在各大公司举办的CTR预估比赛中获得不错的战绩.美团点评技术团队在搭建DSP的过 ...
- 深入理解FFM原理与实践
原文:http://tech.meituan.com/deep-understanding-of-ffm-principles-and-practices.html 深入理解FFM原理与实践 del2 ...
- FM/FFM原理
转自https://tech.meituan.com/deep-understanding-of-ffm-principles-and-practices.html 深入FFM原理与实践 del2z, ...
- NDT(Normal Distributions Transform)算法原理与公式推导
正态分布变换(NDT)算法是一个配准算法,它应用于三维点的统计模型,使用标准最优化技术来确定两个点云间的最优的匹配,因为其在配准过程中不利用对应点的特征计算和匹配,所以时间比其他方法快.下面的公式推导 ...
- 线性模型之逻辑回归(LR)(原理、公式推导、模型对比、常见面试点)
参考资料(要是对于本文的理解不够透彻,必须将以下博客认知阅读,方可全面了解LR): (1).https://zhuanlan.zhihu.com/p/74874291 (2).逻辑回归与交叉熵 (3) ...
- GAN 原理及公式推导
Generative Adversarial Network,就是大家耳熟能详的 GAN,由 Ian Goodfellow 首先提出,在这两年更是深度学习中最热门的东西,仿佛什么东西都能由 GAN 做 ...
- 机器学习 | 详解GBDT在分类场景中的应用原理与公式推导
本文始发于个人公众号:TechFlow,原创不易,求个关注 今天是机器学习专题的第31篇文章,我们一起继续来聊聊GBDT模型. 在上一篇文章当中,我们学习了GBDT这个模型在回归问题当中的原理.GBD ...
- 深度学习中常见的 Normlization 及权重初始化相关知识(原理及公式推导)
Batch Normlization(BN) 为什么要进行 BN 防止深度神经网络,每一层得参数更新会导致上层的输入数据发生变化,通过层层叠加,高层的输入分布变化会十分剧烈,这就使得高层需要不断去重新 ...
随机推荐
- LA5713 秦始皇修路 (mst)
题意: 秦朝有n个城市,需要修路让每个城市都互相连通,现在可以免费修一条路,秦始皇希望他除了这条免费修的路外所需修的路的总和B最短,同时这条免费的路连接的人口之和A尽可能大,求最大的A/B是多少,城市 ...
- python第十二课——for in循环
1.for...in循环: 有两个使用场景: 场景一:for in和range对象配合使用 range对象的引入讲解 格式:range([start,end,step]): 特点:索引满足含头不含尾的 ...
- python第十一课——转换结构
3.转换函数:int():float():str():list():tuple():set():dict():bool(): 案例: #演示各个转换函数的使用: 数值型-->字符型使用:str( ...
- loli的测试——搜索
今天是2018.5.24,loli给我们说要考搜索,本来以为是给初学者们考的就没准备,然而老师说我们也要考.(2018.6.29补:这次的简单测试与之后变得非常难的几次搜索测试形成了鲜明的对比,从而更 ...
- Java基础加强之代理
本文引用自 http://www.cnblogs.com/xdp-gacl/p/3971367.html 1.什么是代理 动态代理技术是整个java技术中最重要的一个技术,它是学习java框架的基础, ...
- 集合之保持compareTo和equals同步
在Java中我们常使用Comparable接口来实现排序,其中compareTo是实现该接口方法.我们知道compareTo返回0表示两个对象相等,返回正数表示大于,返回负数表示小于.同时我们也知道e ...
- 预编译指令#ifdef #endif
这个是C中的.意思是说如果你定义了某个东西,则执行一段代码,这段代码是包含在ifdef到endif之间的.比如,你debug一个程序,但是到最后你需要将debug的代码删掉,很多则很麻烦.但是如果你那 ...
- 浅谈User Information List
[User Information List]用于查看一个site collection所有可以访问的用户信息.一个site collection只有一个User Information List表. ...
- centos配置静态ip地址
1.输入以下命令: vim /etc/sysconfig/network-scripts/ifcfg-eth0 2.注释掉BOOTPROTO=dhcp 3.添加如下内容: ONBOOT=yes 表示开 ...
- 树莓派3B+学习笔记:1、安装官方系统
1.登录树莓派官方网站www.raspberrypi.org,点击Downloads: 2.点击NOOBS: 3.选择下载方式,可以选择下载BT种子或直接下载,这里我用迅雷直接下载,下载速度还是很快的 ...