问题描述
我们知道Matrix Factorization系统关键是要把Matrix矩阵分解为两个矩阵因子W和U,但是怎么分解因子,是我们面对的主要问题,机器学习的目的就是要通过大量的原始数据,自己计算出最合适的W和U。这就是机器学习的意义所在。
机器学习就是一种逼近
那么我们逼近的是什么呢?
是W和U点乘的结果,但是这个,并不是原始的R,和原始的R只是近似而已,所以我们称作R(hat)。我们希望我们学习到的R(hat)能够和R尽可能的相似。如何衡量他们之间的相似度,所以我们定义了一个loss函数J(平方差)
其中是所有用户对商品投票的合集。
是已经知道的用户i对商品j的投票值。
是用户i所有隐藏特征值,是商品j的所有隐藏特征值。
和都是未知的,需要我们机器学习通过逼近法去尝试出来的。
如何逼近如何尝试
注意了,这里说的就是机器学习的核心思想,理解了这一点你在接下来的推理过程中才不会坐晕车。
第1步,给和分配随机数字,这个时候loss函数一定非常大。
第2步,我们修正和的值,使J的值,变得小一点。
我们只需要重复步骤2,就可以让J值,无限变小,期望能达到0。
关键的第2步如何实现
首先 和的值都是随机的,我们应该怎么变换呢,是让他们变大还是变小?是变大多少,还是变小多少?这个是有科学依据的。奥秘就在我们的loss函数J,首先保证是凸函数,就是说在loss函数对 和都是可导的,可导意味着在当前 和,都是有梯度的,梯度就表示了在这一点,我们向那个方向前进一小步,loss函数就会变少一点点。
梯度除了能告诉我们的方向,还能告诉我们在当前这一点loss函数的变化率,这样我们就知道我们让,分别变化多少,不至于变化步骤太大,或者变化步骤太小,循序的变化。
梯度公式
我们对上面Loss函数J进行求导,可以得到J对w和J对u的倒数函数。上面我们说了,求倒数的目的是根据倒数确定我们应该怎么修正w和u的值。
第一个我们看对w求导。
在这个式子中:
是当前用户i对物品j的投票。
是当前的值(刚开始是随机的值)。
是当前的值(刚开始是随机的值)。
这样我们就得到了一个Loss函数J对w的导函数,就能知道每一点处,J对w的变化率。因为每一个w其实都有j个特征向量,所以这里的j是表示用户对商品有投票的项。
网友评论