前言
在上一篇的文章中,我们讲到了推荐系统中矩阵分解的三种方法。而这三种基本方法中,Funk-SVD由于其对稀疏数据的处理能力好以及空间复杂度低,是最合适推荐系统情景的,(Funk-SVD只是这三个基本方法里最好的,不代表就是推荐系统中最好的,还有更多衍生出来的优秀的方法,未来会给大家介绍)我们这篇文章就以Funk-SVD为基础,为大家介绍下如何求解矩阵分解时运用的梯度下降法以及其具体代码的实现。(梯度下降法的思想不仅运用于求解矩阵分解,同时也是神经网络中反向传播的基础,因此,希望大家多多留意。)
这是上一篇矩阵分解的基本方法和其优缺点,有兴趣的朋友可以看一看:推荐系统玩家:推荐系统玩家 之 矩阵分解(Matrix Factorization)的基本方法 及其 优缺点zhuanlan.zhihu.com
矩阵分解的认识
那么首先,我们来回顾一下矩阵分解的过程:
![1bfa484a827f13173d75cfeb7f981978.png](https://i-blog.csdnimg.cn/blog_migrate/504da33d95c89812f4b5a8ae7a1eed5b.png)
其中,
那么问题来了,我们如何将矩阵
首先,从上面的式子我们可以知道,
基于以上原理,我们采用均方差做为损失函数可以得到:
其中,
在这里,我们需要说明下,损失函数的种类也有很多,Simon Funk 在这里运用均方根误差,也就是我们所熟悉的RMSE作为损失函数,同时这也就是说Funk-SVD引入了线性回归思想的体现。同时正则化的种类也不只以上这一种。因此,我们在后续的文章中还会专门介绍损失函数的种类以及什么是过拟合现象和正则化。
那么当我们已经有了损失函数,下一步就是要求损失函数的最小值,这就是我们常说的最小化损失函数。那么,如何最小化损失函数呢?
梯度下降法
至此,我们来到了本篇文章的重点。说实话,在学习这部分的时候,我始终处于懵的状态,因为无论是书籍还是知乎上,都用了大面积的数学公式来讲解导数,偏导数,多元函数求偏导等等,导致我很难理解,那么在这里我会用简单的思路来解释。但希望大家看后有不一样的理解。其中,导数,微分的定义与推导的基本知识我默认大家都有,想要复习的朋友可以看下这篇:
初中生能看懂的梯度下降算法mp.weixin.qq.com