自适应学习率

为什么要自适应学习率?

学习率固定不好吗?自适应学习率的好处有哪些?首先,在模型训练时参数的梯度大时,往往需要小的学习率,不断改变,以免偏离了轨迹,但梯度较小时,需要较大的学习率,更好的摆脱平坦的位置。固定的学习率往往不能适用于较多实际场景。

如图,学习率较高时,在谷壁震荡,学习率较低时,在平坦地带效果不佳

cf66a20240e64eabbf4b88b699faeeae.png

97526e03030d468b9baf3676e7934d27.png

自适应学习率方法有哪些?

AdaGrad

AdaGrad 可以做到梯度比较大的时候,学习率就减小,梯度比较小的时候,学 习率就放大。参数相关的一个常见的类型是算梯度的均方根(root mean square),在算均方根的时候,每一个梯度都有同等的重要性

d6653f2ab48f43db9f1892a242ca3ece.png

RMSProp

计算 θ i 1 的方法跟 AdaGrad 算均方根不一样, 在算均方根的时候,每一个梯度都有同等的重要性,但在 RMSprop 里面,可以自己调整现在 的这个梯度的重要性。b540d791373d40369526d696e754ec0e.png

如果使用 RMSprop,就可以动态调整 σ i t 这一项。

1c50da36d31b465f9609afff3c7d8642.png

Adam

最常用的优化的策略或者优化器(optimizer)是Adam(Adaptive moment estimation)[7]。Adam 可以看作 RMSprop 加上动量,其使用动量作为参数更新方向,并且能够自 适应调整学习率。PyTorch 里面已经写好了 Adam 优化器,这个优化器里面有一些超参数需 要人为决定,但是往往用 PyTorch 预设的参数就足够好了。

学习率调度

在梯度平坦区域,如果长时间梯度较小,很可能导致梯度爆炸的问题,比如当使用AdaGrad时

1c72fc3d01e8407782b56eab306a6c54.png

长时间在BC段的梯度趋近于0,导致均方根较小,出现了梯度爆炸的问题,而又因为在梯度爆炸后,梯度的上升,又会趋近于平稳,如何解决这个问题呢?

第一种:学习率下降

在快到达终点时,主动降低学习率,使其平稳接近终点

74ee65f7b5e24e5e90208e4c908dc0e4.png

第二种:预热

预热的方法 是让学习率先变大后变小,至于变到多大、变大的速度、变小的速度是超参数。残差网络 里 面是有预热的,在残差网络里面,学习率先设置成 0.01,再设置成 0.1,并且其论文还特别说 明,一开始用 0.1 反而训练不好。除了残差网络,BERT 和 Transformer 的训练也都使用了预 热。

Q:为什么需要预热?

A:当我们使用 Adam、RMSprop 或 AdaGrad 时,需要计算 σ。而 σ 是一个统计的结 果。从 σ 可知某一个方向的陡峭程度。统计的结果需要足够多的数据才精准,一开始 统计结果 σ 是不精准的。一开始学习率比较小是用来探索收集一些有关误差表面的情 报,先收集有关 σ 的统计数据,等 σ 统计得比较精准以后,再让学习率慢慢爬升。

优化总结(考察动量)

2415cd246ad348e89ca00b9dd314b728.png

5335b80539564df0a982c21c5f1c3929.png

分类问题

独热向量

为了解决标签之间的距离关系问题,设计了独立向量,使得标签之间是独立的。分类问题常常需要考虑独热向量。

分类函数

第一种:sigmoid

用于二分类

第二种:softmax

多用于多分类,当然也可以用于二分类

b650eeaade7f46d1ae05bdca4020a464.png

bef7dcc154934eb882e4ee64fe3a04c0.png

e174aa91a03540f3bf256365502c9cdd.png

分类损失

829f44cdb9f6478aae127c3aac78221c.png

分类问题较多采用第二种方法即最小化交叉熵,采用第一种方法很多时候会因为梯度较小而导致卡在平坦位置,而训练失败

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值