【读书笔记->推荐系统】02-04 从FM到FFM

news/2024/5/19 20:54:08 标签: 推荐算法, 算法, 机器学习

02-04 FM与FFM

思维导图纲要

在这里插入图片描述


逻辑回归模型表达能力不强的问题,会不可避免地造成有效信息的损失。在仅利用单一特征而非交叉特征进行判断的情况下,有时不仅是信息损失的问题,甚至会得出错误的结论。著名的“辛普森悖论”用一个非常简单的例子,说明了进行多维度特征交叉的重要性。

什么是辛普森悖论

见【推荐系统->统计学】辛普森悖论(Simpson‘s paradox)。

书中的例子:

下表是某视频应用中男性用户和女性用户点击视频的数据。

在这里插入图片描述

从以上数据中可以看出,无论男性用户还是女性用户,对视频 B 的点击率都高于视频 A,显然推荐系统应该优先考虑向用户推荐视频 B。

而在汇总结果中,视频 A 的点击率居然比视频 B 高。如果据此进行推荐,将得岀与之前的结果完全相反的结论,这就是所谓的 “辛普森悖论”

在这里插入图片描述

在 “辛普森悖论”的例子中,分组实验相当于使用“性别”+“视频id”的组合特征计算点击率,而汇总实验则使用“视频 id” 这一单一特征计算点击率。汇总实验对高维特征进行了合并,损失了大量的有效信息,因此无法正确刻画数据模式。

逻辑回归只对单一特征做简单加权,不具备进行特征交叉生成高维组合特征的能力,因此表达能力很弱,甚至可能得出像“辛普森悖论”那样的错误结论。因此,通过改造逻辑回归模型,使其具备特征交叉的能力是必要和迫切的。(个人理解:如果视频id组合了性别这个特征,或者其他特征,可能能找出真正影响点击率的因素,单单一个视频id的点击率维度太高。后面所以才有特征交叉(=特征组合)的方法)

POLY2模型——特征交叉的开始

针对特征交叉的问题,算法工程师经常采用先手动组合特征,再通过各种分析手段筛选特征的方法,但该方法无疑是低效的。更遗憾的是,人类的经验往往有局限性,程序员的时间和精力也无法支撑其找到最优的特征组合。(我不做人啦jojo!!!😈)

因此,采用P0LY2 模型进行特征的 “暴力” 组合成了可行的选择。

P0LY2 模型的数学形式如(式 2-20 ) 所示。

在这里插入图片描述

该模型对所有特征进行了两两交叉(特征 x j 1 x_{j_1} xj1 x j 2 x_{j_2} xj2),并对所有的特征组合赋予权重 w h ( j 1 , j 2 ) w_{h(j_1,j_2)} wh(j1,j2)。POLY2通过暴力组合特征的方式,在一定程度上解决了特征组合的问题。POLY2模型本质上仍是线性模型,其训练方法与逻辑回归并无区别,因此便于工程上的兼容。

但 POLY2 模型存在两个较大的缺陷。

