高深莫测的梯度下降法(GD)和随机梯度下降法(SGD)

梯度下降法:

·不是一个机器学习方法
·是一种基于搜素的最优化方法
·作用:最小化一个损失函数
(最终我们要求解的线性回归模型的本质就是最小化一个损失函数,直接计算出最小化函数的对应的参数的数学解,但是后面会发现很多机器学习的模型是求不到这样的数学解的,基于这样的模型我们就需要基于搜素的策略来找到这个最优解,而梯度下降发就是在机器学习领域最小化损失函数的最为常用的方法,掌握梯度法来求一个目标函数的最优值,是很重要的一件事情)
·梯度上升法:最大化一个效用函数
高深莫测的梯度下降法(GD)和随机梯度下降法(SGD)_第1张图片

如上图绘制一个二维坐标平面,这个二维坐标平面不是一个描述特征平面,描述的是定义了一个y轴为损失函数,取x轴不同的参数对于y轴损失函数的取值寻找合适的点参数使得损失函数j取得最小值。
对于每去取一个x值相对应的有一个函数j,若果这一点的导数不为零的话这一点肯定不在一个极值点上,在直线方程中导数代表斜率,在曲线方程中,导数代表切线斜率,换个角度就是导数代表theta单位变化时,J相对应的变化。啥意思就是指本质就是斜率的定义,theta如果加1的话,J相对应又有一个取值,那这个J相对于原来的J是减少了,减少了多少就是被这个导数所刻画的。注意正负号的关系,由于在这一点的导数是负值(即斜率为负值)
当我们的theta增加的时候J值是减小的,相反theta减小的时候J是增大的,所以从某种意义上来说导数是可以代表方向,对应J增大的方向,由于我们这里的导数是负值,所以大J增大的方向是x轴的负方向上,也就是theta的减小的方向上。因为我门是希望找到最小值,所以我们希望J对应的减小的方向移动,所以就应该向导数的负方向移动,对应的我门还需要移动一个步长,以此类推找到极值点。为什么叫梯度?我们这个例子用的是一维的函数,所以我门直接用导数就可以了。但是在多位函数中我门需要对各个维度的分量分别求导,最终得到的方向就是梯度,也就是说对于多位函数来说,梯度可以代表方向,对应损失函数J增大的方向

n称为学习率(learning rate)
n的取值影响获得最优解的速度
n取值不合适,甚至得不到最优解
n是梯度下降法的一个超参数

高深莫测的梯度下降法(GD)和随机梯度下降法(SGD)_第2张图片
高深莫测的梯度下降法(GD)和随机梯度下降法(SGD)_第3张图片
但是并不是所有函数都有唯一的极值点
高深莫测的梯度下降法(GD)和随机梯度下降法(SGD)_第4张图片
解决方案:
多次运行,随机化初始点
梯度下降法的初始点也是一个超参数

线性回归中使用梯度下降法(线性回归法的损失函数是具有唯一的最优解)
在这里插入图片描述

多元线性回归中的梯度下降法

高深莫测的梯度下降法(GD)和随机梯度下降法(SGD)_第5张图片
高深莫测的梯度下降法(GD)和随机梯度下降法(SGD)_第6张图片
高深莫测的梯度下降法(GD)和随机梯度下降法(SGD)_第7张图片
高深莫测的梯度下降法(GD)和随机梯度下降法(SGD)_第8张图片
如上图我们可以看到对于最后一项都是若干项的求和(一共m项求和),显然我们梯度的大小是和样本数量有关,我们的样本数量越大,在这里求出来的梯度中每一元素相应的就越大,这显然是不合理的,我们希望求出来的梯度中每一个元素是和这个m是没有关系的为此让整个梯度值除以一个m,得到如下图(1/2m和1/m在实际应用的过程中效果差异不大,但是如果没有除以m的话,梯度中的每一个值就会非常的大,在具体编程实践的过程中就会出现一些问题,影响效率):
高深莫测的梯度下降法(GD)和随机梯度下降法(SGD)_第9张图片
由此可见,当我们使用梯度下降法来求一个函数的最小值的时候,需要我们对于我们的目标函数进行一些特殊的设计,不见得所有的目标函数都非常的合适

线性回归中梯度下降法的向量化

在上一项中我们是一项一项的把梯度中对应的元素求出来,对于这样的一个式子我们能否把它进行向量化,转换成矩阵运算?如下图(对于X0恒等于1):
高深莫测的梯度下降法(GD)和随机梯度下降法(SGD)_第10张图片
高深莫测的梯度下降法(GD)和随机梯度下降法(SGD)_第11张图片
高深莫测的梯度下降法(GD)和随机梯度下降法(SGD)_第12张图片

当使用梯度下降法搜索损失函数的最小值的时候需要先把数据进行归一化处理

当数据不在一个整体的规模上,使用正规方程来解线性回归方程的时候,其实不需要进行数据的归一化,这是因为我们将线性回归的求解过程整体变成了一个公式的计算,公式的计算中间牵扯中间的搜索的过程比较少,所以不需要进行数据归一化。但是当我们使用梯度下降法的时候,由于我们有eta(步长)这个变量,所以首先会出现一个问题,如果我们这些最终的数值它们不在一个维度上会影响我们梯度的结果,而梯度的结果再乘以eta才真正是我们每次走的步长,这个步长就有可能或者太大或者太小,如果太大了的话会导致结果不收敛,如果太小了就会导致我们的搜索结果很慢,但是如果将数据归一化这个问题就完美的解决了。
高深莫测的梯度下降法(GD)和随机梯度下降法(SGD)_第13张图片

