1,为什么要有自适学习率?
在一般梯度下降的情况下,如果损失不再下降,此时梯度的范数不一定为0,它也不一定处在临界点(局部最小值和鞍点),在这种情况下,我们需要不断地调整学习率来达到使其损失下降的目的
在以下情况中,参数在峡谷的两端,参数在山壁的两端不断第“震荡”,损失降不下去,但是梯度仍然是很大的。我们可以试着把学习率设小一点,学习率决定了更新参数的时候的步伐,学习率设太大,步伐太大就无法慢慢地滑到山谷里面。调学习率从 10−2 调到 10−7 的结果如图 3.22(b) 所示,参数不再“震荡”了。参数会滑到山谷底后左转,但是这个训练永远走不到终点,因为学习率已经太小了。AB 段的坡度很陡,梯度的值很大,还能够前进一点。左拐以后,BC 段的坡度已经非常平坦了,这种小的学习率无法再让训练前进。
通过以上这种情况我们就可以发现,在梯度下降的过程中,我们不能把所有的参数设相同的学习率,应该为每个参数指定专用的学习率,即自适学习率
2,自适学习率方法?
(1), AdaGrad
AdaGrad(Adaptive Gradient)是典型的自适应学习率方法,其能够根据梯度大小自动调整学习率。AdaGrad 可以做到梯度比较大的时候,学习率就减小,梯度比较小的时候,学习率就放大。
(2),RMSProp
同一个参数需要的学习率,也会随着时间而改变。
(3),Adam
最常用的优化的策略或者优化器(optimizer)是Adam(Adaptive moment estimation)[7]。Adam 可以看作 RMSprop 加上动量,其使用动量作为参数更新方向,并且能够自适应调整学习率。
3,学习率调度
在优化的过程中,可能会因为积累了过多的梯度,导致最后结果爆掉的现象,针对这种现象,我们可以使用学习率调度,之前的学习率调整方法中 η 是一个固定的值,而在学习率调度中 η 跟时间有关,学习率调度中最常见的策略是学习率衰减(learning rate decay),也称为学习率退火(learning rateannealing)。随着参数的不断更新,让 η 越来越小。
另外一个经典的学习率调度的方式———预热,预热的方法是让学习率先变大后变小,至于变到多大、变大的速度、变小的速度是超参数。
4,优化总结
其中 mit 是动量。这个版本里面有动量,其不是顺着某个时刻算出的梯度方向来更新参数,而是把过去所有算出梯度的方向做一个加权总和当作更新的方向。
5,分类与回归的关系
大部分分类都是使用one-hot编码,只有0和1两个选项
回归就是根据几个数据来预估信息,返回的是预测的值
6,softmax函数
我们可以根据这个函数得出一个预测的概率
下面是例子
7,分类损失
有两种计算分类损失的方法
(1),
(2),
其中最常见的方法是最小化交叉熵
下面是结合的例子