深度学习-模型调优


前言

本深度学习系列是根据paddle飞浆所简单整理的,需要可自行跳转学习。本节是关于深度学习-模型调优的相关内容,包括学习率、注意力机制、正则化、batch size、参数初始化等。这是只简单记录部分知识,目的是方便以后复习。


一、学习率

1.什么是学习率

超参数之一,学习率是训练神经网络的重要超参数之一,它代表在每一次迭代中梯度向损失函数最优解移动的步长,通常用 η 表示。

2.学习率对网络的影响

因此,只有找到合适的学习率,才能保证代价函数以较快的速度逼近全局最优解。学习率过小或过大所带来的影响

3.学习率的设置

通常的,在训练网络的前期过程中,会选取一个相对较大的学习率以加快网络的收敛速度。而随着迭代优化的次数增多,逐步减小学习率,以保证最终收敛至全局最优解,而不是在其附近震荡或爆炸。下面将介绍几种常用的学习率衰减方法,包括:分段常数衰减、指数衰减、自然指数衰减、多项式衰减、间隔衰减、多间隔衰减、逆时间衰减、Lambda衰减、余弦衰减、诺姆衰减、loss自适应衰减、线性学习率热身等。

  1. 分段常数衰减(Piecewise Decay):在不同的学习阶段指定不同的学习率,在每段内学习率相同。
  2. 指数衰减(Exponential Decay):学习率随训练轮数成指数衰减,每次将当前学习率乘以给定的衰减率得到下一个学习率。
  3. 自然指数衰减 (Natural Exponential Decay):每次将当前学习率乘以给定的衰减率的自然指数得到下一个学习率。
  4. 多项式衰减(Polynomial Decay):通过多项式衰减函数,学习率从初始值逐渐衰减至最低学习率。其中,参数 cycle 代表学习率下降后是否重新上升。若 cycle=True,则学习率衰减至最低后会重新上升到一定值,再降低至最低学习率并进行循环。若 cycle=False,则学习率从初始值单调递减至最低值。
  5. 间隔衰减 (Step Decay):学习率按照指定的轮数间隔进行衰减
  6. 多间隔衰减(Multi Step Decay:学习率按特定间隔进行衰减,与间隔衰减的区别在于:间隔衰减的epoch间隔是单一且固定的,而多间隔衰减中的epoch间隔是预先指定的多间隔。
  7. 逆时间衰减(Inverse Time Decay):学习率大小与当前衰减次数成反比。
  8. Lambda衰减(Lambda Decay):使用lambda函数来设置学习率,其中lambda函数通过epoch计算出一个因子,使用该因子乘以初始学习率。
  9. 余弦衰减(Cosine Annealing Decay):使用 cosine annealing 的策略来动态调整学习率,学习率随step数变化成余弦函数周期变化。该方法为论文 SGDR:Stochastic Gradient Descent with Warm Restarts 中cosine annealing动态学习率。
  10. 诺姆衰减(Noam Decay):更多细节请参考 attention is all you need。
  11. loss自适应衰减(Reduce On Plateau): 当loss停止下降时,降低学习率。其思想是:一旦模型表现不再提升,将学习率降低 2-10 倍对模型的训练往往有益。此外,每降低一次学习率后,将会进入一个冷静期。在冷静期内不会监控loss变化也不会进行衰减。当冷静期结束后,会继续监控loss的上升或下降。
  12. 线性学习率热身(Linear Warm Up):线性学习率热身是一种学习率优化策略,在正常调整学习率前,先逐步增大学习率。

二、注意力机制

1. 注意力机制是什么

在机器翻译中首先使用,即你的精神是聚焦在你关心的那些事物上,这其实就是注意力的体现,这种有意识的聚焦被称为聚焦式注意力(Focus Attention)。这种无意识地,往往由外界刺激引发的注意力被称为显著性注意力(Saliency-Based Attention)。但不论哪一种注意力,其实都是让你在某一时刻将注意力放到某些事物上,而忽略另外的一些事物,这就是注意力机制(Attention Mechanism)。在深度学习领域,模型往往需要接收和处理大量的数据,然而在特定的某个时刻,往往只有少部分的某些数据是重要的,这种情况就非常适合Attention机制发光发热。

2. 经典注意力机制

  1. 用机器翻译任务带你看Attention机制的计算
  2. 注意力机制的正式引入

3. 注意力机制的一些变体

  1. 硬性注意力机制
  2. 键值对注意力机制
  3. 多头注意力机制

4. 自注意力机制

三、正则化

1. 正则化介绍

什么是正则化?
正则化是一种对学习算法稍加修改以使模型具有更好的泛化能力的技术。这反过来也提高了模型在看不见的数据上的性能。
在正则化方面,一般全连接层用dropout,卷积层用BN。

正则化如何帮助减少过度拟合?
正则化惩罚系数。在深度学习中,它实际上惩罚节点的权重矩阵。正则化可以避免算法过拟合,过拟合通常发生在算法学习的输入数据无法反应真实的分布且存在一些噪声的情况。过去数年,研究者提出和开发了多种适合机器学习算法的正则化方法,如数据增强、L2 正则化(权重衰减)、L1 正则化、Dropout、Drop Connect、随机池化和早停等。

2. 数据增强

数据增强是提升算法性能、满足深度学习模型对大量数据的需求的重要工具。数据增强通过向训练数据添加转换或扰动来人工增加训练数据集。数据增强技术如水平或垂直翻转图像、裁剪、色彩变换、扩展和旋转通常应用在视觉表象和图像分类中。
关于视觉领域的数据增强的方法详细请参考: 数据增广????

3. L1 L2正则化

L1 和 L2 正则化是最常用的正则化方法。L1 正则化向目标函数添加正则化项,以减少参数的绝对值总和;而 L2 正则化中,添加正则化项的目的在于减少参数平方的总和。根据之前的研究,L1 正则化中的很多参数向量是稀疏向量,因为很多模型导致参数趋近于 0,因此它常用于特征选择设置中。机器学习中最常用的正则化方法是对权重施加 L2 范数约束。????

4. Dropout

基础概念:Dropout指在训练神经网络过程中随机丢掉一部分神经元来减少神经网络复杂度,从而防止过拟合。Dropout实现方法很简单:在每次迭代训练中,以一定概率随机屏蔽每一层中若干神经元,用余下神经元所构成网络来继续训练。比如:计算其L1范数会比不使用Dropout时变小,但是预测时却没有丢弃神经元,这将导致训练和预测时数据的分布不一样。为了解决这个问题?????

5. DropConnect

DropConnect也是在ICML2013上发表的另一种减少算法过拟合的正则化策略,是 Dropout 的一般化。在 Drop Connect 的过程中需要将网络架构权重的一个随机选择子集设置为零,取代了在 Dropout 中对每个层随机选择激活函数的子集设置为零的做法。由于每个单元接收来自过去层单元的随机子集的输入,Drop Connect 和 Dropout 都可以获得有限的泛化性能。Drop Connect 和 Dropout 相似的地方在于它涉及在模型中引入稀疏性,不同之处在于它引入的是权重的稀疏性而不是层的输出向量的稀疏性。

Dropout是随机将隐含层节点的输出清0,针对的是输出。
DropConnect是将节点中的每个与其相连的输入权值以1-p的概率清0;针对的是输入。DropConnect只能用于全连接的网络层(和dropout一样)
根据作者的观点,Dropout和DropConnect都类似模型平均,Dropout是2|m|个模型的平均,而DropConnect是2|M|个模型的平均。(m是向量,M是矩阵,取模表示矩阵或向量中对应元素的个数),从这点上来说,DropConnect模型平均能力更强,因为|M|>|m|

6. 早停法

早停法可以限制模型最小化代价函数所需的训练迭代次数。早停法通过确定迭代次数解决这个问题,不需要对特定值进行手动设置。

四、batch size

1. 什么是batch size

超参数之一,我们需要决定在一次训练中,要选取多少样本喂给神经网络,这个要选择的样本个数,就是batch size。batch size的可取值范围为1到全体样本数。举个例子,传统的梯度下降法(Gradient Descent)就是采用了全部样本来进行训练和梯度更新,而它的变体随机梯度下降法(stochastic gradient descent),则设定batch size为1,即每次只将一个样本喂给神经网络,在mini-batch梯度下降法中,则采用了一个折中的方法,每次选择一部分数据用于训练。那么,不同大小的batch对网络训练有什么区别呢?我们又该如何进行选择呢?

2. batch size对网络的影响

凸与非凸问题,而传统的梯度下降法在这种情况下很容易陷入局部最优点或鞍点。当样本数很大时,每一次的计算将会非常耗时,也会导致内存爆炸。

如果选取比较折中的batch size作为mini-batch来进行随机梯度下降,其优点是用部分样本来近似全部样本,梯度相对于batch size为1更为准确,同时相比与使用全部样本,计算量减小,计算速度和收敛速度都会得到提升。??

3. batch size的选择

在了解了batch size对于网络的影响后,很自然的,我们有一个疑问:如何选择一个适当的batch size呢?batch size的选取通常需要考虑一下几点:

  1. 更大的batch size会得到更精确的梯度估计值,但其估计梯度的回报是低于线性的。
  2. 如果训练集较小,可以直接使用梯度下降法,batch size等于样本集大小。
  3. Deep Learning书中提到,在某些硬件上使用特定大小的数组时,运行时间会更少。尤其是在使用GPU时,通常使用2的幂数作为batch size可以获得更少的运行时间。

五、参数初始化

在我们开始训练神经网络之前,首先要做的是给网络中的每一个权重和偏置赋值,这个赋值的过程就是参数初始化。
那么,我们要如何对参数进行初始化呢?或许你有想到过将全部参数都设置为0,这看起来是一个简单又方便的办法,但遗憾的是神经网络中不能对权重进行全零初始化。在讨论如何对参数进行初始化前,我们先来看看为什么不能进行全零初始化。

1. 为什么不能全零初始化?

由此可见,更新后的参数在每一层内都是相同的。同时,无论经过多少次网络训练,相同网络层内的参数值都是相同的,这会导致网络在学习时没有重点,对所有的特征处理相同,这很可能导致模型无法收敛训练失败。这种现象被称为对称失效。
同样地,当权重被初始化为相同的非零值时,也会出现上述情况,此时神经网络模型和一个线性模型的效果相似,失去了神经网络提取特征的意义。那么,有哪些可行的参数初始化方法呢?

2. 常见的初始化方法

  1. 基于固定方差的参数初始化:一种非常常见的方式是采用高斯分布或均匀分布来对权重进行随机初始化。上述两种基于固定方差的初始随机化方法中,关键点在于如何设置方差 σ2。过大或过小的方差都会导致梯度下降缓慢,网络训练效果不好等问题???。为了降低固定方差对网络性能及优化效率的影响,基于固定方差的随机初始化一般要配合逐层归一化来使用。
  2. 基于方差缩放的参数初始化:方差缩放方法能够根据神经元的链接数量来自适应地调整初始化分布地方差,尽可能的保证每个神经元的输入和输出方差一致。那么,为什么要保证前后方差的一致性呢?这是因为如果输入空间和输出空间的方差差别较大,也就是说数据空间分布差异较大,那么在反向传播时可能会引起梯度消失或爆炸问题???。比如,当输入空间稀疏,输出空间稠密时,将在输出空间计算得到的误差反向传播给输入空间时,这个误差可能会显得微不足道,从而引起梯度消失。而当输入空间稠密,输出空间稀疏时,将误差反向传播给输入空间,就可能会引起梯度爆炸,使得模型震荡。
    ①Xavier初始化:Xavier 初始化因为基本保证了输入和输出的方差一致,使得样本空间和类别空间的分布差异相似,因此使得模型的训练速度和分类性能获得提升。但xavier初始化的推导基于激活函数是线性的假设,使其并不适合于ReLU、sigmoid等非线性激活函数 ②kaiming初始化(???):是一种针对ReLU的初始化方法,假定使用ReLU激活函数时,网络每一层都中有一半的神经元被激活,另一半为0,因此其分布的方差也近似为恒等函数的一半。

  • 1
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值