模型选择、过拟合和欠拟合
训练误差和泛化误差
训练误差(training error)指模型在训练数据集上表现出的误差,泛化误差(generalization error)指模型在任意一个测试数据样本上表现出的误差的期望,并常常通过测试数据集上的误差来近似。
机器学习模型应关注降低泛化误差。
模型选择
验证数据集
从严格意义上讲,测试集只能在所有超参数和模型参数选定后使用一次。 不可以使用测试数据选择模型,如调参。 由于无法从训练误差估计泛化误差,因此也不应只依赖训练数据选择模型。鉴于此,我们可以预留一部分在训练数据集和测试数据集以外的数据来进行模型选择。这部分数据被称为验证数据集,简称验证集(validation set)。
K折交叉验证
验证数据集不参与模型训练,当训练数据不够用时,使用K折交叉验证(K-fold cross-validation)。在K折交叉验证中,我们把原始训练数据集分割成K个不重合的子数据集,然后我们做K次模型训练和验证。每一次,我们使用一个子数据集验证模型,并使用其他K-1个子数据集来训练模型。在这K次训练和验证中,每次用来验证模型的子数据集都不同。最后,我们对这K次训练误差和验证误差分别求平均。
过拟合和欠拟合
一类是模型无法得到较低的训练误差,我们将这一现象称作欠拟合(underfitting);
另一类是模型的训练误差远小于它在测试数据集上的误差,我们称该现象为过拟合(overfitting)。 在实践中,我们要尽可能同时应对欠拟合和过拟合。虽然有很多因素可能导致这两种拟合问题,在这里我们重点讨论两个因素:模型复杂度和训练数据集大小。
欠拟合现象:模型无法达到一个较低的误差
过拟合现象:训练误差较低但是泛化误差依然较高,二者相差较大。
梯度消失、梯度爆炸
深度模型有关数值稳定性的典型问题是消失(vanishing)和爆炸(explosion)。
当神经网络的层数较多时,模型的数值稳定性容易变差。
渐变消失会导致模型训练困难,对参数的优化步长过小,收效甚微,模型收敛十分缓慢。
渐变爆炸会导致模型训练困难,对参数的优化步长过大,难以收敛。
激活函数使用sigmoid或者tanh可以缓解梯度消失。
在深层网络中避免选择sigmoid和tanh激活函数,原因是这两个激活函数会把元素转换到[0, 1]和[-1, 1]之间,会加剧梯度消失的现象。
协变量偏移
这里我们假设,虽然输入的分布可能随时间而改变,但是标记函数,即条件分布P(y∣x)不会改变。虽然这个问题容易理解,但在实践中也容易忽视。
例如:
一个在冬季部署的物品推荐系统在夏季的物品推荐列表中出现了圣诞礼物。
可以理解为在夏季的物品推荐系统与冬季比例,时间或者说季节发生了变化,导致夏季推荐圣诞礼物的不合理的现象,这个现象是由于协变量时间发生了变化造成的。
标签偏移
当我们认为导致偏移的是标签P(y)上的边缘分布的变化,但类条件分布是不变的P(x∣y)时,就会出现相反的问题。当我们认为y导致x时,标签偏移是一个合理的假设。
概念偏移
另一个相关的问题出现在概念转换中,即标签本身的定义发生变化的情况。
如果数据量足够的情况下,确保训练数据集和测试集中的数据取自同一个数据集,可以防止协变量转换和标签替换是正确的。如果数据量很少,少到测试集中存在训练集中未包含的标签,就会发生标签替换。
机器翻译和数据集
机器翻译(MT):将一段文本从一种语言自动翻译为另一种语言,用神经网络解决这个问题通常称为神经机器翻译(NMT)。 主要特征:输出是单词序列而不是单个单词。 输出序列的长度可能与源序列的长度不同。
数据预处理中分词(Tokenization)的工作是?
把字符形式的句子转化为单词组成的列表。
数据预处理工作的是?(得到数据生成器,建立词典,分词)
单词转化为词向量是模型结构的一部分,词向量层一般作为网络的第一层。
空格不被认为是特殊字符,在该项目里,空格在预处理时被去除。
集束搜索结合了greedy search和维特比算法。
集束搜索使用beamsize参数来限制在每一步保留下来的可能性词的数量。
集束搜索是一种贪心算法。
集束搜索得到的不是全局最优解。Encoder-Decoder常应用于输入序列和输出序列的长度是可变的,如选项一二四,而分类问题的输出是固定的类别,不需要使用Encoder-Decoder。
Sequence to Sequence模型说法是:(A)
训练时decoder每个单元输出得到的单词作为下一个单元的输入单词。
预测时decoder每个单元输出得到的单词作为下一个单元的输入单词。
预测时decoder单元输出为句子结束符时跳出循环。
每个batch训练时encoder和decoder都有固定长度的输入。
注意力机制
在“编码器—解码器(seq2seq)”⼀节⾥,解码器在各个时间步依赖相同的背景变量(context vector)来获取输⼊序列信息。当编码器为循环神经⽹络时,背景变量来⾃它最终时间步的隐藏状态。将源序列输入信息以循环单位状态编码,然后将其传递给解码器以生成目标序列。然而这种结构存在着问题,尤其是RNN机制实际中存在长程梯度消失的问题,对于较长的句子,我们很难寄希望于将输入的序列转化为定长的向量而保存所有的有效信息,所以随着所需翻译句子的长度的增加,这种结构的效果会显著下降。
Attention 是一种通用的带权池化方法,输入由两部分构成:询问(query)和键值对(key-value pairs)
以下对于注意力机制叙述错误的是:(B)
A注意力机制借鉴了人类的注意力思维方式,以获得需要重点关注的目标区域。
B在计算注意力权重时,key 和 query 对应的向量维度需相等。
C点积注意力层不引入新的模型参数。
D 注意力掩码可以用来解决一组变长序列的编码问题。
答案解释 :在Dot-product Attention中,key与query维度需要一致,在MLP Attention中则不需要。
以下对于加入Attention机制的seq2seq模型的陈述正确的是:(C)
Aseq2seq模型不可以生成无穷长的序列。(seq2seq模型的预测需人为设定终止条件,设定最长序列长度或者输出[EOS]结束符号,若不加以限制则可能生成无穷长度序列)
B每个时间步,解码器输入的语境向量(context vector)相同(不同,每个位置都会计算各自的attention输出)
C解码器RNN仍由编码器最后一个时间步的隐藏状态初始化。
D引入注意力机制可以加速模型训练。(注意力机制本身有高效的并行性,但引入注意力并不能改变seq2seq内部RNN的迭代机制,因此无法加速。)
关于点积注意力机制描述错误的是:(D)
A 高维张量的矩阵乘法可用于并行计算多个位置的注意力分数。
B计算点积后除以\sqrt{d} d 以减轻向量维度对注意力权重的影响。
C可视化注意力权重的二维矩阵有助于分析序列内部的依赖关系。
D对于两个有效长度不同的输入序列,若两组键值对完全相同,那么对于同一个query的输出一定相同。( 有效长度不同导致 Attention Mask不同,屏蔽掉无效位置后进行attention,会导致不同的输出。参考代码Dot-Product Attention的测试部分。)
Transformer
CNNs 易于并行化,却不适合捕捉变长序列内的依赖关系。
RNNs 适合捕捉长距离变长序列的依赖,但是却难以实现并行化处理序列。
为了整合CNN和RNN的优势,[Vaswani et al., 2017] 创新性地使用注意力机制设计了Transformer模型。该模型利用attention机制实现了并行化捕捉序列依赖,并且同时处理序列的每个位置的tokens,上述优势使得Transformer模型在性能优异的同时大大减少了训练时间。
图10.3.1展示了Transformer模型的架构,与seq2seq模型相似,Transformer同样基于编码器-解码器架构,其区别主要在于以下三点:
Transformer blocks:将seq2seq模型中的循环网络替换为了Transformer Blocks,该模块包含一个多头注意力层(Multi-head Attention Layers)以及两个position-wise feed-forward networks(FFN)。对于解码器来说,另一个多头注意力层被用于接受编码器的隐藏状态。
Add and norm:多头注意力层和前馈网络的输出被送到两个“add and norm”层进行处理,该层包含残差结构以及层归一化。
Position encoding:由于自注意力层并没有区分元素的顺序,所以一个位置编码层被用于向序列元素里添加位置信息。
下列关于层归一化叙述错误的是:©
A 层归一化有利于加快收敛,减少训练时间成本
B 层归一化对一个中间层的所有神经元进行归一化
C 层归一化对每个神经元的输入数据以mini-batch为单位进行汇总 (批归一化(Batch Normalization)才是对每个神经元的输入数据以mini-batch为单位进行汇总)
D 层归一化的效果不会受到批量大小的影响
在Transformer模型中,注意力头数为h,嵌入向量和隐藏状态维度均为d,那么一个多头注意力层所含的参数量是( 4 h d 2 \ 4h d^{2} 4hd2):h个注意力头中,每个的参数 3 d 2 \ 3 d^{2} 3d2,最后的输出层形状为 h d ∗ d \ hd*d hd∗d,,所以参数量共为 4 h d 2 \ 4h d^{2} 4hd2。
关于Transformer描述正确的是:(D)
A 在训练和预测过程中,解码器部分均只需进行一次前向传播。(训练过程1次,预测过程要进行句子长度次)
B Transformer 内部的注意力模块均为自注意力模块。(Decoder 部分的第二个注意力层不是自注意力,key-value来自编码器而query来自解码器)
C 解码器部分在预测过程中需要使用 Attention Mask。(不需要)
D 自注意力模块理论上可以捕捉任意距离的依赖关系。(因为自注意力会计算句子内任意两个位置的注意力权重)