Datawhale X 李宏毅苹果书 AI夏令营 深度学习详解进阶task2

 

深度学习基础

目录

深度学习基础

1.3  自适应学习率

1.3.1    AdaGrad

1.3.2    RMSProp

1.3.3     Adam

1.4 学习率调度

1.5 优化总结

1.6  分类

1.6.1 分类与回归的关系

1.6.2 带有 softmax 的分类


1.3  自适应学习率

临界点其实不一定是在训练一个网络的时候会遇到的最大的障碍。图1.16中的横坐标代表参数更新的次数,竖坐标表示损失。一般在训练一个网络的时候,损失原来很大,随着参数不断的更新,损失会越来越小,最后损失不再下降。当我们走到临界点的时候, 意味着梯度非常小,但损失不再下降的时候,梯度并没有真的变得很小,图1.17给出了示例。 图1.17中横轴是迭代次数,竖轴是梯度的范数 (norm), 即梯度这个向量的长度。

图1.18是误差表面,梯度在山谷的两个谷壁间,不断地来回“震荡”,这个时候损失不会再下降,它不是真的卡到了临界点,卡到了鞍点或局部最小值。但它的梯度仍然很大,只是损失不一定再减小了。所以训练一个网络,训练到后来发现损失不再下降的时候,有时候不是卡

图1. 16训练网络时损失变化

图1. 17 训练网络时梯度范数变化

在局部最小值或鞍点,只是单纯的损失无法再下降。

图3.20 梯度来回“震荡”

我们现在训练一个网络,训练到现在参数在临界点附近,再根据特征值的正负号判断该临界点是鞍点还是局部最小值。用一般的梯度下降训练,往往会在梯度还很大的时候,损失就已经降了下去,这个是需要特别方法训练的。要走到一个临界点其实是比较困难的,多数时候训练在还没有走到临界点的时候就已经停止了。

举个例子,我们有两个参数 w 和 b, 这两个参数值不一样的时候,损失值也不一样,得 到了图1.19所示的误差表面,该误差表面的最低点在叉号处。

图1.19 凸误差表面

学习率\eta = 10^{-2}的结果如图1.20(a) 所示。参数在峡谷的两端,参数在山壁的两端不断第“震荡”,损失降不下去,但是梯度仍然是很大的。我们可以试着把学习率设小一点,学习率 决定了更新参数的时候的步伐,学习率设太大,步伐太大就无法慢慢地滑到山谷里面。调学习 率从10^{-2}调到10^{-7}的结果如图120b) 所示,参数不再“震荡”了。

                                (a) 学习率为\eta ^{-2}                                                (b)  学习率为\eta ^{-7}

图1.20 不同的学习率对训练的影响

度下降里面,为每一个参数定制化学习率,即引入自适应学习率 (adaptive learning rate) 的方法,给每一个参数不同的学习率。如图1.21所示,如果在某一个方向上,梯度的值很小,非常平坦,我们会希望学习率调 大一点;如果在某一个方向上非常陡峭,坡度很大,我们会希望学习率可以设得小一点。

图1.21 不同参数需要不同的学习率

1.3.1    AdaGrad

AdaGrad(Adaptive Gradient)是典型的自适应学习率方法,根据梯度大小自动调整学习率。AdaGrad 可以做到梯度比较大的时候,学习率就减小,梯度比较小的时候,学习率就放大。梯度下降更新某个参数\Theta _{t}^{i}的过程为

\Theta _{t}^{i}在第t 个迭代的值减掉在第t个迭代参数i算出来的梯度

g _{t}^{i}代表在第t个迭代,即\Theta=\Theta _{t}时,参数\Theta ^{i}对损失L 的微分,学习率是固定的。 现在要有一个随着参数定制化的学习率,即把原来学习率\eta变成\frac{\eta}{\sigma _{t}^{i}}

\sigma _{t}^{i}的上标为i,这代表参数σ与i相关,不同的参数的\sigma不同。\sigma _{t}^{i}的下标为t,这代表参数\sigma与迭代相关,不同的迭代也会有不同的\sigma。学习率从\eta改成的时候,学习率就变得参数相关.

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

其中\Theta _{0}^{i}是初始化参数。而\sigma _{0}^{i}的计算过程为

其中g _{0}^{i} 是梯度。

第二次更新参数过程为

其中 \sigma _{1}^{i}是过去所有计算出来的梯度的平方的平均再开根号,即均方根。下面式子表示

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

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

\frac{\eta}{\sigma _{t}^{i}}当作是新的学习率来更新参数。

图1.22中有两个参数:\Theta ^{1}\Theta ^{2}\Theta ^{1}坡度小,\Theta ^{2}坡度大。因为\Theta ^{1}坡度小,根据上面推导的结论, \Theta_{1}^{i}这个参数上面算出来的梯度值都比较小,因为梯度算出来的值比较小,所以算出来的\sigma _{t}^{i} 小,\sigma _{t}^{i}小学习率就大。

图1.22  自动调整学习率示例

1.3.2    RMSProp

