1:概念
首先我们看下面一张图玩个游戏

假设红色的点,是你目前站的地方(山顶)
黄色的点,是你的目标地点(营地)
你被空投到了雪山山顶,现在山顶美景欣赏完了,急着到山下的营地吃个饱饭睡个觉,那么这个时候就要下山,可是你不知道下山的路该怎么走/要走多久等等
那么,怎么下?
肯定不可能一下子跳下来,而是按照正常人的思维,找一条下山的路,一点点一点点分阶段往下(如下图)

就像我们下山,都是先环顾四周,找到下一个比较低且路好走的地方,走过去,再站在那里找下一个比较低且路好走的地方,走过去,再站在那里……周而复始,直到下到山脚,这个过程是不是很熟悉?它正是对应着程序中的递归
这就是梯度下降,它可以不断缩短实际值(你当前位置)与预期值(目标营地)的差距
导数是求某点的瞬时变化率,而微分,则可以看作是某点的斜率,更简单点说,把整座山简单看作一个xy轴函数(假设y为高度,x为平移距离),微分就可以求不同所在位置点的切线的斜率,知道斜率,就能帮助我们更好的找到更快的下山路

另外一层含义,知道了斜率,其实也就能知道函数的变化率,在上面简单的xy轴图像中如果再引入z轴,变成三维坐标轴,那么可以表示成:

我们还是假设y为高度,x为平移距离,z则表示了方向,也就是“下山途中,往东南西北哪个方向走”;
2:数学公式
总结一下:
(1)单变量函数中,梯度就是函数的简单微分,代表函数在某个点的切线的斜率
例如:

(2)多变量函数中,梯度就是一个具有方向的向量,指明了函数上升最快的一个梯度方向
例如:
多变量函数对某一维度变量求微分:

多变量函数求梯度(其实就是针对每一变量求微分):

综上所诉,我们知道了下山要一步步走,每一步距离假设为α(学习率),要不断下降(也就是减号),缩短与营地的差距,假设现在在山顶Θ0,假设走到营地Θi,也就是需要走i步
那么我们慢慢推,先走出最难的第一步:

这样就实现了第一步下山的脚步,那么再走第二步:

那么接下来就是不断重复,递归这一过程,直到到达营地………

部分图片出自大佬博客:https://www.jianshu.com/p/c7e642877b0e
(还有部分是我自己P的)
3:计算案例
案例1: y = x^2

上面展示的是最简单的二维坐标轴,那么三维其实也一样:
案例2: z = x^2 + y^2

营地坐标为(0,0),假设当前在(1,3)高度点,学习率为0.1(步长),求使用梯度下降算法走到营地
则函数的梯度为(对两个变量都做微分):


大概图示:

例子来自于大佬:六尺帐篷的简书播客
实际场景:
在例子中,我们找的营地,其实就是最低点,那么推广到机器学习中,它一般用来表示最小的误差值,而下山途中的路线调整,动态的参数调整,以及每一层梯度的具体坐标点(可以想象成下山途中的休息站,落脚点),或者一般是神经元中的权重等参数,这里暂不展开,稍后会补充相关内容案例,总之,这个算法很重要
梯度消失和梯度爆炸
梯度消失:
假设在反向传播过程中,权重w<1
假如激活函数的导数也小于1,随着神经网络层数的增加,梯度会朝着指数衰减方式减小
例:
sigmoid函数

当x趋向于±∞,都会趋于平缓,导致梯度消失,这将导致损失无法再收敛,使得权重和偏差参数无法被更新,神经元失去作用,对整体的神经网络无法再起到优化调整作用
梯度爆炸:
假设在反向传播过程中,权重w>1且w为一个较大的值时
随着神经网络层数的增加,梯度会朝着指数爆炸的方式增加
造成的影响也是导致无法收敛,权重调整更新缓慢,计算压力过大,神经元起不到优化/调整神经网络的作用
解决方案:
(1)更换tanh,sigmoid激活函数,转为使用Relu、LeakyRelu、Elu等激活函数
(2)使用ResNet残差结构
(3)LSTM结构
(4)做梯度截断
(5)预训练+微调
(6)权重正则化

本文深入浅出地介绍了梯度下降算法,通过类比下山的过程阐述了其基本思想。首先解释了梯度的概念,然后通过数学公式展示了单变量和多变量函数中梯度的表示。接着,通过计算案例和实际场景,如机器学习中的参数调整,讨论了梯度下降的应用。最后,提到了梯度消失和梯度爆炸的问题及其解决方案。

1764

被折叠的 条评论
为什么被折叠?



