《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶

学习地址:https://www.boyuai.com/elites/course/cZu18YmweLv10OeV/jupyter/jfPMOih2z9274kEy4id1j

一、过拟合、欠拟合及其解决方案

过拟合、欠拟合的概念

训练误差(training error):指模型在训练数据集上表现出的误差,

泛化误差(generalization error):指模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。

计算训练误差和泛化误差可以使用之前介绍过的损失函数,例如线性回归用到的平方损失函数和softmax回归用到的交叉熵损失函数。机器学习模型应关注降低泛化误差。

模型选择:验证数据集、K折交叉验证。

过拟合与欠拟合:

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

权重衰减

方法:权重衰减等价于 L2 范数正则化(regularization)。正则化通过为模型损失函数添加惩罚项使学出的模型参数值较小,是应对过拟合的常用手段。

L2 范数正则化(regularization)

L2 范数正则化在模型原损失函数基础上添加L2 范数惩罚项,从而得到训练所需要最小化的函数。L2 范数惩罚项指的是模型权重参数每个元素的平方和与一个正的常数的乘积。以线性回归中的线性回归损失函数为例

《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶

其中w1,w2 是权重参数,b 是偏差参数,样本i 的输入为x1(i),x2(i) ,标签为y(i) ,样本数为n 。将权重参数用向量w=[w1,w2] 表示,带有L2 范数惩罚项的新损失函数为

《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶

其中超参数λ>0 。当权重参数均为0时,惩罚项最小。当λ 较大时,惩罚项在损失函数中的比重较大,这通常会使学到的权重参数的元素较接近0。当λ 设为0时,惩罚项完全不起作用。上式中L2 范数平方|w|2 展开后得到w12+w22 。 有了L2 范数惩罚项后,在小批量随机梯度下降中,我们将线性回归一节中权重w1 和w2 的迭代方式更改为

《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶

可见,L2 范数正则化令权重w1 和w2 先自乘小于1的数,再减去不含惩罚项的梯度。因此,L2 范数正则化又叫权重衰减。权重衰减通过惩罚绝对值较大的模型参数为需要学习的模型增加了限制,这可能对过拟合有效。

丢弃法

多层感知机中神经网络图描述了一个单隐藏层的多层感知机。其中输入个数为4,隐藏单元个数为5,且隐藏单元hi (i=1,…,5 )的计算表达式为

《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶

这里ϕ 是**函数,x1,…,x4 是输入,隐藏单元i 的权重参数为w1i,…,w4i ,偏差参数为bi 。当对该隐藏层使用丢弃法时,该层的隐藏单元将有一定概率被丢弃掉。设丢弃概率为p ,那么有p 的概率hi 会被清零,有1−p 的概率hi 会除以1−p 做拉伸。丢弃概率是丢弃法的超参数。具体来说,设随机变量ξi 为0和1的概率分别为p 和1−p 。使用丢弃法时我们计算新的隐藏单元hi′

《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶

由于E(ξi)=1−p ,因此《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶

即丢弃法不改变其输入的期望值。让我们对之前多层感知机的神经网络中的隐藏层使用丢弃法,一种可能的结果如图所示,其中h2 和h5 被清零。这时输出值的计算不再依赖h2 和h5 ,在反向传播时,与这两个隐藏单元相关的权重的梯度均为0。由于在训练中隐藏层神经元的丢弃是随机的,即h1,…,h5 都有可能被清零,输出层的计算无法过度依赖h1,…,h5 中的任一个,从而在训练模型时起到正则化的作用,并可以用来应对过拟合。在测试模型时,我们为了拿到更加确定性的结果,一般不使用丢弃法

《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶

二、梯度消失、梯度爆炸

深度模型有关数值稳定性的典型问题是消失(vanishing)和爆炸(explosion)。

当神经网络的层数较多时,模型的数值稳定性容易变差。

假设一个层数为L的多层感知机的第l层H(l)的权重参数为W(l),输出层H(L)的权重参数为W(L)。为了便于讨论,不考虑偏差参数,且设所有隐藏层的**函数为恒等映射(identity mapping)ϕ(x)=x。给定输入X,多层感知机的第l层的输出H(l)=XW(1)W(2)…W(l)。此时,如果层数l较大,H(l)的计算可能会出现衰减或爆炸。举个例子,假设输入和所有层的权重参数都是标量,如权重参数为0.2和5,多层感知机的第30层输出为输入X分别与0.230≈1×10−21(消失)和530≈9×1020(爆炸)的乘积。当层数较多时,梯度的计算也容易出现消失或爆炸。

随机初始化模型参数

在神经网络中,通常需要随机初始化模型参数。下面我们来解释这样做的原因。