随机梯度下降法(Stochastic Gradient Descent)

之前的梯度下降法一直是要将我们最优化的那个损失函数相应的某一点的theta的那个梯度值准确的求出来,通过如下图的公式可以看出,要想准确的求出,通过推倒的公式可以看出来,要想求出准确的梯度,在如下图的式子中,每一项都需要对所有的样本进行计算,这样的梯度下降法有时可以叫做批量梯度下降法(Batch Gradient Descent),也就是说每一次梯度计算都需要对所有的样本进行以批量的进行计算。但是,这显然就带来了一个问题,如果我们的m非常大也就是样本量非常大的话,那么计算梯度本身是非常耗时的。那么可不可以每一次只对一个样本进行计算呢?基于这个问题就有了随机梯度下降法
高深莫测的梯度下降法(GD)和随机梯度下降法(SGD)_第14张图片
如下图所示,每次Xb每次就只取一行来进行计算
高深莫测的梯度下降法(GD)和随机梯度下降法(SGD)_第15张图片
高深莫测的梯度下降法(GD)和随机梯度下降法(SGD)_第16张图片
但是这时候的方向是搜索的方向而不是梯度的方向,因为这个式子已经不是损失函数的梯度。对比求梯度的式子,设想我们每次都随机的取出一个i,通过随机取的i来计算如上图的式子,这个式子也是一个向量,也可以表达一个方向,向这个方向进行搜索,不停的迭代,能不能得到损失函数的最小值呢?这个方法的实现思路就叫做随机梯度下降法。
高深莫测的梯度下降法(GD)和随机梯度下降法(SGD)_第17张图片
随机梯度下降法搜索的过程入上图所示,如果是批量梯度下降法,那么从外面开始搜索,就会坚定不移的朝着一个固定的方向(整个损失函数最小值的方向)向前移动。但是随机梯度下降法,由于不能保证每次得到的那个方向一定是损失函数减小的方向,更不能保证一定是减小速度最快的那个方向,所以搜索路径就会如上图所示(所以SGD的特点就是具有不可预知性),但是实验结果得知,通过随机梯度下降法,通常能够差不多的,来到整个函数相应的最小值的附近,虽然不能像批量梯度下降法(GD)一定来到最小值这个固定的位置,但是当m(样本数量)非常大的话,通常会愿意通过一定的精度来换取一定的时间,这样随机梯度下降法(SGD)就有意义了。
这个时候对于随机梯度下降法(SGD),学习率(步长)的取值变得很重要,因为在随机梯度下降法的过程中,如果学习率一直取一个固定值的话,很有可能一定的程度上随机梯度下降法已经来到最小值左右中心的位置了。但是由于随机的过程不够好,学习率(步长)又是一个固定值,慢慢的跳出了最小值所在的位置。所以实际中,在随机梯度下降法中,学习率(步长)是逐步递减的。
高深莫测的梯度下降法(GD)和随机梯度下降法(SGD)_第18张图片
所以需要设计一个函数值来让学习率随着随机梯度下降法循环次数的增加逐渐递减,最简单的表达方式就是倒数的形式,如上图第一个式子,但是这个式子存在一定的问题,当循环的次数表较少的时候,学习率下降的太快了,比如循环次数(i_iters)从1到2就下降了50%,但是如果i_iters从10000增加到10001学习率才下降了万分之一,前后学习率下降的比例差别太大,所以通常在具体实现的时候在分母加上一个常数b来缓解这种情况(如上图第二个式子,b的取值通常是50),也就是说循环次数(i_iters)从0上升到1的时候,学习率只会下降2%左右,这样来缓解刚开始的时候学习率变化太大。另外对于分子的位置如果固定取1的话,有时候可能也达不到理想的效果,所以分子也取一个常数a灵活一些。由此可见a,b相应的就是随机梯度下降法的两个超参数。

这种思想其实是模拟退火的思想,所谓模拟退火的思想就是模拟在自然界中,打造钢铁时的温度是从高逐渐到低冷却的所谓的退火的过程,冷却的函数是和时间t相关的,所以有的时候,也将a,b这两个值用t0和t1来表示,如下图所示:
高深莫测的梯度下降法(GD)和随机梯度下降法(SGD)_第19张图片

随机

在机器学习领域随机是具有很的意义的,先看随机特点:
1.跳出局部最优解
2.更快的运行速度
3.机器学习领域有很多算法都要使用随机的特点:
随机搜索,随机森林
通过以上的对于随机梯度下降法的认识,随机梯度下降法一直在强调在随机的过程中运算速度更快,对于解决线性回归模型损失函数是非常简单的,实际上对于发展的损失函数来说,随机还有另外一个出其不意的优点那就是可以因为随机的这种方式跳出局部最优解,有论文显示,当时使用随机梯度下降法的时候,很多时候更容易找到损失函数对应的整体的最优解,这也是随机梯度下降法的另外一个优势。在机器学习领域有很多算法都要使用随机的特点,比如网格搜索,网格搜索其实是对所有参数的组合的一个全局搜索,还有随机森林等。由于机器学习领域解决的本身就是在不确定的世界中不确定的问题,它本身就很有可能没有一个最优解,所以随机扮演着一个重要的角色

你可能感兴趣的:(机器学习,机器学习)