Linear Network Hypothesis
推荐系统问题有个经典的给电影评分的预测。
还有2006年Netflix的一个比赛:
这个问题就是如何从已有的评分数据中推断用户对未知电影的喜好程度。但是首先就有个问题,这个问题中无论用户id还是电影id,都是一个序数的特征,没有实际的数值意义。而我们以前学的模型除了决策树之外都是建立在数值特征上面的:
可以通过one-hot编码解决这个问题:
因此数据可以表示为如下形式:
有个想法就是通过神经网络做特征抽取来进行拟合:
但实际上我们发现非线性激活函数tanh并不是必要的,因为输入x中只有一个值是1,其它都是0,因此隐藏层中也只与x中的一个维度有关,因此不需要非线性函数。去掉之后就得到了一个线性网络的假设函数:
对这样一个函数,需要训练出前后两个部分的系数。
Basic Matrix Factorization
这个假设中Vx可以看作是一个特征抽取的函数:
其中x是用户的id特征。抽取后的特征是一个向量。对于每个电影而言,得到的结果是一个数值,用来拟合已知的分数。
在特征抽取的基础上,对W的训练只是相当于训练一个线性模型。从这个结果可以看出来,W和V的每一个分量都分别代表了一个电影的特征以及一个用户的特征。那么数据R表示的矩阵就可以看成它们的乘积:
反过来说,W和V可以通过对R的分解来得到,而它们又有着各自的物理意义,因此也可以用来做其它任务中的特征提取。
在这个任务中,有两个部分的参数需要学习。因此也可以考虑交替优化的方式,固定其中一个矩阵,对另一个矩阵进行优化相当于是做线性回归:
这两个矩阵实际上是对称的,分别代表着用户与电影。优化的算法过程如下:
它们最终也会到达收敛状态。
可以对比一下线性autoencoder以及矩阵分解算法:
他们有着各自的特点与解法。但实际上线性autoencoder可以看成矩阵分解的一个特例。
Stochastic Gradient Descent
除了使用直接解线性回归的方式来解这个问题,也可以通过SGD的方式,这样做更简单有效。
在MF里,每个样本的err的梯度只与其对应的用户与电影有关,其它的梯度为0.
因此SGD算法解MF过程如下:
在KDDCup2011的比赛中,样本是随着时间变化的。而需要预测的是更后面时间对应的结果。因此调整了SGD算法,让它更看中时间靠后的样本,得到了更好的结果。
Summary of Extraction Models
最后为特征提取的模型做个总结:
除了模型本身之外,它们提取特征所使用的技巧也很重要,而且也很具有多样性:
对于特征提取的模型来说,它们有着自己的优缺点,使用的时候需要注意。