一.梯度下降法
假设我们爬山,如果我们想要最快到到山顶,那我们就应该从山势最陡的地方(即山势变化最快的地方)上山。
1.1 简介
梯度下降法,又名最速下降法,是求解无约束最优化问题最常用的方法,它是一种迭代方法,每一步主要的操作是为了求解目的函数的梯度向量,并以负梯度方向作为搜索方向 。
直观图像,如图所示(图1.平面图。图2.3.立体图):
这里的每一个圈代表一个函数梯度,最中间的位置表示函数的极值点,每次迭代根据当前位置求得的梯度和步长找到一个新的位置(这里的步长是事先设好的并且可以根据图像进行修改)
1.2 梯度下降法——步骤
假设函数 y = f ( x 1 , x 2 , x 3... , x n ) y=f(x1,x2,x3...,xn) y=f(x1,x2,x3...,xn)只有一个极小值点(也只有函数只有一个极小值点时,那个极小值才最最准确的等于全局最小值)
初始给定参数为 X 0 = ( x 10 , x 20 , . . . , x n 0 ) X_{0}=(x_{10},x_{20},...,x_{n0}) X0=(x10,x20,...,xn0)。开始探索原函数的极小值点。
1.2.1 手工推导
1.2.2 特殊情形
当步长选取不当时:
(1)步长选取过小:这时有可能当你设定的迭代次数到达时仍未到达极小值。
(2)步长选取偏大时:这时候就可能会出现下图情形
(3)当步长非常大时:就会出现下图的**“之字走位“**
1.2.3 梯度下降终止条件
终止的方法有两个,一是迭代次数,二是终止条件的变化量ε(上述用到的是方法二)。
(1)当程序运行次数达到迭代次数时,此时结束程序,获得结果。
(2) 小于ε时,结束程序,获得结果。
1.3 梯度下降——分类
1.3.1 批量梯度下降法(BGD)
批量梯度下降法每次都使用训练集中的所有样本更新参数。它得到的是一
个全局最优解,但是每迭代一步,都要用到训练集所有的数据,如果总量很
大,那么迭代速度就会变得很慢。
优点:可以得出全局最优解。
缺点:样本数据集大时,训练速度慢。
如下图所示:
1.3.2 随机梯度下降法(SGD)
随机梯度下降法每次更新都从样本随机选择1组数据,因此随机梯度下降比
批量梯度下降在计算量上会大大减少。SGD有一个缺点是,其“噪音”较BGD
要多,使得SGD并不是每次迭代都向着整体最优化方向。而且SGD因为每
次都是使用一个样本进行迭代,因此最终求得的最优解往往不是全局最优
解,而只是局部最优解。但是大的整体的方向是向全局最优解的,最终的
结果往往是在全局最优解附近。
优点:训练速度较快。
缺点:过程杂乱,准确度下降。
如下图所示:
1.3.3 小批量梯度下降法 (MBGD)
小批量梯度下降法对穿插抽取总样本中的n个样本的数据集进行计算。综合了上述两种方法,既保证了训练速度快,又保证了准确度。
1.3小结*(在选取不同的梯度下降方法时要根据准确率具体定)。*
二.矩阵分解
2.1 预测矩阵
预测矩阵一般用符号 R ^ \hat{R} R^来表示,有 r ^ i j \hat{r}_{ij} r^ij= p i T q j p^T_{i}q_{j} piTqj= ∑ k = 1 n p i k q k j \sum_{k=1}^{n}p_{ik}q_{kj} ∑k=1npikqkj,(与 R ^ \hat{R} R^的维度相同,其中 r ^ i j \hat{r}_{ij} r^ij是 R ^ \hat{R} R^第i行第j列的元素值)。
2.1.1 矩阵分解相关理论
矩阵分解就是把原来的大矩阵,近似的分解成小矩阵的乘积,在实际推荐计算时不再使用大矩阵,而是使用分解得到的两个小矩阵,具体来说就是:假设用户物品的评分矩阵A是m乘n维,即一共有m个用户,n个物品.通过一套算法转化为两个矩阵U和V,矩阵U的维度是m乘k,矩阵V的维度是n乘k。这两个矩阵的要求就是通过下面这个公式可以复原矩阵A: 而直观上说U矩阵就是m个用户对k个主题的关系,Q矩阵就是K个主题对M个物品的关系,至于说K个主题具体是矩阵分解算法里的一个参数,一般取10到100之间。如何得到每一个用户,每一个物品的k个主题(k维向量),一般考虑两个要素:(1)、损失函数( 2)、优化算法。
2.1.2 矩阵分解的学习过程
(1)准备好用户物品的评分矩阵,每一条评分数据看作是一条训练样本。
( 2)给分解后的U矩阵和V矩阵随机初始化元素值。
(3)用U和V计算预测后的分数。
(4)计算预测的分数和实际的分数误差 。
(5)按照梯度下降的方向更行U和V中的元素值 。
(6)重复步骤3到5,直到达到停止条件得到分解后的矩阵之后,实质上就是得到每个用户和每个物品的隐因子向量,拿着这个向量再做推荐计算更加简单,简单来说就是拿着物品和用户两个向量,计算点积就是推荐分数。
2.2 构造损失函数(loss函数)
使用原始的评分矩阵R与重新构建的评分矩阵 R ^ \hat{R} R^之间的误差的平方作为损失函数,即:
e i j 2 e^{2}_{ij} eij2= ( r i j − r ^ i j ) 2 (r_{ij}-\hat{r}_{ij})^{2} (rij−r^ij)2= ( r i j − ∑ k = 1 k = n p i k q k j ) 2 (r_{ij}-\sum_{k=1}^{k=n}p_{ik}q_{kj})^{2} (rij−∑k=1k=npikqkj)2
再通过梯度下降法,更新变量:
求导:
α α p k j e i j 2 \frac{\alpha}{\alpha p_{kj}}e^{2}_{ij} αpkjαeij2= − 2 ( r i j − ∑ k = 1 k p i k q k j ) q k j -2(r_{ij}-\sum_{k=1}^{k}p_{ik}q_{kj})q_{kj} −2(rij−∑k=1kpikqkj)qkj= − 2 e i j q k j -2e_{ij}q_{kj} −2eijqkj
α α q k j e i j 2 \frac{\alpha}{\alpha q_{kj}}e^{2}_{ij} αqkjαeij2= − 2 ( r i j − ∑ k = 1 k p i k q k j ) p i k -2{(r_{ij}-\sum_{k=1}^{k}p_{ik}q_{kj}})p_{ik} −2(rij−∑k=1kpikqkj)pik=