Datawhale X 李宏毅苹果书AI夏令营-进阶版 Task 2

3.3 自适应学习率

        1. 遇到的问题:损失不再下降的时候,梯度并没有真的变得很小。随着迭代次数增多,虽然损失不再下降,但是梯度的范数并没有真的变小((图 3.18-19))。

        2. 解决方法:在梯度下降里面,所有的参数都是同样的学习率,这显然是不够的,应该要为每一个参数定制化学习率,即引入自适应学习率(adaptive learning rate)的方法,给每一个参数不同的学习率。如果在某一个方向上,梯度的值很小,非常平坦,我们会希望学习率大一点;如果在某一个方向上非常陡峭,坡度很大,我们会希望学习率小一点

3.3.1 AdaGrad(Adaptive Gradient)

        1. 典型的自适应学习率方法,其能够根据梯度大小自动调整学习率。AdaGrad 可以做到梯度比较大的时候,学习率就减小,梯度比较小的时候,学习率就放大。

        2. 调整大概描述如下(图 3.24):有两个参数:θ1 和 θ2。θ1 坡度小,θ2 坡度大。因为 θ1 坡度小,按照公式(下)以及前面的概念,θi1 这个参数上面算出来的梯度值都比较小,所以算出来的 σit 就小,σit 小学习率就大。反过来,θ12坡度大,所以计算出的梯度都比较大σit 就比较大,在更新的时候,步伐(参数更新的量)就比较小。因此有了 σit 这一项以后,就可以随着梯度的不同,每一个参数的梯度的不同,来自动调整学习率的大小。

3.3.2 RMSProp

        同一个参数需要的学习率,也会随着时间而改变。因此同一个参数的同个方向,学习率也是需要动态调整的,引入了RMSprop(Root Mean Squared propagation)

3.3.3 Adam

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

3.4 学习率调整(learning rate scheduling)

        1. 之前的方法中 η 是一个固定的值,而在学习率调度中 η 跟时间有关。学习率调度中最常见的策略是学习率衰减(learning rate decay),也称为学习率退火(learning rateannealing)。随着参数的不断更新,让 η 越来越小。

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

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

3.5 优化总结

        最新版本公式见下:

        这个版本的动量不是顺着某个时刻算出的梯度方向来更新参数,而是把过去所有算出梯度的方向做一个加权总和当作更新的方向。接下来的步伐大小为 m/σ。最后通过 η来实现学习率调度。这个是目前优化的完整的版本

        注意:m和 σ在使用过去所有梯度的方式是不一样的,动量是直接把所有的梯度都加起来,所以它考虑方向,考虑梯度的正负。但是均方根不考虑梯度的方向,只考虑梯度的大小,计算 σ的时候,都要把梯度取一个平方项,把平方的结果加起来,所以只考虑梯度的大小,所以动量跟 σ计算出来的结果并不会互相抵消

3.6 分类

3.6.1 分类与回归的关系

        举例:根据一个人的身高跟体重,预测他的年级,一年级、二年级还是三年级。一年级跟二年级关系比较近,一年级跟三年级关系比较远。用数字来表示类会预设 1 和 2 有比较近的关系,1 和 3 有比较远的关系。但假设三个类本身没有特定的关系,类 1 是 1,类 2 是 2 类 3 是 3。这种情况,需要引入独热向量来表示类。实际上,在做分类的问题的时候,比较常见的做法也是用独热向量表示类。如果用独热向量计算距离的话,类两两之间的距离都是一样的

3.6.2 带有 softmax 的分类

        softmax 的计算如下图所示,先把所有的 y 取一个指数(负数取指数后也会变成正的),再对其做归一化(除掉所有 y 的指数值的和)得到 y′。图 3.33 是 softmax 的块(block),输入 y1、y2 和 y3,产生 y′1、y′2 和 y′3。比如 y1 = 3,y2 = 1,y3 = −3,取完指数的时候,exp(3) = 20、exp(1) = 2.7 和 exp(−3) = 0.05,做完归一化后,就变成 0.88、0.12 跟 0。−3取完指数,再做归一化以后,会变成趋近于 0 的值。所以 softmax 除了归一化,让 y′1、y′2 和y′3,变成 0 到 1 之间,和为 1 以外,它还会让大的值跟小的值的差距更大

3.6.3 分类损失

        1. 均方误差,即把 y 里面每一个元素拿出来,计算它们的平方和当作误差。

        2. 交叉熵,当 yˆ 跟 y′ 相同时,可以最小化交叉熵的值,此时均方误差也是最小的。最小化交叉熵其实就是最大化似然(maximize likelihood)

        3. 相较于均方误差,交叉熵更常用于分类

实践部分:见https://linklearner.com/activity/16/15/60

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值