
                            
                            因收到Google相关通知，网站将会择期关闭。相关通知内容
                            
                            
                            063 基于隐变量的模型之三：分解机
                            周三我们分享了“基于回归的隐变量模型”，这是在基本的矩阵分解基础上衍生出来的一类模型。这种模型把显式特性和隐变量结合起来，对解决“冷启动”问题有一定作用。

今天，我们来介绍一种叫作“分解机”（Factorization Machines）的推荐技术。这个模型是从基于回归的隐变量模型中衍生出来的，已成为了主流的推荐模型。

矩阵分解和基于回归的隐变量模型存在哪些问题？

在介绍分解机的基本原理之前，我们先来回顾一下从“矩阵分解”到“基于回归的隐变量模型”的一个发展脉络。

首先，矩阵分解主要解决了两个问题，那就是从一个大矩阵降维到两个小矩阵，并且寄希望这两个小矩阵能够抓住用户和物品的相关度。

然而，单纯的矩阵分解无法融入很多用户和物品的特性，这就引导我们开发出了基于回归的矩阵分解。所谓的回归部分，也就是从显式特性出发，建立从显式特性到隐变量之间关系的流程，从而使我们能够把更多的信号放进模型中。

在一定程度上，基于回归的隐变量模型实现了把显式变量和隐变量结合的目的，但是这类模型的学习过程非常麻烦。实际上，因为这类模型复杂的训练流程，其在实际应用中并不常见。

那么，有没有其他思路来统一显式变量和隐变量的处理方式呢？

分解机的基本原理

分解机[1]是学者斯特芬·润顿（Steffen Rendle）在德国康斯坦扎大学任教期间开发出来的推荐模型。斯特芬后来加入谷歌，分解机是他的代表作品。

分解机结合了“基于内容的推荐系统”和“基于回归的隐变量模型”的一些基本思想。

基于内容的推荐系统，其核心就是认为需要预测的变量（这里我们依然讨论评分）是所有显式变量的一个回归结果。分解机直接借鉴了这一点，也就是说，分解机的输入是所有的显式变量。

实际上，分解机在对待显式变量的手法上更进了一步，那就是不仅直接对显式变量进行建模，还对显示变量的两两关系进行建模。当然，在原始的论文中，分解机其实还可以对更加高维的关系进行建模，我们这里局限在两两关系上。

什么意思呢？比如说我们有一个用户特性，是用户的年龄；我们有一个物品特性，是物品的种类。那么，普通的回归模型，就是把用户的年龄和物品的种类直接当作特性输入到模型中。而对于分解机来说，这只是第一步。

第二步，分解机是把这两个特性的数值进行乘积，当作一个新的特性，然后进一步处理这种两两配对的关系。把原始特性进行两两配对是构建模型的一种重要的方法，特别是对于非深度学习模型，需要自己做特征工程的模型。

两两配对的特征有什么好处呢？好处就是可以对两种特性的交互信息进行建模。举个例子，如果我们特别在意某个年龄段的用户在某种商品类别中的评分，那么，把这两个特性相乘，从而抓取到这个交互信息，是一个非常有效的手段。

但是，两两配对存在什么问题吗？一个问题就是特性空间会急速增长。如果我们有一个100维的用户特性向量，然后有一个100维的物品特性向量，那对于两两配对的特征，就是100乘100这个数量级的。另一个更严重的问题就是，如果我们的单独特性中，有一些是“类别特性”（Categorical Feature），那么在两两配对之后就会产生大量的0，从而变成一个巨大的稀疏矩阵。

如何解决这个问题呢？分解机利用了矩阵分解的降维思路。就是说，我们不对一个稀疏矩阵直接建模，而是把这个稀疏矩阵分解之后再进行建模。具体到上面这个例子，就是先假定，所有特性都对应一个隐变量向量，两个显式特性的乘积是两个特性的隐变量的点积。也就是说，我们把两个显式特性的乘积分解为了两个向量的乘积。这样，我们就不需要直接表示原来的稀疏矩阵。

在这样的思路下，分解机成功地把隐变量和显式变量结合到了一起。当我们的显式特性仅仅是用户ID和物品ID的时候，分解机的表达退回了最原始的矩阵分解。也就是说，矩阵分解其实可以表达成为特性的两两作用矩阵的分解。

在原始的论文中，作者还用分解机模拟了好几种流行的模型，我们这里就不复述了。

虽然也是为了建立从显式特性到隐变量的关系，但是对比基于回归的矩阵分解而言，分解机的训练过程大大简化了。在实际应用中，我们经常使用“随机梯度下降”（SGD, Stochastic Gradient Descent）来对分解机直接进行求解。

在最近几年的Kaggle比赛中以及一些工业级的应用中，分解机凭借其简单易用的特点，成为了很多产品的核心算法。

小结

今天我为你讲了隐变量模型中分解机的基本原理。

一起来回顾下要点：第一，我们简要介绍了矩阵分解的一些问题；第二，我们详细介绍了分解机的基本原理；第三，我们简要讲了如何求解分解机。

最后，给你留一个思考题，分解机能够解决“冷启动”的问题吗？

参考文献


Steffen Rendle. Factorization Machines with libFM. ACM Trans. Intell. Syst. Technol. 3, 3, Article 57 (May 2012), 22 pages, 2012.


                        
                        
                            