( 1 ) 在处理互联网数据时,经常采用 one-hot 编码的方法处理类别型数据,致使特征向量极度稀疏,POLY2 进行无选择的特征交叉—原本就非常稀疏的特征向量更加稀疏,导致大部分交叉特征的权重缺乏有效的数据进行训练,无法收敛。
( 2 ) 权重参数的数量由n直接上升到n2, 极大地增加了训练复杂度。(个人理解:特征两两组合,共有 ( n − 1 ) + ( n − 2 ) + . . . + 1 = n ( n − 1 ) 2 (n-1)+(n-2)+...+1 = \frac{n(n-1)}{2} (n1)+(n2)+...+1=2n(n1),复杂度为n2

FM模型——隐向量特征交叉

为了解决 POLY2 模型的缺陷,2010 年,Rendle 提出了 FM 模型。

( 式 2-21 ) 是 FM 二阶部分的数学形式,与 POLY2 相比,其主要区别是用两个向量的内积 ( w j 1 ⋅ w j 2 ) (w_{j_1}·w_{j_2}) (wj1wj2)取代了单一的权重系数 w h ( j 1 , j 2 ) w_{h(j_1, j_2)} wh(j1,j2)。具体地说,FM为每个特征学习了一个隐权重向量(latent vector)。在特征交叉时,使用两个特征隐向量的内积(数量积、点积,结果是标量)作为交叉特征的权重。

内积概念可见文末参考文献

在这里插入图片描述

本质上,FM 引入隐向量的做法,与矩阵分解用隐向量代表用户和物品的做法异曲同工。可以说,FM 是将矩阵分解隐向量的思想进行了进一步扩展,从单纯的用户、物品隐向量扩展到了所有特征上。

隐向量的引人使 FM 能更好地解决数据稀疏性的问题。举例来说,在某商品推荐的场景下,样本有两个特征,分别是频道( channel ) 和品牌( brand ), 某训练样本的特征组合是(ESPN,Adidas)。在 POLY2 中,只有当 ESPN 和 Adidas 同时出现在一个训练样本中时,模型才能学到这个组合特征对应的权重;而在 FM 中,ESPN 的隐向量也可以通过(ESPN,Gucci)样本进行更新,Adidas 的隐向量也可以通过(NBC,Adidas)样本进行更新,这大幅降低了模型对数据稀疏性的要求。甚至对于一个从未岀现过的特征组合(NBC, Gucci), 由于模型之前已经分别学习过NBC 和 Gucci 的隐向量,具备了计算该特征组合权重的能力,这是 P0LY2 无法实现的。相比 P0LY2, FM 虽然丢失了某些具体特征组合的精确记忆能力,但是泛化能力大大提高。

在工程方面,FM 同样可以用梯度下降法进行学习,使其不失实时性和灵活性。

FFM模型——引入特征域的概念

相比 FM 模型,FFM 模型引人了特征域感知( field-aware ) 这一概念,使模型的表达能力更强。

在这里插入图片描述

( 式 2-22 )是 FFM 的数学形式的二阶部分。其与 FM 的区别在于隐向量由原来的 w j 1 w_{j_1} wj1变成了 w j 1 , f 2 w_{j_1,f2} wj1,f2,这意味着每个特征对应的不是唯一一个隐向量,而是一组隐向量。当 x j 1 x_{j _1} xj1特征与 x j 2 x_{j_2} xj2特征进行交叉时, x j 1 x_{j _1} xj1特征会从 x j 1 x_{j _1} xj1的这一组隐向量中挑出与特征 x j 2 x_{j _2} xj2的域 f 2 f_2 f2对应的隐向量 x j 1 , f 2 x_{j _1,f_2} xj1,f2进行交叉。同理。 x j 2 x_{j_2} xj2也会用与 x j 1 x_{j_1} xj1的域 f 1 f_1 f1对应的隐向量进行交叉。

这里所说的域(field ) 具体指什么呢?简单地讲,“域” 代表特征域,域内的特征一般是采用 one-hot 编码形成的一段 one-hot 特征向量。例如,用户的性别分为男、女、未知三类,那么对一个女性用户来说,采用 one-hot 方式编码的特征向量为[0,1,0],这个三维的特征向量就是一个“性别”特征域。将所有特征域连接起来,就组成了样本的整体特征向量。

下面介绍 Criteo FFM 的论文中的一个例子,更具体地说明 FFM 的特点。假设在训练推荐模型过程中接收到的训练样本如图 2-11 所示。

在这里插入图片描述

其中,Publisher Advertiser Gender 是三个特征域,ESPN、NIKE、Male分别是这三个特征域的特征值 还需要转换成 one-hot 特征)。

如果按照 FM 的原理,特征 ESPN,NIKE 和 Male 都有对应的隐向量, w E S P N , w N I K E , w M a l e w_{ESPN},w_{NIKE},w_{Male} wESPN,wNIKE,wMale, 那么 ESPN 特征与 NIKE 特征、ESPN 特征与 Male 特征做交叉的权重应该是 w E S P N ⋅ w N I K E w_{ESPN}·w_{NIKE} wESPNwNIKE w E S P N ⋅ w M a l e w_{ESPN}·w_{Male} wESPNwMale。其中,ESPN 对应的隐向量 w E S P N w_{ESPN} wESPN在两次特征交叉过程中是不变的。

