目录
一. 自适应学习率
1. 引入原因
临界点其实不一定是在训练一个网络的时候会遇到的最大的障碍。一般在训练一个网络的时候,损失原来很大,随着参数不断的更新,损失会越来越小,最后就卡住了,损失不再下降。但这个点不一定是鞍点或者极值点,可能梯度在山谷的两个谷壁间,不断地来回“震荡”,这个时候损失不会再下降。
现在训练一个网络,训练到现在参数在临界点附近,再根据特征值的正负号判断该临界点是鞍点还是局部最小值。实际上在训练的时候,要走到鞍点或局部最小值,是一件困难的事情。一般的梯度下降,其实是做不到的。用一般的梯度下降训练,往往会在梯度还很大的时候,损失就已经降了下去,这个是需要特别方法训练的。(这就需要去调节学习率)要走到一个临界点其实是比较困难的,多数时候训练在还没有走到临界点的时候就已经停止了。
2. 不同的学习率对训练的影响
学习率设的小的时候,训练时的步伐大;学习率设的大的时候,训练时的步伐小。
图中η = 10
最原始的梯度下降连简单的误差表面都做不好,因此需要更好的梯度下降的版本。在梯度下降里面,所有的参数都是设同样的学习率,这显然是不够的,应该要为每一个参数定制化学习率,即引入自适应学习率(adaptive learning rate)的方法,给每一个参数不同的学习率。如果在某一个方向上,梯度的值很小,非常平坦,我们会希望学习率调大一点;如果在某一个方向上非常陡峭,坡度很大,我们会希望学习率可以设得小一点。
3. 方法:
1.AdaGrad
AdaGrad 可以做到梯度比较大的时候,学习率就减小,梯度比较小的时候,学习率就放大。
2. RMSProp
3. Adam
Adam 可以看作 RMSprop 加上动量,其使用动量作为参数更新方向,并且能够自适应调整学习率。
4. 学习率调度
使用AdaGrad 方法优化一开始优化的时候很顺利,在左转的时候,有 AdaGrad 以后,可以再继续走下去,走到非常接近终点的位置。走到 BC 段时,因为横轴方向的梯度很小,所以学习率会自动变大,步伐就可以变大,从而不断前进。接下来的问题走到图 中红圈的地方,快走到终点的时候突然“爆炸”了。σit 是把过去所有的梯度拿来作平均。在 AB段梯度很大,但在 BC 段,纵轴的方向梯度很小,因此纵轴方向累积了很小的 σit,累积到一定程度以后,步伐就变很大,但有办法修正回来。因为步伐很大,其会走到梯度比较大的地方。走到梯度比较大的地方后,σit 会慢慢变大,更新的步伐大小会慢慢变小,从而回到原来的路线。
通过学习率调度(learning rate scheduling)可以解决这个问题。之前的学习率调整方法中 η 是一个固定的值,而在学习率调度中 η 跟时间有关。学习率调度中最常见的策略是学习率衰减(learning rate decay),也称为学习率退火(learning rateannealing)。随着参数的不断更新,让 η 越来越小。
除了学习率下降以外,还有另外一个经典的学习率调度的方式———预热。预热的方法是让学习率先变大后变小,至于变到多大、变大的速度、变小的速度是超参数。残差网络[8] 里面是有预热的,在残差网络里面,学习率先设置成 0.01,再设置成 0.1,并且其论文还特别说明,一开始用 0.1 反而训练不好。除了残差网络,BERT 和 Transformer 的训练也都使用了预热。
二. 分类
1. 独热向量
在做分类的问题的时候,比较常见的做法也是用独热向量表示类。这样标签y便变成了一个n维的向量(类的数量为n)。
示例:
如果目标 y 是一个向量,比如 y 是有三个元素的向量,网络也要输出三个数字才行。如图 所示,输出三个数值就是把本来输出一个数值的方法,重复三次。把 a1、a2 和 a3 乘上三个不同的权重,加上偏置,得到 yˆ1;再把 a1、a2 和 a3 乘上另外三个权重,再加上另外一个偏置得到 yˆ2;把 a1、a2 和 a3 再乘上另外一组权重,再加上另外一个偏置得到 yˆ3。输入一个特征向量,产生 yˆ1、yˆ2、yˆ3,希望 yˆ1、yˆ2、yˆ3 跟目标越接近越好。
2. 带有 softmax 的分类
分类实际过程是:输入 x,乘上 W,加上 b,通过激活函数 σ,乘上W′,再加上 b′ 得到向量 yˆ。但实际做分类的时候,往往会把 yˆ 通过 softmax 函数得到 y′,才去计算 y′ 跟 yˆ 之间的距离。
一般有两个类的时候,我们不套 softmax,而是直接取 sigmoid。当只有两个类的时候,sigmoid 和 softmax 是等价的。
3. 分类损失
分类损失问题通常用交叉熵来求解,而不是常用的均方误差。
公式:
如果最初的点在左上方时,均方误差处梯度几乎为0,无法进行优化,但是交叉熵仍有梯度,仍然可以优化,从而到达最优位置。
做分类时,选均方误差的时候,如果没有好的优化器,有非常大的可能性会训练不起来。如果用 Adam,虽然图 (b) 中圆圈的梯度很小,但 Adam 会自动调大学习率,还有机会走到右下角,不过训练的过程比较困难。总之,改变损失函数可以改变优化的难度。
三. HW3(CNN)卷积神经网络-图像分类
结果