首页 AI Studio教育版 帖子详情
【李宏毅机器学习训练营】梯度下降算法学习心得
收藏
快速回复
AI Studio教育版 文章课程答疑 1134 1
【李宏毅机器学习训练营】梯度下降算法学习心得
收藏
快速回复
AI Studio教育版 文章课程答疑 1134 1

【李宏毅机器学习训练营】梯度下降算法心得
在一次偶然的机会下,加入了AI studio这个大社区中,我一下就被这里的氛围所吸引,百度官方每天都提供算力卡供大家学习,讨论区中会有很多志同道合的朋友一起探讨问题,李宏毅老师是我曾经在课堂上听说过的很棒的机器学习老师,这一次能够和大家一起上他的机器学习课程我觉得很幸运,同时也很想将自己在课堂上学习到的知识分享给大家,那么在这里我将和大家分享的是深度学习中几种参数优化的经典算法,这里仅供参考,个人浅薄的见解,望大家多多担待。

 

神经网络的训练实质上可以看做是一个优化问题,首先梯度下降算法是基础的优化算法,然后在此基础上引出了其他改进的算法,主要从两个方面去改进,其一是调整参数更新方向的优化,加快训练速度,比如:动量法(带动量的随机梯度下降算法),牛顿法;其二是调整学习率,也就是步长,使优化更稳定,比如:AdaGrad,RMSprop,AdaDelta;其中Adam算法对这两个方向都做出了优化。下面我们简单介绍下梯度下降算法,重点讲解他的缺点,其他算法后续再讲。

 

 

梯度下降法:

梯度下降法的原理思想很简单,其中一个很经典的例子是:一个人被困在山上,需要从山上下来(找到山的最低点)。但此时山上的浓雾很大,导致可视度很低;因此,下山的路径就无法确定,必须利用自己周围的信息一步一步地找到下山的路。这个时候,便可利用梯度下降算法来帮助自己下山。

其数学解释是:

Θ1=Θ0+α∇f(Θ)→evaluatedatΘ*

f(Θ)是关于Θ的一个函数,假设当前所处的位置为Θ0点,要从这个点走到f(Θ)的最小值点,也就是山底。首先我们先确定前进的方向,最快的方向也就是梯度的反向,然后走一段距离,也就是α,走完这个段步长,就到达了Θ1这个点!

具体的证明公式请自行google,互联网上证明很详细。

当然梯度下降法也不是完美的,那么梯度下降法的问题在哪呢?

首先我们要知道模型表现的好坏是通过损失函数衡量的,需要找到让损失函数取得最小值的参数矩阵W,这一过程是一个优化问题,通常都使用迭代优化方法来找到最优解。

这里我们先把损失函数记作L,他是用来衡量函数f(xi,W)对给出的预测和真实的目标y之间的差异,可以定量地描述对训练样本预测的好坏。最终的损失函数L是整个数据集中N种样本损失函数的平均值,即L=(1/N)∑(f(xi,W),yi)这是一个普便适合的公式,也适用于图像分类以外的问题,或者用于其他监督学习任务中。

(1)由上述可知,损失函数是整个训练集上样本的损失的平均数而实际生活中训练数据可达百万级别,所以要计算损失值所需的计算成本将会非常高,每一次迭代更新都需要遍历整个数据集,这会导致参数更新非常慢。所以,实际操作中,常常使用小批梯度下降(Mini-Batch Gradient Descent),它并非计算整个训练集的损失和梯度值,而是在每一次迭代中,随机取一部分训练样本称为小批量(Mini-Batch),通常取2^n,例如32、64等,然后使用这个Mini-Batch计算的损失和梯度来更新参数。因为这部分样本是随机选的,所以使用小批量数据计算的梯度可以看作整个训练集梯度的一个近似,这使得算法更加高效。

而极端的一种情况是,每个批量仅包含一个样本,这被称为随机梯度下降(Stochastic Gradien Descent,SGD)或者在线梯度下降。他也被称为批量梯度下降。实际应用中大家可以根据数据量的大小,或者自己的需求考虑用哪一种方法。

(2)其次:存在“z”字形下降情况,当损失函数是在高维情况时会发生这种情况。当损失函数对不同方向的参数变换敏感程度不同时,运行梯度下降算法参数会产生“z”字形下降。原因是这类目标函数的梯度方向与最小值方向不一致,当计算梯度并沿着梯度前进时,在敏感方向变化较大,而在不敏感方向变化较小,“z”字形前进或者后退,在敏感度较低的维度前进速度非常慢,在敏感度较高的维度上进行“z”字形运动,这样会使得参数更新效率低下,这个问题在高维空间更加普遍

”z”字形下降

高维空间

(3)存在局部极小值、鞍点:如下图在一维损失函数,损失函数后面有一段凹陷,运行梯度下降算法会出现参数更新“卡”在凹陷处的现象,最终得到一个局部极小点而非全局最小点。因为局部极小点处梯度为0,梯度下降算法在此处不执行更新。我们可以通过合理选择参数的初始值远离局部最小点来解决这个问题。实际上,局部极小值问题在低维空间更加严重,在高维空间并不是一个很大的问题。

因为对于一个含有一亿个参数的高维空间,要求一个点对于一亿个维度的点都是局部极小的,向任何一个方向前进较小的一步损失都会变大,这种情况非常稀少。我们假设如果一个点在某一维度上是局部极小点的概率为p,那么在整个参

数空间(假设有一亿个参数),该点是局部极小点的概率为p^(10^8),所以说随着网络规模的增加,陷入局部极小值的可能性也大大降低。

但是高维空间中更为突出的一个问题是鞍点,鞍点处梯度也为零,他不同于局部极小点或者局部极大点在任何维度上都是局部极大点或者局部极小点,鞍点在某些维度上是局部极大点在某些维度上是局部极小点。下面的曲线中间是二维情形中鞍点的示意图,鞍点是高维空间中的难点,如果在一个有一亿个维度的参数空间,鞍点部分维度上为局部极小点的概率远远大于局部极小点。因此,高维空间中大部分梯度为0的点都是鞍点,并非局部极小点。鞍点使得基于梯度下降算法的优化算法陷入停滞状况,导致模型效果变差。

当然基于梯度下降法的缺点也有了改进算法如动量法,AdaGrad等其他优化算法,这里我们后续再讲。

 

本文参照李宏毅机器学习梯度优化部分:https://aistudio.baidu.com/aistudio/education/lessonvideo/1167066

 

 

0
收藏
回复
全部评论(1)
时间顺序
阿修罗
#2 回复于2021-04

0
回复
在@后输入用户全名并按空格结束,可艾特全站任一用户