动手学深度学习Pytorch版本学习笔记 Task 03

1.过拟合、欠拟合及其解决方案

1.1对于过拟合、欠拟合的理解

我们探究模型训练中经常出现的两类典型问题:
一类是模型无法得到较低的训练误差,我们将这一现象称作欠拟合(underfitting);
另一类是模型的训练误差远小于它在测试数据集上的误差,我们称该现象为过拟合(overfitting)。 在实践中,我们要尽可能同时应对欠拟合和过拟合。虽然有很多因素可能导致这两种拟合问题,在这里我们重点讨论两个因素:模型复杂度和训练数据集大小。

1.2模型复杂度的影响

动手学深度学习Pytorch版本学习笔记 Task 03_第1张图片

1.3训练数据集大小影响

影响欠拟合和过拟合的另一个重要因素是训练数据集的大小。一般来说,如果训练数据集中样本数过少,特别是比模型参数数量(按元素计)更少时,过拟合更容易发生。此外,泛化误差不会随训练数据集里样本数量增加而增大。因此,在计算资源允许的范围之内,我们通常希望训练数据集大一些,特别是在模型复杂度较高时,例如层数较多的深度学习模型。

1.4常用的防止过拟合的方法

1.4.1 L2正则化

L2正则化可能是最常用的正则化方法了。可以通过惩罚目标函数中所有参数的平方将其实现。即对于网络中的每个权重 w w w,向目标函数中增加一个 1 2 λ w 2 \frac{1}{2}\lambda w^2 21λw2,其中 λ \lambda λ是正则化强度。前面这个 1 2 \frac{1}{2} 21很常见,是因为加上 1 2 \frac{1}{2} 21后,该式子关于 w w w梯度就是 λ w \lambda w λw而不是 2 λ 2\lambda 2λw了。L2正则化可以直观理解为它对于大数值的权重向量进行严厉惩罚,倾向于更加分散的权重向量。在线性分类章节中讨论过,由于输入和权重之间的乘法操作,这样就有了一个优良的特性:使网络更倾向于使用所有输入特征,而不是严重依赖输入特征中某些小部分特征。最后需要注意在梯度下降和参数更新的时候,使用L2正则化意味着所有的权重都以w += -lambda * W向着0线性下降。

1.4.2 L1正则化

对于每个 w w w我们都向目标函数增加一个 λ ∣ w ∣ \lambda |w| λw。L1和L2正则化也可以进行组合:,这也被称作Elastic net regularizaton。L1正则化有一个有趣的性质,它会让权重向量在最优化的过程中变得稀疏(即非常接近0)。也就是说,使用L1正则化的神经元最后使用的是它们最重要的输入数据的稀疏子集,同时对于噪音输入则几乎是不变的了。相较L1正则化,L2正则化中的权重向量大多是分散的小数字。在实践中,如果不是特别关注某些明确的特征选择,一般说来L2正则化都会比L1正则化效果好。

1.4.3最大范式约束(Max norm constraints)

另一种形式的正则化是给每个神经元中权重向量的量级设定上限,并使用投影梯度下降来确保这一约束。在实践中,与之对应的是参数更新方式不变,然后要求神经元中的权重向量 w → \overrightarrow{w} w 必须满足 ∣ ∣ w ∣ ∣ 2 → < c \overrightarrow{||w||_2}w2 <c这一条件,一般 c c c值为3或者4,如果不满足这一条件需要进行如下操作 w = w ∗ c ∣ w → ∣ ∣ , ∥ w → ∣ ∣ > c w=w * \frac{c}{|\overrightarrow{w}||},\|\overrightarrow{w}||>c w=ww c,w >c这样就限制了每一次参数更新的大小,从而有效防止由于训练步长较大引发的过拟合现象。有研究者发文称在使用这种正则化方法时效果更好。这种正则化还有一个良好的性质,即使在学习率设置过高的时候,网络中也不会出现数值“爆炸”,这是因为它的参数更新始终是被限制着的。

1.4.4随机失活(Dropout)

减少神经元之间复杂的共适应性。当隐藏层神经元被随机删除之后,使得全连接网络具有了一定的稀疏化,从而有效地减轻了不同特征的协同效应。也就是说,有些特征可能会依赖于固定关系的隐含节点的共同作用,而通过Dropout的话,它强迫一个神经单元,和随机挑选出来的其他神经单元共同工作,达到好的效果。消除减弱了神经元节点间的联合适应性,增强了泛化能力。由于每次用输入网络的样本进行权值更新时,隐含节点都是以一定概率随机出现,因此不能保证每2个隐含节点每次都同时出现,这样权值的更新不再依赖于有固定关系隐含节点的共同作用,阻止了某些特征仅仅在其它特定特征下才有效果的情况。
关于dropout代码实现过程为什么要scale下具体解释正常在训练时候整体大概会有(1-p)个神经元保留,而在测试时候是全部参与训练,正常应在训练时候对神经元进行缩放也要乘以(1-p),但在实际应用中在训练时候除以(1-p)而不改变测试
dropout的反向传播
dropout的反向传播更助于理解类似于relu的坏死
对于BN和Dropout相关的看法
在图像研究领域方面对于Dropout的看法,并且有人提出了Spatial Dropout的方法

2.梯度消失、梯度爆炸;

2.1对于梯度消失和梯度爆炸的理解

当层数较多时,浅层网络梯度是通过最后一层网络逐渐向前传递计算的,是一种链式求导(连乘的关系),当梯度小于1时出现梯度消失现象,当梯度大于1时出现梯度爆炸现象。
好的参数初始化方式,如He初始化

2.2解决方法

非饱和的激活函数(如 ReLU)

批量规范化(Batch Normalization)

梯度截断(Gradient Clipping)

更快的优化器

LSTM

3.循环神经网络进阶

对于RNN存在的问题:梯度较容易出现衰减或爆炸(BPTT),提出GRU门控循环神经网络:捕捉时间序列中时间步距离较大的依赖关系

3.1GRU

动手学深度学习Pytorch版本学习笔记 Task 03_第2张图片
• 重置门有助于捕捉时间序列短期的依赖关系;
• 更新门有助于捕捉时间序列长期的依赖关系。

3.2LSTM

长短期记忆long short-term memory :
遗忘门:控制上一时间步的记忆细胞 输入门:控制当前时间步的输入
输出门:控制从记忆细胞到隐藏状态
记忆细胞:某种特殊的隐藏状态的信息的流动
动手学深度学习Pytorch版本学习笔记 Task 03_第3张图片

你可能感兴趣的:(动手学深度学习Pytorch版本学习笔记 Task 03)