Datawhale X 李宏毅苹果书 AI夏令营: task2

Adaptive Learning rate

请添加图片描述

损失越来越小,直到稳定,意味着梯度也会很小,但是有时并没有,梯度保持在一个范围震荡。

请添加图片描述
可能就是在一个Sharp minima旁边(山谷),学习率相对太大,不能正常更新进入Local minima了,而梯度却无法下降,就是Loss却保持稳定了。

如果一个Error Surface中,横轴梯度很小,纵轴梯度很大:

  • 学习率很大:就会一直在纵轴方向震荡,而横轴方向几乎不动,很难到临界点。
  • 学习率很小:就会步长很短,难以靠近Local minima

请添加图片描述

所以,不同的地方需要不同的学习率

AdaGrad(Adaptive Gradient)

AdaGrad能够根据梯度大小调整学习率:

  • 梯度大    ⟹    \implies 学习率减小
  • 梯度小    ⟹    \implies 学习率增大

RMS(Root Mean Square)

梯度下降更新某个参数 θ i \theta_i θi 的过程为:
θ i t + 1 ← θ i t − η g i t (3.14) \theta_i^{t+1} \leftarrow \theta_i^t - \eta g_i^t \tag{3.14} θit+1θitηgit(3.14)

θ i t \theta_i^t θit 在第 t t t 个迭代的值域中在第 t t t 个迭代参数 i i i 算出来的梯度

g i t = ∂ L ∂ θ i ∣ θ = θ t (3.15) g_i^t = \frac{\partial L}{\partial \theta_i} \Bigg|_{\theta = \theta^t} \tag{3.15} git=θiL θ=θt(3.15)

g i t g_i^t git 代表在第 t t t 迭代时,参数 θ i \theta_i θi 对损失 L L L 的偏导,学习率 η \eta η 是固定的。

现在要有一个随着参数决定动态化的学习率,即把原来学习率 η \eta η 改成 η σ i t \frac{\eta}{\sigma_i^t} σitη

θ i t + 1 ← θ i t − η σ i t g i t (3.16) \theta_i^{t+1} \leftarrow \theta_i^t - \frac{\eta}{\sigma_i^t} g_i^t \tag{3.16} θit+1θitσitηgit(3.16)

σ i t \sigma_i^t σit 的上标 t t t,这代表参数 σ i \sigma_i σi i i i 相关,不同的参数 θ i \theta_i θi 的不同。 σ i t \sigma_i^t σit 的下标 t t t,这代表参数 σ i \sigma_i σi 与迭代 t t t 相关,不同的迭代也会有不同的 σ i t \sigma_i^t σit。学习率从 η \eta η 改成 η σ i t \frac{\eta}{\sigma_i^t} σitη 的时候,学习率就变得参数相关(parameter dependent)。

参数相关的一个常见的类型是算梯度的均方根(root mean square,RMS)。参数的更新过程为:

θ i t + 1 ← θ i t − η σ i t g i t (3.17) \theta_i^{t+1} \leftarrow \theta_i^t - \frac{\eta}{\sigma_i^t} g_i^t \tag{3.17} θit+1θitσitηgit(3.17)

其中 θ i 0 \theta_i^0 θi0 是初始化参数。而 σ i 0 \sigma_i^0 σi0 的计算过程为:

σ i 0 = ( g i 0 ) 2 = ∣ g i 0 ∣ (3.18) \sigma_i^0 = \sqrt{(g_i^0)^2} = |g_i^0| \tag{3.18} σi0=(gi0)2 =gi0(3.18)

其中 g i 0 g_i^0 gi0 是梯度。将 σ i 0 \sigma_i^0 σi0 的值代入更新的公式可以知道, g i 0 g_i^0 gi0 的值是 + 1 +1 +1 − 1 -1 1。第一次在更新参数,从 θ i 0 \theta_i^0 θi0 更新到 θ i 1 \theta_i^1 θi1 的时候,要么是加上 η \eta η,要么是减掉 η \eta η,跟梯度的大小无关,这个是第一步的情况。

第二次更新参数过程为:

θ i t + 1 ← θ i t − η σ i 1 g i t (3.19) \theta_i^{t+1} \leftarrow \theta_i^t - \frac{\eta}{\sigma_i^1} g_i^t \tag{3.19} θit+1θitσi1ηgit(3.19)

其中 σ i 1 \sigma_i^1 σi1 是过去所有计算出来的梯度的平方的平均再开根号,即均方根,如式(3.20)所示:

