1.自适应学习率
临界点其实不一定是在训练一个网络的时候会遇到的最大的障碍。很多时候训练网络,损失不再下降,不是因为到了临界点,而是可能在山谷之间不停震荡。
以下为不同学习率对训练的影响,下图中左右平缓,上下陡峭。学习率大时无法进入山谷,太小时左右又无法移动
1.1 AdaGrad
AdaGrad(Adaptive Gradient)是典型的自适应学习率方法,其能够根据梯度大小自动调整学习率。AdaGrad 可以做到梯度比较大的时候,学习率就减小,梯度比较小的时候,学习率就放大。
以下为公式
1.2 RMSProp
同一个参数需要的学习率,也会随着时间而改变。
其中 0 < α < 1,其是一个可以调整的超参数,用来设置权重
1.3 Adam
最常用的优化的策略或者优化器(optimizer)是Adam(Adaptive moment estimation)。Adam 可以看作 RMSprop 加上动量,其使用动量作为参数更新方向,并且能够自适应调整学习率。
1.4 学习率调度
由于bc段纵轴梯度太小,导致步伐变大,出现红圈中显现。不过步伐变大后,其会走到梯度比较大的地方。走到梯度比较大的地方后,σ会慢慢变大,更新的步伐大小会慢慢变小,从而回到原来的路线。
通过学习率调度(learning rate scheduling)可以解决这个问题。之前的学习率调整方法中 η 是一个固定的值,而在学习率调度中 η 跟时间有关。
学习率调度中最常见的策略是学习率衰减(learning rate decay),也称为学习率退火(learning rateannealing)。随着参数的不断更新,让 η 越来越小。
除了学习率下降以外,还有另外一个经典的学习率调度的方式———预热。预热的方法是让学习率先变大后变小,至于变到多大、变大的速度、变小的速度是超参数。残差网络里面是有预热的,在残差网络里面,学习率先设置成 0.01,再设置成 0.1,并且其论文还特别说明,一开始用 0.1 反而训练不好。除了残差网络,BERT 和 Transformer 的训练也都使用了预热。
2.分类
2.1分类的概念
回归是输入一个向量 x,输出 yˆ,我们希望 yˆ 跟某一个标签 y 越接近越好,y 是要学习的目标。而分类可当作回归来看,输入 x 后,输出仍然是一个标量 yˆ,要让它跟正确答案的那个类越接近越好。yˆ 是一个数字,我们可以把类也变成数字。
实际上,在做分类的问题的时候,比较常见的做法也是用独热向量表示类。
2.2 softmax
实际做分类的时候,往往会把 yˆ 通过 softmax 函数得到 y′,才去计算 y′ 跟 yˆ 之间的距离。
为什么分类过程中要加上 softmax 函数?一个比较简单的解释是,y 是独热向量,所以其里面的值只有 0 跟 1,但是 yˆ 里面有任何值。既然目标只有 0 跟 1,但 yˆ 有任何值,可以先把它归一化到 0 到 1 之间,这样才能跟标签的计算相似度。
公式如下
示例:
2.3分类损失
交叉熵更常用,当 yˆ 跟 y′ 相同时,可以最小化交叉熵的值,此时均方误差也是最小的。最小化交叉熵其实就是最大化似然(maximize likelihood)。
以下为使用最小化交叉熵的好处,交叉熵在左上角有梯度,可以移动。均方误差在左上角十分平缓,会卡住。
3.HW3(CNN)卷积神经网络-图像分类
下载代码和数据集,一键运行
git lfs install
git clone https://www.modelscope.cn/datasets/Datawhale/LeeDL-HW3-CNN.git
卷积神经网络是深度学习中的一个非常重要的分支,本作业提供了进行图像分类任务的基本范式。
-
准备数据
-
训练模型
-
应用模型
要完成一个深度神经网络训练模型的代码,大概需要完成下面的内容:
-
导入所需要的库/工具包
-
数据准备与预处理
-
定义模型
-
定义损失函数和优化器等其他配置
-
训练模型
-
评估模型
-
进行预测
此范式不仅适用于图像分类任务,对于广泛的深度学习任务也是适用的。