而在FFM中,ESPN与NIKE、ESPN与Male交叉特殊的权重分别是 w E S P N , A ⋅ w N I K E , P w_{ESPN,A} \cdot w_{NIKE,P} wESPN,AwNIKE,P w E S P N , G ⋅ w M a l e , P w_{ESPN,G} \cdot w_{Male,P} wESPN,GwMale,P

可以看到,ESPN 在与 NIKE 和 Male 交叉时分别使用了不同的隐向量 w E S P N , A w_{ESPN,A} wESPN,A w E S P N , G w_{ESPN,G} wESPN,G,这是由于 NIKE 和 Male 分别在不同的特征域Advertiser(A)和 Gender(G)导致的。(还可以看到, w N I K E , P w_{NIKE,P} wNIKE,P w M a l e , P w_{Male,P} wMale,P的“P”是相同的,说明它们针对Publisher§)

在 FFM 模型的训练过程中,需要学习 n个特征在f个域上的k维隐向量,参数数量共n·k·f个。在训练方面,FFM 的二次项并不能像 FM 那样简化,因此其复杂度为kn2

相比 FM, FFM 引人了特征域的概念,为模型引人了更多有价值的信息,使模型的表达能力更强,但与此同时,FFM 的计算复杂度提高。在实际工程应用中,需要在模型效果和工程投人之间进行权衡。

从POLY2到FFM的模型演化过程

本节最后,用图示的方法回顾从 POLY2 到 FM 再到 FFM 的模型演化过程。本节仍以图 2-8 所示的训练样本为例。

P0LY2 模型直接学习每个交叉特征的权重,若特征数量为n,则权重数量为n2量级,具体为n(n-1)/2 个。如图 2-12 所示,每个彩色原点代表一个特征交叉项。

在这里插入图片描述

FM 模型学习每个特征的k维隐向量,交叉特征由相应特征隐向量的内积得到(个人理解:两个向量内积得到标量-交叉特征的权重),权重数量共nk个(个人理解:为二次项参数数量)。FM 比 POLY2 的泛化能力强,但记忆能力有所减弱,处理稀疏特征向量的能力远强于 POLY2。如图 2-13 所示,每个特征交叉项不再是单独一个圆点,而是3个彩色圆点的内积,代表每个特征有一个3维的隐向量。

更详细可见推荐系统FM & FFM算法解读与实践。(所有二次项参数 w i j w_{ij} wij可以组成一个对称阵 W ⃗ \vec{W} W ,可以分解为 V ⃗ T V ⃗ \vec{V}^T \vec{V} V TV V ⃗ \vec{V} V 的第j列( v j v_j vj)便是第j维特征( x j x_j xj)的隐向量。 换句话说,特征分量 x i x_i xi x j x_j xj的交叉项系数就等于 x i x_i xi对应的隐向量与 x j x_j xj对应的隐向量的内积,即每个参数 w i j = < v i , v j > w_{ij} = <v_i,v_j> wij=<vi,vj>(<>为内积))(个人理解:简单地说,本来需要(n,n)维度的参数,即n2,现在只需要(n,k)维度,即n*k,就可以模拟出n2的参数来)

在这里插入图片描述

FFM 模型在 FM 模型的基础上引入了特征域的概念,在做特征交叉时,每个特征选择与对方域对应的隐向量做内积运算,得到交叉特征的权重,在有n个特征,f个特征域,隐向量维度为k的前提下,参数数量共n·k·f个。如图 2-14 所示,每个特征都有2个隐向量,根据特征交叉对象特征域的不同,选择使用对应的隐向量。(FFM模型认为 v i v_i vi不仅跟 x i x_i xi有关系,还跟与 x i x_i xi相乘的 x j x_j xj所属的Field有关系,即 v i v_i vi成了一个二维向量 v F × K v_{F \times K} vF×K,K是隐向量长度,F是Field的总个数。FFM的二次项有nf个隐向量,在FM中每一维的隐向量只有一个,FM可以看成把所有特征都归属到一个field时的FFM模型)(个人理解:简单地说就是FFM比FM多了一个维度F)

