什么是隐变量
- 就是“隐藏的变量”或者叫“隐藏的参数”,这里主要是指我们假定实际的数据是由一系列的隐含变量产生的
- 我们通过模型的假设,知道隐变量之间的关系,但暂时并不知道隐变量的取值。因此需要通过“推断”(Inference)过程来确定隐变量的实际取值
隐变量往往还带有“统计分布”(Distribution)的假设。什么意思呢?就是隐变量之间,或者隐变量和显式变量之间的关系,我们往往认为是由某种分布产生的
- 举例:高斯混合模型
高斯混合模型假设数据是由多个不同的高斯分布产生的,每一个高斯分布有自己的均值和方差- 对于每一个数据点,我们就有一个隐含的变量,来表达当前这个数据点究竟来自哪一个高斯分布
- 两个高斯分布的均值和方法其实也不知道
高斯混合模型,几乎是最简单的隐变量模型,但也给我们了展示了使用隐变量模型对数据建模的灵活性以及训练的复杂性
- 举例:高斯混合模型
矩阵分解作为隐变量模型
- 关系矩阵(用户,物品,评分)
在推荐系统中,有一种最普遍的数据表达,那就是用户和物品的交互,比如评分、点击等等- 这里我们用评分作为一般性的讨论。对于每一个用户,如果我们用一个向量来表达其对所有可能物品的评分,那么把所有用户的向量堆积起来,就可以得到一个矩阵
- 这个矩阵的每一行代表一个用户,每一列代表一个物品,每一个交叉的元素代表某一个用户对于某一个商品的评分
- 特点
这个矩阵的数据其实非常稀少。因为在一个现实的系统中,一个用户不可能对所有的物品都进行评分 - 补全任务
我们的任务其实就是根据有评分的用户物品交互,对那些还没有评分信息的物品进行预测。如果我们能够“补全”(Complete)整个矩阵里的其他元素
如何补全(矩阵分解)
核心
我们可以看到,矩阵分解的核心其实就是刚才的假设,用隐向量来表达用户和物品,他们的乘积关系就成为了原始的元素。不同的假设可以得到不同的矩阵分解模型效果
在这样的一个假设下,一个原本 1 百万乘以 1 万的矩阵就可以被分解为 1 百万乘以 100 的用户矩阵和 100 乘以 1 万的物品矩阵的乘降维
原本是需要对整个矩阵,也就是 1 百万乘以 1 万个数据进行建模,而现在缩减到了两个小一些的矩阵 1 百万乘以 100 和 100 乘以 1 万- 对比来看,之前对于每一个用户,我们需要一万个元素来表达用户对于这一万个物品的评分喜好;现在,对每个用于仅仅需要保存 100 个元素
- 这一百个元素的数值并不代表任何意义。从这个层面上理解矩阵分解,也就能够帮助我们知道,这个方法其实是一种“降维
如何学习
- 目标函数
前面讲到,矩阵里的每一个元素来自于两个隐向量的点积,我们就可以利用这一点来构造一个目标函数。- 利用最小二乘法的原理(Least Square)来拟合求解这些隐向量
- 这个目标函数其实就是说,这两个隐向量的点积一定要与我们观测到的矩阵数值相近。这里的“相近”是用这两个数值的误差,在这里也就是平方差(Square Error)来衡量的
小结
- 第一,我们简要介绍了隐变量模型的基本原理
- 第二,我们详细介绍了矩阵分解作为隐变量模型的假设和原理
- 第三,我们简要地讨论了如何求解矩阵分解里的隐变量