文章目录
在实际工作中,在仅利用单一特征而非交叉特征进行判断的情况下,有时不仅是信息损失的问题, 甚至会得出错误的结论。特征组合和特征交叉问题非常常见。由于特征的种类多,特征交叉的复杂程度大,只靠人工来进行特征交叉是十分低效的。解决这类问题的关键,就是模型对于特征组合和特征交叉的学习能力,因为它决定了模型对于未知特征组合样本的预测能力,而这对于复杂的推荐问题来说,是决定其推荐效果的关键点之一。 FM(Factorization Machine)因子分解机模型的诞生就是为了解决特征交叉的问题。
传统机器学习时代:
POLY2模型——特征交叉的开始
针对特征交叉的问题,算法工程师经常采用先手动组合特征,再通过各种分析手段筛选特征的方法 ,但该方法无疑是低效的。因此 ,采用POLY2模型进行特征的“暴力”组合成了可行的选择。
POLY2模型的数学形式如下:
可以看到,该模型对所有特征进行了两两交叉(特征Xj1和特征Xj2),并对所有的特征组合赋予权重,通过暴力组合的方式,在一定程度上解决了特征组合的问题。POLY2模型本质上仍是线性模型,其训练方法与逻辑回归并无区别,因此便于工程上的兼容。
但POLY2模型存在两个较大的缺陷。
(1 )在处理互联网数据时,经常采用one-hot编码的方法处理类别型数据,致使特征向量极度稀疏,POLY2进行无选择的特征交叉会使原本就非常稀疏的特征向量更加稀疏,导致大部分交叉特征的权重缺乏有效的数据进行训练,无法收敛。
(2 )权重参数的数量由n直接上升到n2极大地增加了训练复杂度。
FM模型——隐向量特征交叉
为了解决POLY2模型的缺陷,2010年,Rendle提出了 FM模型。
上面是FM二阶部分的数学形式,与POLY2相比,其主要区别是用两个向量的内积(wj1·wj2 )取代了单一的权重系数wh(j1, j2) 。具体地说 ,FM为每个特征学习了一个隐权重向量。在特征交叉时,使用两个特征隐向量的内积作为交叉特征的权重。
隐向量的做法在矩阵分解中也使用过,本质上FM中隐向量的用法与矩阵分解中代表用户和物品的做法异曲同工。可以说,FM是将矩阵分解隐向量的思想进行了进一步扩展,从单纯的用户、物品隐向量扩展到了所有特征上。
FM通过特征隐向量的方式,直接把P0LY2模型n2级别的权重参数数量减少到了nk。隐向量的引入使FM能更好地解决数据稀疏性的问题。
举例来说,在某商品推荐的场景下,样本有两个特征,分别是频道 (channel) 和 品 牌 (brand) , 某 训练样本的特征组合是(ESPN,Adidas)。在P0LY2中,只有当ESPN和Adidas同时出现在一个训练样本中时,模型才能学到这个组合特征对应的权重;而在FM中, ESPN的隐向量也可以通过(ESPN, Gucci)样本进行更新,Adidas的隐向量也可以通过(NBC, Adidas)样本进行更新,这大幅降低了模型对数据稀疏性的要求。甚至对于一个从未出现过的特征组合 ( NBC,Gucci), 由于模型之前已经分别学习过NBC 和Gucci的隐向量,具备了计算该特征组合权重的能力,这是 POLY2无 法 实 现 的。相 比 POLY2 , F M 虽然丢失了某些具体特征组合的精确记忆能力 , 但是泛化能力大大提高。
FFM——引入特征域的概念
相比FM模型,FFM 模型引入了特征域感知这一概念,使模型的表达能力更强。
这里所说的特征域具体指什么呢 ? 简单地讲,特征域内的特征一般是采用o n e - h o t编码形成的一段one - hot特征向量。例如,用户的性别分为男、女、未知三类,那么对一个女性用户来说,采用one-hot方式编码的特征向量为[0 , 1 , 0],这个三维的特征向量就是一个“性别”特征域。将所有特征域连接起来,就组成了样本的整体特征向量。
是FFM的数学形式的二阶部分。其与FM的区别在于隐向量由原来的wj1变成 了wj1,f2,这意味着每个特征对应的不是唯一一个隐向量, 而是一组隐向量 。当特征与特征进行交叉时。xj1特征会从xj1的这一组隐向量中挑出与特征Xj2 的域f2对应的隐向量进行交叉 。 同理,xj2也会用与xj1的域f1对应的隐向量进行交叉。
在 FFM模型的训练过程中,需要学习n个特征在f个域上的k维隐向量,参数数量共nkf个 。 在训练方面,FFM的二次项并不能像FM那样简化, 因此其复杂度为kn2。相比FM, FFM 引入了特征域的概念,为模型引入了更多有价值的信息,使模型的表达能力更强 ,但与此同时,FFM的计算复杂度上升到 n2,远大于FM的kn。在实际工程应用中,需要在模型效果和工程投入之间进行权衡。
从POLY2到FFM的模型演化过程
本节最后 , 用图示的方法回顾从P0LY2到FM, 再到FFM的模型演化过程 。
P0LY2模型直接学习每个交叉特征的权重,若特征数量为n,则权重数量为n2量级,具体为n(n-1) /2个 。 如图所示 , 每个原点代表一个特征交叉项。
FM模型学习每个特征的k维隐向量,交叉特征由相应特征隐向量的内积得到,权重数量共nk个。FM比POLY2的泛化能力强,但记忆能力有所减弱,处理稀疏特征向量的能力远强于POLY2 。 如下图 所 示 , 每 个 特 征 交 叉 项 不 再 是 单独一个圆点,而是3个彩色圆点的内积,代表每个特征有一个3维的隐向量。
FFM模型在FM模型的基础上引入了特征域的概念,在做特征交叉时,每个特征选择与对方域对应的隐向量做内积运算,得到交叉特征的权重,在有n个特征,f个特征域,隐向量维度为k的前提下 , 参数数量 共 n . k . f 个。如图下所示,每个特征都有2个隐向量,根据特征交叉对象特征域的不同,选择使 用 对 应 的隐向量。
理论上,FM模型族利用交叉特征的思路可以引申到三阶特征交叉,甚至更高维的阶段。但由于组合爆炸问题的限制,三阶FM无论是权重数量还是训练复杂度都过高,难以在实际工程中实现。那么,如何突破二阶特征交叉的限制,进一步加强模型特征组合的能力呢?后文的NFM模型给出了答案。
深度学习时代
在进入深度学习时代后,FM的演化过程并没有停止,本节将介绍始FNN、DeepFM及NFM模型,使用不同的方式应用或改进了FM模型,并融合进深度学习模型中,持续发挥着其在特征组合上的优势。
FNN
FNN由伦敦大学学院的研究人员于2016年提出,其模型的结构初步看是一个类似Deep Crossing模型的经典深度神经网络,从稀疏输入向量到稠密向量的转换过程也是经典的Embedding层的结构。
FNN的改进在于Embedding层。在神经网络的参数初始化过程中, 往往采用随机初始化这种不包含任何先验信息的初始化方法。由于Embedding层的输入极端稀疏化,导致Embedding层的收敛速度非常缓慢。再加上Embedding层的参数数量往往占整个神经网络参数数量的大半以上,因此模型的收敛速度往往受限于Embedding层。
针对Embedding层收敛速度的难题,FNN模型的解决思路是用FM模型训练好的各特征隐向量初始化Embedding层的参数,相当于在初始化神经网络参数时,已经引入了有价值的先验信息。 也就是说,神经网络训练的起点更接近目标最优点,自然加速了整个神经网络的收敛过程。
下面用图示的方法显示FM各参数和FNN中Embedding层各参数的对应关系
需要注意的是,图中虽然把FM中的参数指向了 Embedding层各神经元,但其具体意义是初始化Embedding神经元与输入神经元之间的连接权重。假设FM隐向量的维度为m,第i个特征域的第k维特征的隐向量是Vi,k=(Vik1,Vik2,…,Vikm) 那么隐向量的第l维就会成为连接输入神经元k和Embedding神经元I之间连接权重的初始值。
需要说明的是,在训练FM的过程中,并没有对特征域进行区分,但在FNN模型中,特征被分成了不同特征域,因此每个特征域具有对应的Embedding层, 并且每个特征域Embedding的维度都应与FM隐向量维度保持一致。
FNN模型除了可以使用FM参数初始化Embedding层权重,也为另一种 Embedding层的处理方式 Embedding预训练提供了借鉴思路。
DeepFM
FNN把FM的训练结果作为初始化权重,并没有对神经网络的结构进行调整, 而2017年由哈尔滨工业大学和华为公司联合提出的DeepFM则将FM的模型结构与Wide&Deep模型进行了整合,其模型结构图如图所示。
在Wide&Deep模型之后,诸多模型延续了双模型组合的结构,DeepFM就是其中之一。DeepFM对Wide&Deep模型的改进之处在于,它用FM替换了原来的Wide部分,加强了浅层网络部分特征组合的能力。如图所示,左边的FM部分与右边的深度神经网络部分共享相同的Embedding层。左侧的FM部分对不同的特征域的Embedding进行了两两交叉,也就是将Embedding向量当作原FM中的特征隐向量。最后将FM的输出与Deep部分的输出一同输入最后的输出层,参与最后的目标拟合。
与Wide&Deep模型相比,DeepFM模型的改进主要是针对Wide&Deep模型的Wide部分不具备自动的特征组合能力的缺陷进行的。这里的改进动机与Deep&Cross模型的完全一致,唯一的不同就在于Deep&Cross模型利用多层Cross网络进行特征组合,而DeepFM模型利用FM进行特征组合。当然,具体的应用效果还需要通过实验进行比较。
NFM
无论是FM,还是其改进模型 FFM,归根结底是一个二阶特征交叉的模型。受组合爆炸问题的困扰,FM几乎不可能扩展到三阶以上,这就不可避免地限制了FM模型的表达能力。那么,有没有可能利用深度神经网络更强的表达能力改进FM模型呢? 2017年,新加坡国立大学的研究人员进行了这方面的尝试,提出了 NFM模型。
在数学形式上,NFM模型的主要思路是用一个表达能力更强的函数替代原FM中二阶隐向量内积的部分。
如果用传统机器学习的思路来设计NFM模型中的函数f(X),那么势必会通过一系列的数学推导构造一个表达能力更强的函数。但进入深度学习时代后,由于深度学习网络理论上有拟合任何复杂函数的能力,f(X)的构造工作可以交由某个深度学习网络来完成,并通过梯度反向传播来学习。在NFM模型中,用以替代FM二阶部分的神经网络结构如图所示。
NFM网络架构的特点非常明显,就是在Embedding层和多层神经网络之间加入特征交叉池化层。假设Vr是所有特征域的Embedding集合,那么特征交叉池化层的具体操作如下所示。
其中,代表两个向量的元素积操作,即两个长度相同的向量对应维相乘得到元素积向量(元素积不相加,所以输出的是一个向量,如果把向量的所有维加起来得到一个数就是内积)
在进行两两Embedding向量的元素积操作后,对交叉特征向量取和,得到池化层的输出向量。再把该向量输入上层的多层全连接神经网络,进行进一步的交叉。
如果把NFM的一阶部分视为一个线性模型,那么NFM的架构也可以视为Wide&Deep模型的进化。相比原始的Wide&Deep模型,NFM模型对其Deep部分加人了特征交叉池化层,加强了特征交叉。这是理解NFM模型的另一个角度。
AFM
AFM模型可以被认为NFM模型的延续。在NFM模型中,不同域的特征Embedding向量经过特征交叉池化层的交叉,将各交叉特征向量进行“加和”,输入最后由多层神经网络组成的输出层。问题的关键在于加和池化 (Sum Pooling)操作,它相当于“一视同仁”地对待所有交叉特征,不考虑不同特征对结果的影响程度,事实上消解了大量有价值的信息。
这里“注意力机制”就派上了用场,它基于假设——不同的交叉特征对于结果的影响程度不同,举例来说,如果应用场景是预测一位男性用户是否购买一款键盘的可能性,那么“性别=男且购买历史包含鼠标”这一交叉特征,很可能比“性别= 男且用户年龄=30”这一交叉特征更重要,模型投人了更多的“注意力”在前面的特征上。
具体地说,AFM模型引入注意力机制是通过在特征交叉层和最终的输出层之间加入注意力网络(Attention Net)实现的。AFM的模型结构图如图所示,
同NFM一样,AFM的特征交叉过程同样采用了元素积操作,
AFM加入注意力得分后的池化过程入下图所示
AFM模型使用了一个在两两特征交叉层(Pair-wise Interaction Layer)和池化层之间的注意力网络来生成注意力得分。该注意力网络的结构是一个简单的单全连接层加softmax输出层的结构,其数学形式入下所示。
其中要学习的模型参数就是特征交叉层到注意力网络全连接层的权重矩阵 W,偏置向量b,以及全连接层到softmax输出层的权重向量h。注意力网络将与 整个模型一起参与梯度反向传播的学习过程,得到最终的权重参数。AFM是研究人员从改进模型结构的角度出发进行的一次有益尝试。它与具体的应用场景无关。
基于FM的深度学习模型的优点和局限性
本节介绍了 FNN、DeepFM、NFM三个结合FM思路的深度学习模型。它们的特点都是在经典多层神经网络的基础上加人有针对性的特征交叉操作,让模型具备更强的非线性表达能力。
沿着特征工程自动化的思路,深度学习模型从PNN一路走来,经过了 Wide&Deep、Deep&Cross、 FNN、DeepFM、 NFM、AFM 等模型,进行了大量的、基于不同特征互操作思路的尝试。但特征工程的思路走到这里几乎已经穷尽了可能的 尝试,模型进一步提升的空间非常小,这也是这类模型的局限性所在。从这之后,越来越多的深度学习推荐模型开始探索更多“结构”上的尝试, 诸如注意力机制、序列模型、强化学习等在其他领域大放异彩的模型结构也逐渐进入推荐系统领域,并且在推荐模型的效果提升上成果显著。