梯度下降与提升性能的方法

文章来自李宏毅教授课程所做笔记

梯度下降法

在回归问题的第三步中,需要解决下面的最优化问题:
L:lossfunction(损失函数)
θ:parameters(参数)
这里的parameters是复数,即θ 指代一堆参数。我们要找一组参数 θ ,让损失函数越小越好,这个问题可以用梯度下降法解决 。
首先假设θ里面有两个参数θ1​,θ2​ 分别随机取值
在这里插入图片描述
同时,我们令
在这里插入图片描述
那么,梯度下降法可以表示为在这里插入图片描述
即分别计算初始点处,两个参数对损失函数L的偏微分,然后 θ^0 减掉 η 乘上偏微分的值,得到一组新的参数,同理反复进行这样的计算。▽L(θ) 即为梯度。η 叫做Learning rates(学习速率)

梯度下降数学证明

假设存在一组参数如下所示
在这里插入图片描述
在θ^0 处,可以在一个小范围内找到损失函数最小的点θ^1,这样不断去寻找,接下来就是怎么去寻找

对于单一变量的泰勒展开式,公式如下所示在这里插入图片描述
当x_0 趋近与x时(并非取极限,而是估计),有h(x)≈h(x_0)+h’(x_0)(x−x_0)
如,当h(x)=sin(x),x_0=π/4时
在这里插入图片描述图中3条蓝色线是把前3项作图,橙色线是sin(x),可以看出,当x_0 趋近与x时,h(x_0)+h’(x_0)(x−x_0)与h(x)接近,同样,对于多参数的泰勒展开式也是如此
在这里插入图片描述回到最开始在圆圈内找损失最小值的问题,我们用泰勒展开式对损失函数进行展开,并取近似值在这里插入图片描述 并且,我们令
在这里插入图片描述
则有
在这里插入图片描述
因此,问题简化为,在圆圈中,找到θ_1 和θ_2 使损失函数值最小,而圆圈中心为(a,b),即
在这里插入图片描述
令,θ_1-a=Δθ_1;θ_2-b=Δθ_2
因为s是常量,因此暂时不考虑s的值,则剩余部分为两个向量(Δθ_1,Δθ_2)和(u,v)的内积,而两个向量内积最小,则两个向量方向相反,则损失函数取值最小时
在这里插入图片描述符号因为方向相反,而u和v取值固定,η取最大时,(Δθ_1,Δθ_2)和(u,v)的内积最小,η最大为圆圈的半径,将u和v带入,则有在这里插入图片描述
发现最后的式子就是梯度下降的式子。但这里用这种方法找到这个式子有个前提,泰勒展开式给的损失函数的估算值是要足够精确的,而这需要红色的圈圈足够小(也就是学习率足够小)来保证。所以理论上每次更新参数都想要损失函数减小的话,就需要学习率足够足够小才可以。

所以实际中,当更新参数的时候,如果学习率没有设好,所以导致做梯度下降的时候,损失函数没有越来越小。

梯度下降法提升性能方法

  1. 调整学习速率
    学习效率过小,会导致梯度下降过慢,而学习效率过大,会导致不收敛,如下图所示
    在这里插入图片描述
    上图左边黑色为损失函数的曲线,假设从左边最高点开始,如果学习率调整的刚刚好,比如红色的线,就能顺利找到最低点。如果学习率调整的太小,比如蓝色的线,就会走的太慢,虽然这种情况给足够多的时间也可以找到最低点,实际情况可能会等不及出结果。如果 学习率调整的有点大,比如绿色的线,就会在上面震荡,走不下去,永远无法到达最低点。还有可能非常大,比如黄色的线,直接就飞出去了,更新参数的时候只会发现损失函数越更新越大。

    因此提出自适应学习效率,如Adagrad 算法

如果将学习速率假设为,随着下降次数的增多而减小,即如下表示
在这里插入图片描述
则Adagrad 算法可表示为
在这里插入图片描述
其中σ^t 为之前参数的所有微分的均方根,对于每个参数都是不一样的。举例来说,Adagrad 算法如下
在这里插入图片描述 将Adagrad 算法公式化简,
在这里插入图片描述 公式中存在一些问题,当梯度越大的时候,步伐应该越大,但下面分母又导致当梯度越大的时候,步伐会越小。这是为了突出反差较大的数据对学习速率的影响,如下图所示
在这里插入图片描述就二次函数来说,如下图所示,假设初始值取x_0,则最好的步长应该取(|2ax_0+b|)/2a,如果只考虑单一参数,可知一阶导越大,距离最低点越远,即如果步伐长度与一阶导成正比,那么结果可能比较好在这里插入图片描述 但当多参数时,结论不一定成立,如下图所示
在这里插入图片描述c与a相比,c的一阶导更大,但c距最低点距离明显小于a,同时回过头来看最佳步伐(|2ax_0+b|)/2a,发现分母恰好为二阶导,所以最好的步伐应该是:一次微分/二次微分,再回到之前的Adagrad在这里插入图片描述可知一阶导为g^t 为分子,而分母部分,实际为再尽可能不增加过多运算的情况下模拟二次微分。在这里插入图片描述
2.随机梯度下降
正常情况下的梯度下降为
在这里插入图片描述
而随机梯度下降法更快:

损失函数不需要处理训练集所有的数据,选取一个例子 x^n在这里插入图片描述 此时不需要像之前那样对所有的数据进行处理,只需要计算某一个例子的损失函数Ln,就可以赶紧update 梯度。其对如图所示
在这里插入图片描述常规梯度下降法走一步要处理到所有二十个例子,但随机算法此时已经走了二十步(每处理一个例子就更新)

3.缩放
即归一化,其必要性如下所示
在这里插入图片描述上图左边是 x^1 ​ 的scale比x^2 ​ 要小很多,所以当 w^1 和w^1 ​ 做同样的变化时,w^1 对 y 的变化影响是比较小的,x^2 ​对 y 的变化影响是比较大的。
上图右边是两个参数scaling比较接近,右边的绿色图就比较接近圆形。

对于左边的情况,上面讲过这种狭长的情形不过不用Adagrad的话是比较难处理的,两个方向上需要不同的学习率,同一组学习率会搞不定它。而右边情形更新参数就会变得比较容易。左边的梯度下降并不是向着最低点方向走的,而是顺着等高线切线法线方向走的。但绿色就可以向着圆心(最低点)走,这样做参数更新也是比较有效率。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值