Task03:过拟合、欠拟合及其解决方案;梯度消失、梯度爆炸;循环神经网络进阶(1天)
Task04:机器翻译及相关技术;注意力机制与Seq2seq模型;Transformer(1天)
Task05:卷积神经网络基础;leNet;卷积神经网络进阶(1天)
因为我的方向是自然语言处理所以接下来重点记录下任务3和任务4
Task03:
过拟合与欠拟合
训练数据集,模型复杂度和误差之间的关系
导致原因:训练数据不足,模型太过于复杂/简单。
解决办法:加数据量,权重衰减,丢弃法。
权重衰减
权重衰减等价于 范数正则化(regularization)。正则化通过为模型损失函数添加惩罚项使学出的模型参数值较小,是应对过拟合的常用手段。
丢弃法:
丢弃法除了可以防止过拟合,还能让模型学到多样的数据,提升模型性能,加快收敛速度。
让我们对之前多层感知机的神经网络中的隐藏层使用丢弃法,一种可能的结果如图所示,其中h2和h5被清零。这时输出值的计算不再依赖h2和h5,在反向传播时,与这两个隐藏单元相关的权重的梯度均为0。由于在训练中隐藏层神经元的丢弃是随机的,即h1...h5都有可能被清零,输出层的计算无法过度依赖h1...h5中的任一个,从而在训练模型时起到正则化的作用,并可以用来应对过拟合。在测试模型时,我们为了拿到更加确定性的结果,一般不使用丢弃法
梯度消失和爆炸
造成的原因:Sigmoid激活函数饱和区,网络层数过多,梯度呈指数级变化
解决的办法:好的参数初始化,非饱和的激活函数(Relu),批量规范化,LSTM,梯度阶段。
考虑环境因素
协变量偏移
这里我们假设,虽然输入的分布可能随时间而改变,但是标记函数,即条件分布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)通常只是逐渐变化。
循环神经网络进阶
GRU
RNN存在的问题:梯度较容易出现衰减或爆炸(BPTT)
⻔控循环神经⽹络:捕捉时间序列中时间步距离较⼤的依赖关系
• 重置⻔有助于捕捉时间序列⾥短期的依赖关系;
• 更新⻔有助于捕捉时间序列⾥⻓期的依赖关系。
Pytorch简洁实现:
gru_layer = nn.GRU(input_size=vocab_size, hidden_size=num_hiddens)
LSTM
长短期记忆long short-term memory :
遗忘门:控制上一时间步的记忆细胞 输入门:控制当前时间步的输入
输出门:控制从记忆细胞到隐藏状态
记忆细胞:⼀种特殊的隐藏状态的信息的流动
pytorch简洁实现:
lstm_layer = nn.LSTM(input_size=vocab_size, hidden_size=num_hiddens)
深度循环神经网络
层数变深捕捉更多的信息,ELMO论文发现,不同层具有不同的信息,可以将不同层的隐藏层权值相加。
双向循环神经网络
为了捕捉上下文的信息,出现双向循环神经网络
Task4
机器翻译相关技术
端到端的模型
encoder:输入到隐藏状态
decoder:隐藏状态到输出
Sequence to Sequence模型
Beam Search
简单greedy search:
维特比算法:选择整体分数最高的句子(搜索空间太大) 集束搜索:
bleu:
由于各N-gram统计量的精度随着阶数的升高而呈指数形式递减,所以为了平衡各阶统计量的作用,对其采用几何平均形式求平均值然后加权,再乘以长度惩罚因子,得到最后的评价公式:
BLEU的原型系统采用的是均匀加权,即Wn=1/N 。N的上限取值为4,即最多只统计4-gram的精度。
注意力机制和Seq2seq模型
可以把注意力机制看成一种池化方法,他将解码层当前时间步的前一步的隐藏层对于encoder每一个的隐藏层求注意力得分,这个注意力得分是隐藏层的加权时的权值,然后把加权后的隐藏层连接当前解码器时间步的词向量作为输入。注意力的求法有很多种。
Transformer
最新的GPT,BERT都是基于transformer的解码器/编码器构造的,使NLP各项性能大大提升。
在之前的章节中,我们已经介绍了主流的神经网络架构如卷积神经网络(CNNs)和循环神经网络(RNNs)。让我们进行一些回顾:
- CNNs 易于并行化,却不适合捕捉变长序列内的依赖关系。
- RNNs 适合捕捉长距离变长序列的依赖,但是却难以实现并行化处理序列。
为了整合CNN和RNN的优势,[Vaswani et al., 2017] 创新性地使用注意力机制设计了Transformer模型。该模型利用attention机制实现了并行化捕捉序列依赖,并且同时处理序列的每个位置的tokens,上述优势使得Transformer模型在性能优异的同时大大减少了训练时间。
- Transformer blocks:将seq2seq模型重的循环网络替换为了Transformer Blocks,该模块包含一个多头注意力层(Multi-head Attention Layers)以及两个position-wise feed-forward networks(FFN)。对于解码器来说,另一个多头注意力层被用于接受编码器的隐藏状态。
- Add and norm:多头注意力层和前馈网络的输出被送到两个“add and norm”层进行处理,该层包含残差结构以及层归一化。
-
Position encoding:由于自注意力层并没有区分元素的顺序,所以一个位置编码层被用于向序列元素里添加位置信息。
因为之前一直使用transformer做很多任务,比较熟悉,所以这里不做过多的记录。