【Matrix Factorization】林轩田机器学习技法

在NNet这个系列中讲了Matrix Factorization感觉上怪怪的,但是听完第一小节课程就明白了。

林首先介绍了机器学习里面比较困难的一种问题:categorical features

这种问题的特征就是一些ID编号这类的,不是numerical的。

如果要处理这种情况,需要encoding from categorical to numerical

最常用的一种encoding方法就是binary vector encoding(也是实习工作中用过的路子),将binary vector作为输入。

联系之前学过的模型,可以用NNet来学习这种映射关系。

但是,binary vector毕竟不是numerical vector,由于每个输入只在一个维度上是1,其余都是0,因此,NNet中的tanh就没啥必要了(因为每个输入数据x喂到每个tanh的只有一个维度的值,输出也只受这个一个维度的值影响,且tanh是关于x是单调的)。

所以,有了如下的简化版的Linear Network,即把tanh换成了Σ求和。

这里对符号进行一下说明:

1)V是d×N的矩阵(d是hidden unit的个数,N是user的个数):V的每个column代表每个user对hidden unit的权重。

2)W’是M×d的矩阵(M是movie的个数):M的每个row代表的是每个movie关于hidden unit的权重。

考虑每个xn是binary vector,则h(xn) = W’vn(动笔推导一下就OK了):Linear Network的输出h(xn)是一个M维的vector,代表每个user对于各个movie的rating。

综上,Linear Network对于recommender system来说,需要学习的一个是V矩阵(user-hidden unit或latent factor),另一个是W矩阵(item-hidden或latent factor)。

在介绍学习方法之前,林重新整理了一下Linear Network问题。

linear network对于m-th movie来说:就是有一个对应的Wm‘来对转换后的x进行线性加权hm(x) = Wm‘ fi(x)。

因此,学习目标也了然了:

1)transform的系数矩阵

2)linear model的系数矩阵

综上,由于Linear Network的输入是binary vector的,因此对原Linear Network问题做一个变形:rnm = Wm‘Vn → R = V‘W,即转化成一个matrix factorization问题。(个人非常喜欢这段motivation的讲解,matrix factorization为什么在NNet这部分出现也理解了

关于Linear Network转化成Matrix Factorization问题的推导,按照个人理解,我再多写两笔:

h(x) = W‘Vx (在前面的PPT中找

    = (Vx)‘W (由于h(x)是一个向量所以颠倒一下没关系了,输出h(x)由原来的列向量变成了行向量了,但对应位置的值不变

    = x‘V‘W ((AB)‘=B‘A‘, 矩阵转置运算性质

则h(X) = X‘V‘W (按行补上所有的输入xn=1...N

     = I(N) V‘W (X’矩阵每一行代表一个输入的binary vector,这里按照编号顺序排布X,所以X‘就是一个单位阵喽

       = V‘W (原始的Linear Network问题转化为Basic Matrix Factorization问题了

并且,这种分解是可以加上些物理意义的:可以把每个hidden unit当成是一种隐含特征(喜剧、动作...)。V和W代表user与movie与hidden unit的关系。

下面讲求解模型的方法:

最优化的问题有两组变量,可以模仿K-means学过的alternating minimization模式:轮流最优化,即alternating least square algorithm

1)固定V(相当于user对hidden unit的权重固定):需要挨个学习Wm(m=1,...,M);学习每个Wm的时候,喂进去的是<V, Rm-th column)> n=1,...M,详单与少了bias的linear regression

这里容易产生一个思维误区:矩阵大部分的位置上都是空的,这些位置的值在linear regression中怎么处理呢?

想了一下,这些值根本就不在linear regression的求解范围中(注意,只对有rating评分的那些点计算误差

2)V与M的关系类似,学的方法也类似,不赘述

整个Alternating Least Squares的算法流程如下:

1)初始化的时候randomly一下

2)由于Ein是有下限的,所以能converge

这里,林还提了一句:Linear Autoencoder(PCA)是一种特殊的Matrix Factorization。

另一种求解Matrix Factorzation的方法,也是更常用的一种就是Stochastic Gradient Descent方法。

在最优化Ein的时候,不考虑前面的常数项,考虑后面的式子。

由于有两个变量,因此需要分别求梯度。可以自行查阅SGD的算法,这里就是最简单的求导,不再赘述。

这里多提一句:为啥对Vn的求导只用考虑 (rnm - Wm‘Vn)²这一项呢?

因为,这里求导有两个变量,Vn和Wm:

1)不含有Vn的项自然不用考虑了

2)含有Vn同时含有W1,...WM的项中:

  a. 如果是batch gradient,这些含有Vn的项都应该考虑(挨个求出来,再取个平均这类的

  b. 如果是stochastic gradient的方法,只需要考虑Wm这一个点即可了(前提是rnm有值),所以梯度的式子也就留下这一项了

个人感觉细节还是扣清楚好,有助于理解复杂的问题

这里有一个讲梯度算法并行化的文章:http://www.superchun.com/machine-learning/parallel-matrix-factorization.html

总体的算法流程如下:

最后,林还稍稍讲了一下KDD cup中的SGD使用trick:

这个trick叫time-deterministic GD : 即,在GD的最后一轮,不再用随机选点的策略了,改用选择时间轴上最近的几个点。这样对于有时间属性的数据,可以达到更好的效果。

时间: 2024-12-21 19:01:10

【Matrix Factorization】林轩田机器学习技法的相关文章

【作业四】林轩田机器学习技法 + 机器学习公开新课学习个人体会

这次作业的coding任务量比较大,总的来说需要实现neural network, knn, kmeans三种模型. Q11~Q14为Neural Network的题目,我用单线程实现的,运行的时间比较长,因此把这几道题的正确答案记录如下: Q11: 6 Q12: 0.001 Q13: 0.01 Q14: 0.02 ≤ Eout ≤ 0.04 其中Q11和Q14的答案比较明显,Q12和Q13有两个答案比较接近(参考了讨论区的内容,最终也调出来了) neural network的代码实现思路如下:

【Deep Learning】林轩田机器学习技法

这节课的题目是Deep learning,个人以为说的跟Deep learning比较浅,跟autoencoder和PCA这块内容比较紧密. 林介绍了deep learning近年来受到了很大的关注:deep NNet概念很早就有,只是受限于硬件的计算能力和参数学习方法. 近年来深度学习长足进步的原因有两个: 1)pre-training技术获得了发展 2)regularization的技术获得了发展 接下来,林开始介绍autoencoder的motivation. 每过一个隐层,可以看做是做了