σ i 1 = 1 2 ( ( g i 0 ) 2 + ( g i 1 ) 2 ) (3.20) \sigma_i^1 = \sqrt{\frac{1}{2} \left( (g_i^0)^2 + (g_i^1)^2 \right)} \tag{3.20} σi1=21((gi0)2+(gi1)2) (3.20)

同样的操作反复继续下去,如式(3.21)所示。

θ i 3 ← θ i 2 − η σ i 2 g i 2 σ i 2 = 1 3 ( ( g i 0 ) 2 + ( g i 1 ) 2 + ( g i 2 ) 2 ) (3.21) \theta_i^3 \leftarrow \theta_i^2 - \frac{\eta}{\sigma_i^2} g_i^2 \quad \sigma_i^2 = \sqrt{\frac{1}{3} \left( (g_i^0)^2 + (g_i^1)^2 + (g_i^2)^2 \right)} \tag{3.21} θi3θi2σi2ηgi2σi2=31((gi0)2+(gi1)2+(gi2)2) (3.21)

t + 1 t + 1 t+1 次更新参数的时候,即

θ i t + 1 ← θ i t − η σ i t g i t σ i t = 1 t + 1 ∑ i = 0 t ( g i t ) 2 (3.22) \theta_i^{t+1} \leftarrow \theta_i^t - \frac{\eta}{\sigma_i^t} g_i^t \quad \sigma_i^t = \sqrt{\frac{1}{t+1} \sum_{i=0}^t (g_i^t)^2} \tag{3.22} θit+1θitσitηgitσit=t+11i=0t(git)2 (3.22)

η σ i t \frac{\eta}{\sigma_i^t} σitη 当作是新的学习率来更新参数。

RMSProp(Root Mean Square Propagation)

与RMS大致相同,区别在于增加了一个超参数 α \alpha α,可以动态调整。

第二步更新过程为
θ i 2 ← θ i 1 − η σ i 1 g i 1 , σ i 1 = α ( σ i 0 ) 2 + ( 1 − α ) ( g i 1 ) 2 \theta_i^2 \leftarrow \theta_i^1 - \frac{\eta}{\sigma_i^1} g_i^1, \quad \sigma_i^1 = \sqrt{\alpha \left( \sigma_i^0 \right)^2 + \left(1 - \alpha\right) \left(g_i^1\right)^2} θi2θi1σi1ηgi1,σi1=α(σi0)2+(1α)(gi1)2

其中 0 < α < 1 0 < \alpha < 1 0<α<1,其是一个可以调整的超参数。计算 θ i 1 \theta_i^1 θi1 的方法跟 AdaGrad 算均方根不一样,在算均方根的时候,每一个梯度都有同等的重要性,但在 RMSprop 里面,可以自己调整现在的这个梯度的重要性。如果 α \alpha α 设得小趋近于 0 0 0,代表 g i 1 g_i^1 gi1 相较于之前算出来的梯度而言,比较重要;如果 α \alpha α 设得大趋近于 1 1 1,代表 g i 1 g_i^1 gi1 比较不重要,之前算出来的梯度比较重要。

同样的过程就反复继续下去,如下:
θ i + 1 ← θ i − η σ i t g i t , σ i t = α ( σ i t − 1 ) 2 + ( 1 − α ) ( g i t ) 2 \theta_{i+1} \leftarrow \theta_i - \frac{\eta}{\sigma_i^t} g_i^t, \quad \sigma_i^t = \sqrt{\alpha \left( \sigma_i^{t-1} \right)^2 + \left(1 - \alpha\right) \left(g_i^t\right)^2} θi+1θiσitηgit,σit=α(σit1)2+(1α)(git)2

RMSProp 通过 α \alpha α 可以决定, g i t g_i^t git 相较于之前存在于 σ i t − 1 \sigma_i^{t-1} σit1 里面的 g i 1 , g i 2 , … , g i t − 1 g_i^1, g_i^2, \ldots, g_i^{t-1} gi1,gi2,,git1 的重要性有多大。如果使用 RMSprop,就可以动态调整 σ i t \sigma_i^t σit 这一项。图 3.26 中黑线是误差表面,球就从 A 走到 B,AB 段的路很平坦, g g g 很小,更新参数的时候,我们会走比较大的步伐。走动 BC 段后梯度变大了,AdaGrad 反应比较慢,而 RMSprop 会把 α \alpha α 设小一点,让新的、刚看到的梯度的影响比较大, 很快地让 σ i t \sigma_i^t σit 的值变大,很快地让步伐变小,RMSprop 可以很快地“踩刹车”。如果走到 CD 段,CD 段是平坦的地方,可以调整 α \alpha α,让其比较看重最近算出来的梯度,梯度一变小, σ i t \sigma_i^t σit 的值就变小了,走的步伐就变大了。

