You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

60 lines
5.6 KiB
Markdown

This file contains ambiguous Unicode characters!

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

# 063 | 基于隐变量的模型之三:分解机
周三我们分享了“基于回归的隐变量模型”,这是在基本的矩阵分解基础上衍生出来的一类模型。这种模型把显式特性和隐变量结合起来,对解决“冷启动”问题有一定作用。
今天,我们来介绍一种叫作“**分解机**”Factorization Machines的推荐技术。这个模型是从基于回归的隐变量模型中衍生出来的已成为了主流的推荐模型。
## 矩阵分解和基于回归的隐变量模型存在哪些问题?
在介绍分解机的基本原理之前,我们先来回顾一下从“矩阵分解”到“基于回归的隐变量模型”的一个发展脉络。
首先,矩阵分解主要解决了两个问题,那就是从一个大矩阵降维到两个小矩阵,并且寄希望这两个小矩阵能够抓住用户和物品的相关度。
然而,单纯的矩阵分解无法融入很多用户和物品的特性,这就引导我们开发出了基于回归的矩阵分解。所谓的回归部分,也就是从显式特性出发,建立从显式特性到隐变量之间关系的流程,从而使我们能够把更多的信号放进模型中。
在一定程度上,基于回归的隐变量模型实现了把显式变量和隐变量结合的目的,但是这类模型的学习过程非常麻烦。实际上,因为这类模型复杂的训练流程,其在实际应用中并不常见。
那么,有没有其他思路来统一显式变量和隐变量的处理方式呢?
## 分解机的基本原理
分解机\[1\]是学者斯特芬·润顿Steffen Rendle在德国康斯坦扎大学任教期间开发出来的推荐模型。斯特芬后来加入谷歌分解机是他的代表作品。
分解机结合了“基于内容的推荐系统”和“基于回归的隐变量模型”的一些基本思想。
基于内容的推荐系统,其核心就是认为需要预测的变量(这里我们依然讨论评分)是所有显式变量的一个回归结果。分解机直接借鉴了这一点,也就是说,分解机的输入是所有的显式变量。
实际上,分解机在对待显式变量的手法上更进了一步,那就是不仅直接对显式变量进行建模,还对显示变量的两两关系进行建模。当然,在原始的论文中,分解机其实还可以对更加高维的关系进行建模,我们这里局限在两两关系上。
什么意思呢?比如说我们有一个用户特性,是用户的年龄;我们有一个物品特性,是物品的种类。那么,普通的回归模型,就是把用户的年龄和物品的种类直接当作特性输入到模型中。而对于分解机来说,这只是第一步。
**第二步,分解机是把这两个特性的数值进行乘积,当作一个新的特性,然后进一步处理这种两两配对的关系**。把原始特性进行两两配对是构建模型的一种重要的方法,特别是对于非深度学习模型,需要自己做特征工程的模型。
两两配对的特征有什么好处呢?好处就是可以对两种特性的交互信息进行建模。举个例子,如果我们特别在意某个年龄段的用户在某种商品类别中的评分,那么,把这两个特性相乘,从而抓取到这个交互信息,是一个非常有效的手段。
但是,两两配对存在什么问题吗?一个问题就是**特性空间会急速增长**。如果我们有一个100维的用户特性向量然后有一个100维的物品特性向量那对于两两配对的特征就是100乘100这个数量级的。另一个更严重的问题就是如果我们的单独特性中有一些是“类别特性”Categorical Feature那么在两两配对之后就会产生大量的0从而变成一个巨大的稀疏矩阵。
如何解决这个问题呢?**分解机利用了矩阵分解的降维思路**。就是说,我们不对一个稀疏矩阵直接建模,而是把这个稀疏矩阵分解之后再进行建模。具体到上面这个例子,就是先假定,所有特性都对应一个隐变量向量,两个显式特性的乘积是两个特性的隐变量的点积。也就是说,我们把两个显式特性的乘积分解为了两个向量的乘积。这样,我们就不需要直接表示原来的稀疏矩阵。
在这样的思路下分解机成功地把隐变量和显式变量结合到了一起。当我们的显式特性仅仅是用户ID和物品ID的时候分解机的表达退回了最原始的矩阵分解。也就是说矩阵分解其实可以表达成为特性的两两作用矩阵的分解。
在原始的论文中,作者还用分解机模拟了好几种流行的模型,我们这里就不复述了。
虽然也是为了建立从显式特性到隐变量的关系,但是对比基于回归的矩阵分解而言,分解机的训练过程大大简化了。在实际应用中,我们经常使用“**随机梯度下降**”SGD, Stochastic Gradient Descent来对分解机直接进行求解。
在最近几年的Kaggle比赛中以及一些工业级的应用中分解机凭借其简单易用的特点成为了很多产品的核心算法。
## 小结
今天我为你讲了隐变量模型中分解机的基本原理。
一起来回顾下要点:第一,我们简要介绍了矩阵分解的一些问题;第二,我们详细介绍了分解机的基本原理;第三,我们简要讲了如何求解分解机。
最后,给你留一个思考题,分解机能够解决“冷启动”的问题吗?
欢迎你给我留言,和我一起讨论。
**参考文献**
1\. Steffen Rendle. Factorization Machines with libFM. ACM Trans. Intell. Syst. Technol. 3, 3, Article 57 (May 2012), 22 pages, 2012.