矩阵的模怎么求_推荐系统玩家 之 随机梯度下降(Stochastic gradient descent)求解矩阵分解...

本文介绍了推荐系统中的矩阵分解方法Funk-SVD,并详细阐述了如何利用梯度下降法,特别是随机梯度下降(SGD),来求解矩阵分解问题。文章通过讲解梯度的概念、梯度反方向是函数下降最快方向的原因,以及SGD在矩阵分解中的应用,帮助读者理解梯度下降法在推荐系统中的作用。同时,提供了Python和Matlab的实现代码。
摘要由CSDN通过智能技术生成

前言

在上一篇的文章中,我们讲到了推荐系统中矩阵分解的三种方法。而这三种基本方法中,Funk-SVD由于其对稀疏数据的处理能力好以及空间复杂度低,是最合适推荐系统情景的,(Funk-SVD只是这三个基本方法里最好的,不代表就是推荐系统中最好的,还有更多衍生出来的优秀的方法,未来会给大家介绍)我们这篇文章就以Funk-SVD为基础,为大家介绍下如何求解矩阵分解时运用的梯度下降法以及其具体代码的实现。(梯度下降法的思想不仅运用于求解矩阵分解,同时也是神经网络中反向传播的基础,因此,希望大家多多留意。)

这是上一篇矩阵分解的基本方法和其优缺点,有兴趣的朋友可以看一看:
推荐系统玩家:推荐系统玩家 之 矩阵分解(Matrix Factorization)的基本方法 及其 优缺点​zhuanlan.zhihu.com

矩阵分解的认识

那么首先,我们来回顾一下矩阵分解的过程:

1bfa484a827f13173d75cfeb7f981978.png

矩阵分解算法是将
维的矩阵
分解为
维的用户矩阵
的物品矩阵
相乘的形式。其中,
为用户的数量,
为物品的数量,
为隐向量的维度。基于分解后的两个矩阵
,通过物品行向量和对应矩阵行向量的内积,我们就可以得到任何用户
对物品
的预估评分,即预测值:

其中,

是用户
在矩阵
中对应的行向量,
是物品
在物品矩阵
中对应的行向量。从这里也可以很清楚看出矩阵分解在推荐系统中的意义:一个稀疏的矩阵通过分解成为两个低维的矩阵,再通过这两个矩阵的行向量之间的内积,就可以得到一个满秩的预测评分矩阵。

那么问题来了,我们如何将矩阵

分解成矩阵用户矩阵
和物品矩阵
的呢?

首先,从上面的式子我们可以知道,

是矩阵分解后,通过用户向量
和物品向量
的内积得到的预测评分。我们的目的是让预测评分
和真实评分
的差尽可能的小,即
最小。这样内积后的新矩阵才会更好拟合原矩阵,保存原始的信息的同时,对未知评分有准确的预测。

基于以上原理,我们采用均方差做为损失函数可以得到:

其中,

是所有用户评分样本的集合。因为为了减少拟合,我们在上式的后面加入正则化项。那么我们最终的
损失函数就变为:

在这里,我们需要说明下,损失函数的种类也有很多,Simon Funk 在这里运用均方根误差,也就是我们所熟悉的RMSE作为损失函数,同时这也就是说Funk-SVD引入了线性回归思想的体现。同时正则化的种类也不只以上这一种。因此,我们在后续的文章中还会专门介绍损失函数的种类以及什么是过拟合现象和正则化。

那么当我们已经有了损失函数,下一步就是要求损失函数的最小值,这就是我们常说的最小化损失函数。那么,如何最小化损失函数呢?

梯度下降法

至此,我们来到了本篇文章的重点。说实话,在学习这部分的时候,我始终处于懵的状态,因为无论是书籍还是知乎上,都用了大面积的数学公式来讲解导数,偏导数,多元函数求偏导等等,导致我很难理解,那么在这里我会用简单的思路来解释。但希望大家看后有不一样的理解。其中,导数,微分的定义与推导的基本知识我默认大家都有,想要复习的朋友可以看下这篇:

初中生能看懂的梯度下降算法​mp.weixin.qq.com
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值