同一个参数需要的学习率,也会随着时间而改变。在图1.23中的误差表面中,如果考虑 横轴方向,绿色箭头处坡度比较陡峭,需要较小的学习率,但是走到红色箭头处,坡度变得平坦了起来,需要较大的学习率。因此同一个参数的同个方向,学习率也是需要动态调整的,于是就有了一个新的方法———RMSprop

图1.23 AdaGrad 的问题

RMSprop  第一步跟Adagrad  的方法是相同的,即

第二步更新过程为

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

同样的过程就反复继续下去,如x下式所示。

RMSProp通过\alpha可以决定。如果使用RMSprop,  就可以动态调整 σi这一项。图1.24中黑线是误差表面,球 就从 A  到B,AB  段的路很平坦,g 很小,更新参数的时候,我们会走比较大的步伐。走动 BC 段后梯度变大了,AdaGrad  反应比较慢,而RMSprop  会把α设小一点,让新的、刚看 到的梯度的影响比较大,很快地让 σi 的值变大,很快地让步伐变小,RMSprop  可以很快地 “踩刹车”。

图1.24 RMSprop  示例

1.3.3     Adam

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

1.4 学习率调度

简单的误差表面,加上自适应学习率以后,使用AdaGrad 方法优化的结果如图1.25所示。一开始优化的时候很顺利,在左转的时候,有AdaGrad 以后,可以再继续走下去,走到非常接近终点的位置。走到BC 段时,因为横轴方向的梯 度很小,所以学习率会自动变大,步伐就可以变大,从而不断前进。接下来的问题走到图1.25中红圈的地方,快走到终点的时候突然“爆炸”了。

图1.25 AdaGrad 优化的问题

通过学习率调度可以解决这个问题。之前的学习率调整方法中\eta是一个固定的值,而在学习率调度中η跟时间有关,如下式所示。

学习率调度中最常见的策略是学习率衰减 ,也称为学习率退火。随着参数的不断更新,让\eta越来越小。如图1.27所示。在图3.22b 红圈的地方,虽然步 伐很大,但η变得非常小,步伐乘上η就变小了,就可以慢慢地走到终点。

图1.26 学习率衰减的优化效果

除了学习率下降以外,还有另外一个经典的学习率调度的方式————预热。预热的方法 是让学习率先变大后变小,至于变到多大、变大的速度、变小的速度是超参数。残差网络,BERT  和 Transformer的训练也都使用了预热。

1.5 优化总结

所以我们从最原始的梯度下降,进化到这一个版本,如式子所示。

其中m  是动量。

这个是目前优化的完整的版本,这种优化器除了Adam 以外,还有各种变形。

1.6  

分类与回归是深度学习最常见的两种问题

1.6.1 分类与回归的关系

回归是输入一个向量 x, 输出,我们希望y\hat{}跟某一个标签 y 接近越好,y 是要学习  的目标。而分类可当作回归来看,输入x 后,输出仍然是一个标量y, 要让它跟正确答案的,那个类越接近越好。。如图1.27所示,类1是编号  1,类2是编号2,类3是编号3,\hat{y}跟类的编号越接近越好。假设三个类本身没有特定的关系, 类1是1,类2是2类3是3。这种情况,需要引入独热向量来表示类。实际上,在做分类  的问题的时候,比较常见的做法也是用独热向量表示类。

图1.27 用数字表示类的问题

如果有三个类,如果每个类都用一个独热向量来表示,就没有类1跟类2比较接近,类1跟 类3比较远的问题。如果用独热向量计算距离的话,类两两之间的距离都是一样的。

如果目标y 是一个向量,比如y 是有三个元素的向量,网络也要输出三个数字才行。如图1.28所示,输出三个数值就是把本来输出一个数值的方法,重复三次。把a_{1} a_{2} a_{3} 乘上三个不同的权重,加上偏置,得到\hat{y}_{1};再把 a_{1} a_{2} a_{3}乘上另外三个权重,再加上另外一个偏置得到\hat{y}_{2};把a_{1} a_{2} a_{3}再乘上另外一组权重,再加上另外一个偏置得到 \hat{y}_{3}。输入一个特征向量,产生\hat{y}_{1}\hat{y}_{2}\hat{y}_{3},希望 \hat{y}_{1}\hat{y}_{2}\hat{y}_{3} 跟目标越接近越好。

 

图 1.28 网络多个输出示例

1.6.2 带有 softmax 的分类

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

  图 1.29 带有 softmax 的分类

图 1.30 考虑了三个类的状况,两个类也可以直接套 softmax 函数。但一般有两个类的时候,我们不套 softmax,而是直接取 sigmoid。当只有两个类的时候,sigmoid 和 softmax 是等价的。

 图 1.30 softmax 示例

 实验截图

1.导入所需要的库和包

2.图像预处理 

 3.写数据集函数 

4.写模型函数

5.写配置函数&&加载数据

6.训练模型 

 

7.

 7.加载数据,测试并生成预测csv

8.数据增强 

9.可视化表示 

9. 

 

 10.尝试使用resnet模型

 

11.修改后训练结果 

 

 

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值