回顾多层感知机一节描述的多层感知机。为了方便解释,假设输出层只保留一个输出单元o1(删去o2和o3以及指向它们的箭头),且隐藏层使用相同的**函数。如果将每个隐藏单元的参数都初始化为相等的值,那么在正向传播时每个隐藏单元将根据相同的输入计算出相同的值,并传递至输出层。在反向传播中,每个隐藏单元的参数梯度值相等。因此,这些参数在使用基于梯度的优化算法迭代后值依然相等。之后的迭代也是如此。在这种情况下,无论隐藏单元有多少,隐藏层本质上只有1个隐藏单元在发挥作用。因此,正如在前面的实验中所做的那样,我们通常将神经网络的模型参数,特别是权重参数,进行随机初始化。

《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶

PyTorch的默认随机初始化

随机初始化模型参数的方法有很多。在线性回归的简洁实现中,我们使用torch.nn.init.normal_()使模型net的权重参数采用正态分布的随机初始化方式。不过,PyTorch中nn.Module的模块参数都采取了较为合理的初始化策略(不同类型的layer具体采样的哪一种初始化方法的可参考源代码),因此一般不用我们考虑。

Xavier随机初始化

还有一种比较常用的随机初始化方法叫作Xavier随机初始化。 假设某全连接层的输入个数为a,输出个数为b,Xavier随机初始化将使该层中权重参数的每个元素都随机采样于均匀分布

《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶

它的设计主要考虑到,模型参数初始化后,每层输出的方差不该受该层输入个数影响,且每层梯度的方差也不该受该层输出个数影响。

考虑环境因素

协变量偏移

这里我们假设,虽然输入的分布可能随时间而改变,但是标记函数,即条件分布P(y∣x)不会改变。虽然这个问题容易理解,但在实践中也容易忽视。

想想区分猫和狗的一个例子。我们的训练数据使用的是猫和狗的真实的照片,但是在测试时,我们被要求对猫和狗的卡通图片进行分类。

catcatdogdog
《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶

测试数据:

catcatdogdog
《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶

显然,这不太可能奏效。训练集由照片组成,而测试集只包含卡通。在一个看起来与测试集有着本质不同的数据集上进行训练,而不考虑如何适应新的情况,这是不是一个好主意。不幸的是,这是一个非常常见的陷阱。

统计学家称这种协变量变化是因为问题的根源在于特征分布的变化(即协变量的变化)。数学上,我们可以说P(x)改变了,但P(y∣x)保持不变。尽管它的有用性并不局限于此,当我们认为x导致y时,协变量移位通常是正确的假设。

标签偏移

当我们认为导致偏移的是标签P(y)上的边缘分布的变化,但类条件分布是不变的P(x∣y)时,就会出现相反的问题。当我们认为y导致x时,标签偏移是一个合理的假设。例如,通常我们希望根据其表现来预测诊断结果。在这种情况下,我们认为诊断引起的表现,即疾病引起的症状。有时标签偏移和协变量移位假设可以同时成立。例如,当真正的标签函数是确定的和不变的,那么协变量偏移将始终保持,包括如果标签偏移也保持。有趣的是,当我们期望标签偏移和协变量偏移保持时,使用来自标签偏移假设的方法通常是有利的。这是因为这些方法倾向于操作看起来像标签的对象,这(在深度学习中)与处理看起来像输入的对象(在深度学习中)相比相对容易一些。

病因(要预测的诊断结果)导致 症状(观察到的结果)。

训练数据集,数据很少只包含流感p(y)的样本。

而测试数据集有流感p(y)和流感q(y),其中不变的是流感症状p(x|y)。

概念偏移

另一个相关的问题出现在概念转换中,即标签本身的定义发生变化的情况。这听起来很奇怪,毕竟猫就是猫。的确,猫的定义可能不会改变,但我们能不能对软饮料也这么说呢?事实证明,如果我们周游美国,按地理位置转移数据来源,我们会发现,即使是如图所示的这个简单术语的定义也会发生相当大的概念转变。

《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶

图:美国软饮料名称的概念转变美国软饮料名称的概念转变

如果我们要建立一个机器翻译系统,分布P(y∣x)可能因我们的位置而异。这个问题很难发现。另一个可取之处是P(y∣x)通常只是逐渐变化。

三、循环神经网络进阶

GRU

RNN存在的问题:梯度较容易出现衰减或爆炸(BPTT)

⻔控循环神经⽹络:捕捉时间序列中时间步距离较⼤的依赖关系

《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶

《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶

• 重置⻔有助于捕捉时间序列⾥短期的依赖关系;

• 更新⻔有助于捕捉时间序列⾥⻓期的依赖关系。

LSTM

长短期记忆long short-term memory :

遗忘门:控制上一时间步的记忆细胞 输入门:控制当前时间步的输入

输出门:控制从记忆细胞到隐藏状态

记忆细胞:⼀种特殊的隐藏状态的信息的流动

《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶

《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶

深度循环神经网络

《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶

双向循环神经网络

《动手学深度学习》笔记 Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