因子分解机FM原理及SGD训练
来源:互联网 发布:mac怎么改语言 编辑:程序博客网 时间:2024/05/16 00:46
版权声明:如需转载,请注明出处http://blog.csdn.net/a819825294
目录(?)[-]
- 背景
- 模型
- 用途
- 交叉项系数
- SGD求解参数
1.背景
Steffen Rendle于2010年提出Factorization Machines(下面简称FM),并发布开源工具libFM。FM的提出主要对比对象是SVM,与SVM相比,有如下几个优势
(1)对于输入数据是非常稀疏(比如自动推荐系统),FM可以,而SVM会效果很差,因为训出的SVM模型会面临较高的bias。
(2)FMs拥有线性的复杂度, 可以通过 primal 来优化而不依赖于像SVM的支持向量机。
2.模型
2-way FM(degree = 2)是FM中具有代表性,且比较简单的一种。就以其为例展开介绍。其对输出值是如下建模
其中,,,,n表示特征维度
表示两个大小为k的向量和的点积
k是定义factorization维度的超参数,是正整数
因子分解机FM也可以推广到高阶的形式,即将更多互异特征分量之间的相互关系考虑进来。
3.用途
(1)回归问题(Regression):可以采用最小均方误差作为优化的标准(深入理解可以从高斯分布、极大似然估计入手)
(2)二分类问题(Binary Classification):利用sigmoid函数。详细原因见 地址
(3)排序(Ranking)
4.交叉项系数
(1)示例
样本数据
FM交叉项系数
(2)求解
表面上看FM模型的第3项的计算复杂度为O(kn^2),但其实可以经过简单的数学处理,计算复杂度降为O(kn)。
数学原理:主要是采用了如公式((a+b+c)2−a2−b2−c2求出交叉项
5.SGD求解参数
本文利用随机梯度下降SGD进行参数学习,也是一种简单的在线学习方法。
随机梯度下降与梯度下降主要差别在于batch size不一样
注:大家可以根据自己需要定义Loss Function,通过梯度下降得到参数更新的公式
最初的V通过正态分布的形式给出
所示代码是通过简单的似然估计进行二分类从而进行参数更新
后续会更新利用FTRL训练FM
参考文献
(1)Steffen Rendle.Factorization Machines
(2)Steffen Rendle.Factorization Machines with libFM
(3)http://tech.meituan.com/deep-understanding-of-ffm-principles-and-practices.html
- 因子分解机FM原理及SGD训练
- 因子分解机FM原理及SGD训练
- FM(因子分解机系列)
- 因子分解机
- N!分解素因子及若干问题
- 因子分解
- 因子分解
- 因子分解
- POJ 2773 happy2006 (素因子分解+容斥原理+二分)
- HDU 4135&HDU 4407--容斥原理--质因子分解
- POJ1091 跳蚤 素因子分解+容斥原理
- HDU 2841 Visible Trees (素因子分解,容斥原理)
- poj1091(容斥原理+质因子分解)跳蚤
- 隐因子分解机Factorization Machine
- 隐因子分解机Factorization Machine
- 从SVD、SVD++到因子分解机
- SGD对20Newsgroups训练
- Java - 华为机试训练 - 质数因子
- 阿里云服务器(centos)安装node和n
- python设计模式之策略模式
- gdb 调试
- 513. Find Bottom Left Tree Value (vector & queue)
- Java并发编程:线程池的使用
- 因子分解机FM原理及SGD训练
- 第三方MiPush框架上线:既保证推送,又无需应用挂后台
- 01hadoop简介
- 看视频习得超级内存优化和性能优化技能(runLoop)
- 02hadoop的HDFS
- Git Submodule简单操作
- 03hadoop的MapReduce
- Spring security
- 04hadoop的Yarn