一、过拟合、欠拟合及其解决方案
知识点笔记笔记:
模型选择、过拟合和欠拟合:
训练误差和泛化误差:
训练误差 :模型在训练数据集上表现出的误差,
泛化误差 : 模型在任意一个测试数据样本上表现出的误差的期望,常常用测试数据集上的误差来近似。
二者的计算都可使用损失函数(平方损失、交叉熵)
机器学习模型应关注降低泛化误差
模型选择:
验证数据集:
训练数据集、测试数据集以外的一部分数据。简称验证集。
因不可从训练误差估计泛化误差,无法依赖训练数据调参(选择模型)。
K折交叉验证:
将原始训练数据集分割为K个不重合子数据集,之后做K次模型训练和验证。每次用一个子数据集验证模型,同时使用其他子数据集训练模型。最后将这K次训练误差以及验证误差各求平均数。
过拟合和欠拟合:
欠拟合:模型不能得到较低的训练误差。
过拟合:模型的训练误差<<其在测试数据集上的误差
影响因素:
有多种因素,而且实践中要尽力同时掌控欠拟合和过拟合。这有两个重要因素:模型复杂度、训练数据集大小。
模型复杂度:在模型过于简单时,泛化误差和训练误差都很高——欠拟合。在模型过于复杂时,训练误差有了明显降低,但泛化误差会越来越高——过拟合。所以我们需要一个最佳值。如图像。
训练数据集大小:
训练数据集大小是影响着欠拟合和过拟合的一个重要因素。一般情况下,训练数据集中样本过少,会发生过拟合。但泛化误差不会随着训练数据集样本数的增加而增大。故在计算资源许可范围内,尽量将训练数据集调大一些。在模型复杂度较高(如:层数较多的深度学习模型)效果很好。
权重衰减:
方法:正则化通过为模型的损失函数加入惩罚项,从而令得出的模型参数值较小。
权重衰减等价于L2范数正则化,经常用于应对过拟合现象。
L2范数正则化:
在模型原损失函数基础上添加L2范数惩罚项,从而的发哦训练所需最小化的函数。
L2范数惩罚项:模型权重参数每个元素的平方和与一个正的常数的乘积。
丢弃法:
方法:在隐藏层每个单元设置丢弃的概率,如:p。那么有 p 的单元的概率就会被清零,有1-p的概率的单元会被拉伸。
丢弃法不改变输入的期望值。
在测试模型时,为了拿到更加确定性的结果,一般不使用丢弃法。
丢弃率是指某个单元被丢弃(或者说被置为零)的概率。如丢弃率=0.5,表明每个单元都有50%的概率被置零,但各个单元之间是相互独立的。如,16个数(或者说16个单元)按照0.5概率丢弃,会出现16个数都被丢弃(或者16个数都被保留)的情况,概率为0.5^16;当然还有很多种被保留或丢弃的情况组合,最终的统计平均或者说期望是8个。
二、梯度消失、梯度爆炸
梯度消失和梯度爆炸:
深度模型有关数值稳定性的典型问题是梯度消失和梯度爆炸。当神经网络的层数较多时,模型的数值稳定性更容易变差。
层数较多时,梯度的计算也容易出现消失或爆炸。
随机初始化模型参数:
在神经网络中,需要随机初始化参数。因为,神经网络模型在层之间各个单元具有对称性。否则会出错。
若将每个隐藏单元参数都初始化为相等的值,则在正向传播时每个隐藏单元将根据相同的输入计算出相同的值,并传递至输出层。在反向传播中,每个隐藏单元的参数梯度相等。因此,这些参数在使用基于梯度的优化算法迭代后值依然相等。之后的迭代亦是如此。 据此,无论隐藏单元有几个,隐藏层本质上只有一个隐藏单元在发挥作用。所以,通常将神经网络的模型参数,进行随机初始化以避免上述问题。
PyTorch的默认随机初始化:
PyTorch中,nn.Module的模块参数都采取了较合理的初始化策略,一般不用考虑。
Xavier随机初始化:
Xavier随机初始化将使用该全连接层中权重参数的每个元素都随机采样于均匀分布U。模型参数初始化后,每层输出的方差不受该层输入个数影响,且每层梯度方差也不受该层输出个数影响。
考虑环境因素:
协变量偏移:
设虽输入的分布可能随时间而变,但标记函数(条件分布P(y|x))不会改变。但在实践中容易忽视。例如用卡通图片作为训练集训练猫狗的识别分类。在一个看起来与测试集有着本质不同的数据集上进行训练,而不考虑如何适应新的情况,这很糟糕。这种协变量变化是因为问题的根源在于特征分布的变化(协变量的变化)。数学上可以说P(x)变了,但P(y|x) 保持不变。当认为x导致y时,协变量移位通常是正确假设。
标签偏移:
导致标签偏移是标签P(y) 上的边缘分布的变化,但类条件分布是不变的P(x|y)是,会出现相反问题。当我们认为y导致x时,标签偏移是一个合理的假设。 病因(要预测的诊断结果)导致 症状(观察到的结果)。
训练数据集,数据很少且只包含流感p(y)的样本。而测试数据集有流感p(y)和流感q(y),其中不变的时流感症状p(x|y)。这里就认为发生了标签的偏移。
概念偏移:
相同的概念由于地理位置不同,标签本身的定义发生变化的情况。如果我们要建立一个机器翻译系统,分布P(y∣x)可能因我们的位置而异。这个问题很难发现。另一个可取之处是P(y∣x)通常只是逐渐变化。
协变量偏差就是由于协变量时间等因素造成的偏差,也就是最后的预测结果不会发生变化,但是给出的训练样本出现了不同。
标签偏移可以简单理解为测试时出现了训练时没有的标签
三、循环神经网络进阶
LSTM
LSTM和GRU主要是用来解决循环神经网络中梯度消失和梯度爆炸问题提出来,并且还具有保留长的历史信息的功能。它们都是基于门控的RNN,而门控可以简单的理解为对本来没有门控的输入每个元素乘上了一个0-1的权重,进行有选择性的忘记和记忆,这样就可以在有限的记忆容量(我们可以认为参数的最大容量)下记住更加重要的信息,而忘记不重要的信息,虽然GRU没有和LSTM一样的遗忘门和输入门,但是它的重置门和更新门也可以起到选择性的忘记与记忆的功能。
首先回顾一下普通的RNN的结构,如下图所示(台大李宏毅的PPT中的内容),从图中可以看出,普通的RNN的输入部分有上一时间步的隐藏状态
h
h
h和当前时间步的输入
x
x
x两部分组成,而输出部分由当前时间步的隐藏状态h’和输出y组成,具体与参数及激活函数的关系可以从图中直接看出,对普通的RNN结构就先放这里,用于对LSTM和GRU的结构进行对比的
为什么称为短期记忆和长期记忆呢?
参考:https://www.boyuai.com/elites/course/cZu18YmweLv10OeV/video/qC-4p–OiYRK9l3eHKAju#comment-DpJxaWrG-BiKCoH2zpwcx