【Linear Support Vector Machine】林轩田机器学习技法

首先从介绍了Large_margin Separating Hyperplane的概念. (在linear separable的前提下)找到largest-margin的分界面,即最胖的那条分界线.下面开始一步步说怎么找到largest-margin separating hyperplane. 接下来,林特意强调了变量表示符号的变化,原来的W0换成了b(这样的表示利于推导:觉得这种强调非常负责任,利于学生听懂,要不然符号换来换去的,谁知道你说的是啥) 既然目标是找larger-margin s

【Random Forest】林轩田机器学习技法

总体来说,林对于random forest的讲解主要是算法概况上的:某种程度上说,更注重insights. 林分别列举了Bagging和Decision Tree的各自特点: Random Forest就是这二者的结合体. 1)便于并行化 2)保留了C&RT的优势 3)通过bagging的方法削弱了fully-grown tree的缺点 这里提到一个insights:如果各个分类器的diversity越大,aggregation之后的效果可能就越好. 因此,Random Forest不仅样本是b

【Neural Network】林轩田机器学习技法

首先从单层神经网络开始介绍 最简单的单层神经网络可以看成是多个Perception的线性组合,这种简单的组合可以达到一些复杂的boundary. 比如,最简单的逻辑运算AND  OR NOT都可以由多个perception构成的单层神经网络模拟. 但是,单层感知器神经网络能力再强也是有限的,有些逻辑也无法完成.比如,XOR异或运算. 这个时候,就很自然地引出了多层神经网络. 通过这个例子,可以看到多层的神经网络的表达能力要比单层的要强. 上面给出了看待神经网络的一种方式: 1)从原始输入开始一直

【Adaptive Boosting】林轩田机器学习技法

首先用一个形象的例子来说明AdaBoost的过程: 1. 每次产生一个弱的分类器,把本轮错的样本增加权重丢入下一轮 2. 下一轮对上一轮分错的样本再加重学习,获得另一个弱分类器 经过T轮之后,学得了T个弱分类器,再将这T个弱分类器组合在一起,形成了一个强分类器. 由于每一轮样本的权重都在变化,因此分类器学习的目标函数也产生了变化: 无论是SVM还是Logistic Regression都可以用这种方式学习,给每个样本增加不同的权重. 接下来问题就变成了,如何调整样本的权重?目的是什么? 林介绍了

【Dual Support Vector Machine】林轩田机器学习技法

这节课内容介绍了SVM的核心. 首先,既然SVM都可以转化为二次规划问题了,为啥还有有Dual啥的呢?原因如下: 如果x进行non-linear transform后,二次规划算法需要面对的是d`+1维度的N个变量,以及N个约束 如果d`的维度超大,那么二次规划解起来的代价就太大了.因此,SVM的精髓就在于做了如下的问题转化: 不需要问太深奥的数学,知道为啥要dual的motivation就可以了. 这里再次搬出前人的智慧:Lagrange Multipliers 但是这里跟ridge regr

【作业三】林轩田机器学习技法

这次关注的作业题目是Q13~Q20,主要是实现basic C&RT分类树,以及由其构成的Random Forest. 其中basic C&RT分类树的实现思路如下: (一)先抽象出来几个功能: 1)从local file读数据并转化成numpy.array的形式(考虑空行容错)(def read_input_data(path)) 2)如何根据某个维度的feature,计算这个feature产生的branch criteria(此题中为decision stump)(def learn_d

【Support Vector Regression】林轩田机器学习技法

上节课讲了Kernel的技巧如何应用到Logistic Regression中.核心是L2 regularized的error形式的linear model是可以应用Kernel技巧的. 这一节,继续沿用representer theorem,延伸到一般的regression问题. 首先想到的就是ridge regression,它的cost函数本身就是符合representer theorem的形式. 由于optimal solution一定可以表示成输入数据的线性组合,再配合Kernel T