西安网站推广优化,童美童程儿童编程价格,视差网站,背景图在线制作这里写目录标题 learning rate单一固定#xff08;one-size-fits-all#xff09;的学习率Model训练到驻点很困难#xff08;学习率太大不能收敛#xff0c;学习率太小收敛太慢#xff09; 如何客制化学习率#xff1f;- 引入参数σσ常见的计算方式 - Root mean squareone-size-fits-all的学习率Model训练到驻点很困难学习率太大不能收敛学习率太小收敛太慢 如何客制化学习率- 引入参数σσ常见的计算方式 - Root mean square均方根Adagrad - 不同参数不同学习率 RMSProp - 不同参数不同学习率同一参数不同学习率AdamRMSProp Momentum小梯度累加导致learning rate 暴增如何让时间影响学习率 - 方式一Learning Rate Decay学习速率衰减如何让时间影响学习率 - 方式二Warm Up预热 learning rate
loss下降到走不下去的时候gradient真的很小吗不一定噢不一定卡在local minimal还是saddle point 思考训练卡住的原因是
通过观察norm(向量) of gradient loss几乎没动了gradient还是有上升下降的波动的痕迹 梯度下降可能会发生锯齿现象
用一般的gradient decent往往做不到如图由于遇到minimal point或者是saddle pointloss无法继续下降的效果往往在gradient decent还很大的时候loss就下不去了 多数training在还没走到critical point的时候就已经停止了
当loss不再下降时并不一定是gradient很小的情况saddle point 或者 local minima也有可能是gradient在error surface山谷的两个谷壁间不断的来回的震荡导致loss不能再下降。
单一固定one-size-fits-all的学习率Model训练到驻点很困难学习率太大不能收敛学习率太小收敛太慢 以上图为例子只有两个参数这两个参数值不一样的时候Loss的值不一样画出了error surface这个error surface的最低点在上图黄色X的地方。事实上这个error surface是convex的形状(可以理解为凸的或者凹的convex optimization常翻译为“凸优化”)。
这个非常简单的error surface 在纵向的变化特别密集gradient非常的大它的坡度的变化非常的大、非常的陡峭在横向的变化特别平滑gradient非常的小它的坡度的变化非常的小、非常的平滑可以理解成上面的“等高线”是一个长轴特别长短轴特别短的椭圆。我们现在要从黑点这个地方当作初始点目标的最佳点是×所在的位置。
当learning rate设为 1 0 − 2 10^{-2} 10−2 的时候这个参数在峡谷的两端不断的震荡从而导致loss掉不下去但此时的gradient仍然很大。
那你可能说是因为learning rate设太大了learning rate决定了我们update参数的时候步伐有多大learning rate步伐太大没办法慢慢地滑到山谷里面只要把learning rate设小一点不就可以解决这个问题了吗 调这个learning rate从10⁻²一直调到10⁻⁷终于不再震荡。
但是这个训练此时永远走不到终点因为learning rate已经太小了上图中垂直竖线因为坡度很陡、gradient的值很大所以还能够前进一点左拐以后在横短黑线这个地方坡度已经非常平滑了非常小的gradient 和 这么小的learning rate根本没有办法再让训练前进 θ i 1 θ i − η g ) \theta _{i 1} θ_ i − η g ) θi1θi−ηg)
事实上在左拐这个地方这一大堆黑点有十万个所以显然就算是一个convex的error surface你用gradient descend也很难train。
在之前的gradient descend中所有的参数都是设同样的learning rate这显然不太合适learning rate它应该要根据不同的参数进行定制也就是客制化。
如何客制化学习率- 引入参数σ
Different parameters needs different learning rate不同的参数需要不同的学习率
那客制化学习率的方法是什么 从刚才的例子中其实可以看到一个大原则如果在某一个方向上的gradient的值很小非常的平坦那我们会希望learning rate调大一点如果在某一个方向上非常的陡峭坡度很大那我们其实期待learning rate可以设得小一点。 也就是说希望学习率可以根据梯度的情况进行调整 接下来看σ常见的计算方式。
σ常见的计算方式 - Root mean square均方根 Adagrad - 不同参数不同学习率
上面这个方法被应用在Adagrad算法中Adagrad解决不同参数应该使用不同的更新速率的问题。Adagrad是自适应地为各个参数分配不同学习率的算法。
以上版本绝非最终版本
Root Mean Square中每一个gradient都有同等的重要性 但在RMS Prop中你可以自己调整gradient的重要性或权重。 通过参数设置来决定是当前的gradient更具有决定性还是之前的gradient更具有决定性
RMSProp - 不同参数不同学习率同一参数不同学习率
root mean square prop均方根传递
我们期望就算是同一个参数它需要的learning rate也会随著时间而改变。
上面的方法中我们假设同一个参数其gradient的大小差不多。 但事实上并不是这样比如下图这个例子心月形的error surface 【 红色箭头处相比于绿色箭头处的gradient是比较平缓的下面那个穿过很多相同的等高线等于穿过一个平滑的小谷地
maybe need some knowledge about 自然地理】
红色和绿色线的方向可以看做同一个参数w2的同一个方向所以就算是同一个参数的同一个方向也需要learning rate可以动态的调整。于是就有了RMS Prop。
RMS Prop 不是出自论文只是Hinton在自己的deep learning课程中提出的。
AdamRMSProp Momentum
Adam是现在最常用的optimization的策略。 Adam就是RMS Prop加上MomentumAdam的演算法跟原始的论文
在pytorch中都帮你把算法写好了所以不用担心这种optimization的问题。optimizer的deep learning套件往往都做好然后这个optimizer里面也有一些hyperparameter需要人工决定但是你往往用预设的那一种参数就可以了自己调有时候会调到比较差的。
小梯度累加导致learning rate 暴增
小梯度累加导致learning rate 暴增
如何处理梯度爆炸- 让时间影响学习率 如何处理这种“爆发”问题有一个方法叫做learning rate scheduling可以解决。
如何让时间影响学习率 - 方式一Learning Rate Decay学习速率衰减 最常见的方法叫做Learning Rate Decay学习速率衰减也就是说随着时间的不断地前进、随着参数不断的update让η越来越小。
如何让时间影响学习率 - 方式二Warm Up预热 为什么warm up会起作用- 待研究 一个可能的解释σ是一个统计量刚开始时因为σ没有收集到足够的数据先让η很小学习率很小步子很小让σ有足够的时间收集更多的error surface的情况等到σ收集到足够的情况可以做出很好的统计。 博主造福后辈