请添加图片描述

Adam(Adaptive moment estimation)

结合RMSProp和Momentum

Learning rate scheduling

加上AdaGrad之后训练依然存在问题,一开始很顺利,但是到横轴方向却发生了“爆炸”。

原因在于 σ t i \sigma^i_t σti 是拿过去的梯度取平均。AB段梯度很大,但是BC段纵轴梯度很小,导致累计的 σ t i \sigma^i_t σti 很小, η σ t i \frac{\eta}{\sigma^i_t} σtiη 很大,步伐就会很大,又到了纵轴梯度大的地方, σ t i \sigma^i_t σti 又变大,步伐也会慢慢变小。请添加图片描述

所以需要学习率调度 (Learning rate scheduling)

Learning rate decay

学习率衰减 (Learning rate decay) ,也叫学习率退火 (Learning rate annealing) 随着梯度不断更新,让 η \eta η 越来越小,正好适用于上图的问题

请添加图片描述

分类

回归与分类

回归是输入一个向量 x x x,输出 y ^ \hat{y} y^,我们希望 y ^ \hat{y} y^ 跟某一个标签 y y y 越接近越好, y y y 是要学习的目标。而分类可当作回归来看,输入 x x x 后,输出仍然是一个标量 y ^ \hat{y} y^,要让它跟正确答案的那个类越接近越好。

带softmax的分类

根据上述的设定,分类实际过程是:输入 x x x,乘上 W W W,加上 b b b,通过激活函数 σ \sigma σ,乘上 W ′ W' W,再加上 b ′ b' b 得到向量 y ^ \hat{y} y^。但实际上做分类的时候,往往会把 y ^ \hat{y} y^ 通过 softmax 函数得到 y ′ y' y,才去计算 y ′ y' y y y y 之间的距离。

但是,数字可能存在问题,如果用数字表示类别(如类1表示为1,类2表示为2,类3表示为3),模型可能会错误地认为这些数字之间有顺序关系。这在类别之间没有顺序关系的情况下是不合适的。例如,在预测学生的年级时(1年级、2年级、3年级),使用数字表示可能会让模型误以为2年级比1年级“更接近”,而与3年级“更远”,这与实际情况不符。

所以,引入独热向量表示类别,每个类都独立,没有顺序关系,类两两之间距离也是一样。

请添加图片描述

[!note]

Q: 为什么分类过程中要加上 softmax 函数?
A: 一个比较简单的解释是, y y y 是独热向量,所以其里面的值只有 0 跟 1,但是 y ^ \hat{y} y^ 里面有任何值。既然目标 y y y 只有 0 跟 1,但 y ^ \hat{y} y^ 有任何值,可以先把它归一化到 0 到 1 之间,这样才能跟标签的计算相似度。

softmax计算公式:
y ^ i = exp ⁡ ( y i ) ∑ i exp ⁡ ( y i ) \hat{y}_i = \frac{\exp(y_i)}{\sum_i \exp(y_i)} y^i=iexp(yi)exp(yi)
这样可以进行归一化,并让较大和较小值之间差距更大。

[!note]

如果又三个类需要套softmax,如果只有两个,直接取sigmoid即可

分类损失

当我们把 x x x 输入到一个网络里面产生 y ^ \hat{y} y^ 后,通过 softmax 得到 y ′ y' y,再去计算 y ′ y' y y y y 之间的距离 e e e.

计算距离 e e e 有多种做法:

  • Mean Squared Error, MSE 均方误差
    e = ∑ i ( y i − y i ′ ) 2 e = \sum_{i} (y_i - y'_i)^2 e=i(yiyi)2

  • cross-entropy, 交叉熵,当 y y y y ′ y' y 相同时,可以最小化交叉熵的值,此时均方误差也是最小的。最小化交叉熵其实就是最大化似然估计 (maximize likelihood)
    e = − ∑ i y i ln ⁡ y i ′ e = - \sum_{i} y_i \ln y'_i e=iyilnyi

交叉熵更优,更常用

  • 10
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值