在这里插入图片描述

如何突破二阶特征交叉的限制,进一步加强模型特征组合的能力,就成了推荐模型发展的方向。2.6 节将介绍的组合模型在一定程度上解决了高阶特征交叉的问题。

参考文献

  1. 点积(内积)和叉积(外积)
  2. 推荐系统FM & FFM算法解读与实践

http://www.niftyadmin.cn/n/1363801.html

相关文章

【读书笔记->推荐系统】02-05 GBDT+LR

02-05 GBDTLR 思维导图纲要 FFM模型采用引用特征域的方式增强了模型的特征交叉能力&#xff0c;但是它只能做二阶的特征交叉&#xff0c;更高维度将会产生组合爆炸和计算复杂度过高的问题。而Facebook提出的GBDTLR组合模型可以有效地处理高维特征组合和筛选的问题。 GBDTLR组…

【转】Android NFC学习笔记

一&#xff1a;NFC的tag分发系统 如果想让android设备感应到NFC标签&#xff0c;你要保证两点 1&#xff1a;屏幕没有锁住 2&#xff1a;NFC功能已经在设置中打开 当系统检测到一个NFC标签的时候&#xff0c;他会自动去寻找最合适的activity去处理这个intent. 他所发出的这个In…

【读书笔记->推荐系统】02-06 LS-PLM

02-06 LS-PLM 思维导图纲要 LS-PLM(Large Scale Piece-wise Linear Model&#xff0c;大规模分段线性模型)。这个是本书的最后一例机器学习模型。原因有二&#xff1a;该模型在2012年已经是阿里巴巴主流的推荐模型&#xff0c;2017年才被公之于众&#xff1b;其结构与三层神经…

C语言中的整型提升与混合类型数据的运算

C中会根据操作数的不同&#xff0c;某些运算符会 引起操作数的值从一种类型转换为另一种类型。 一.关于整型提升 先看一段代码请问输出的值是多少&#xff1f; <span style"font-size:14px;"> char a 1;char b 2;char c 0;c a b;printf ("the siz…

【读书笔记->推荐系统】02-07 传统推荐系统模型总结

02-07 传统推荐系统模型总结 基于前面的学习&#xff0c;我们已经了解了很多模型的细节知识&#xff0c;再结合框图可以更好地记忆其发展和区别。 传统推荐模型的演化关系图见【读书笔记-&#xff1e;推荐系统】02-01 协同过滤 这里书中给了整体的总结。 在对传统的推荐模型进…

【读书笔记->推荐系统】03-01 深度学习推荐模型演化关系图

03-01 深度学习推荐模型演化关系图 深度学习的推荐模型有两大特点&#xff1a; 表达能力强&#xff0c;能够挖掘出更多数据中潜藏的模式。模型结构非常灵活&#xff0c;能够根据业务场景和数据特点&#xff0c;灵活调整模型结构&#xff0c;使模型与应用场景完美契合。 从技…

node.js整理 04网络操作

简介 var http require(http);http.createServer(function (req, res) {res.writeHead(200, {Content-Type: text-plain});res.end(Hello World\n); }).listen(3000)//浏览器访问该端口http://127.0.0.1:3000/ 在Linux系统下&#xff0c;监听1024以下端口需要root权限。因此&a…

Mac版Endnote 20导入中文参考格式Chinese Std GBT7714 (numeric)

进入网站下载ens文件&#xff0c;Output Styles | Endnote。 从应用程序中找到Endnote 20&#xff0c;虽然它看起来像是APP&#xff0c;其实是文件夹。 找到Styles文件夹&#xff0c;并把.ens文件复制进去。 之后在Tools->Output Styles->Open Style Manager...勾选它让它…