动手学深度学习:机器翻译及相关技术,注意力机制与seq2seq模型,Transformer
内容摘自伯禹人工智能AI公益课程
初次学习机器翻译相关,把课程的概念题都记录一下。
目录:
1、机器翻译及相关技术
2、注意力机制与seq2seq模型
3、Transformer
1、机器翻译以及相关技术
1、关于Sequence to Sequence模型说法错误的是:
A 训练时decoder每个单元输出得到的单词作为下一个单元的输入单词。
B 预测时decoder每个单元输出得到的单词作为下一个单元的输入单词。
C 预测时decoder单元输出为句子结束符时跳出循环。
D 每个batch训练时encoder和decoder都有固定长度的输入。
选项一:错误,参考Sequence to Sequence训练图示。
选项二:正确,参考Sequence to Sequence预测图示。
选项三:正确,参考Sequence to Sequence预测图示。
选项四:正确,每个batch的输入需要形状一致。
Sequence to Sequence模型
模型:
训练
预测
具体结构:
不属于Encoder-Decoder应用的是
A 机器翻译
B 对话机器人
C 文本分类任务
D 语音识别任务
注:
Encoder-Decoder常应用于输入序列和输出序列的长度是可变的,如选项一二四,而分类问题的输出是固定的类别,不需要使用Encoder-Decoder
2、关于集束搜索(Beam Search)说法错误的是:
A 集束搜索结合了greedy search和维特比算法。
B 集束搜索使用beam size参数来限制在每一步保留下来的可能性词的数量。
C 集束搜索是一种贪心算法。
D 集束搜索得到的是全局最优解。
选项一:正确,参考视频末尾Beam Search。
选项二:正确,参考视频末尾Beam Search。
选项三:正确,集束搜索是维特比算法的贪心形式。
选项四:错误,集束搜索是贪心算法。
Beam Search
简单greedy search:
维特比算法:选择整体分数最高的句子(搜索空间太大)
集束搜索:
3、不属于数据预处理工作的是?
A 得到数据生成器
B 建立词典
C 分词
D 把单词转化为词向量
选项四:错误,单词转化为词向量是模型结构的一部分,词向量层一般作为网络的第一层。
4、数据预处理中分词(Tokenization)的工作是:把字符形式的句子转化为单词组成的列表。
5、机器翻译(MT):将一段文本从一种语言自动翻译为另一种语言,用神经网络解决这个问题通常称为神经机器翻译(NMT)。
主要特征:输出是单词序列而不是单个单词。 输出序列的长度可能与源序列的长度不同。
2、注意力机制与seq2seq模型
1、以下对于注意力机制叙述错误的是:
A 注意力机制借鉴了人类的注意力思维方式,以获得需要重点关注的目标区域。
B 在计算注意力权重时,key 和 query 对应的向量维度需相等。
C 点积注意力层不引入新的模型参数。
D 注意力掩码可以用来解决一组变长序列的编码问题。
在Dot-product Attention中,key与query维度需要一致,在MLP Attention中则不需要。
2、以下对于加入Attention机制的seq2seq模型的陈述正确的是:
A seq2seq模型不可以生成无穷长的序列。
B 每个时间步,解码器输入的语境向量(context vector)相同
C 解码器RNN仍由编码器最后一个时间步的隐藏状态初始化。
D 引入注意力机制可以加速模型训练。
选项1:seq2seq模型的预测需人为设定终止条件,设定最长序列长度或者输出[EOS]结束符号,若不加以限制则可能生成无穷长度序列
选项2:不同,每个位置都会计算各自的attention输出
选项3:正确
选项4:注意力机制本身有高效的并行性,但引入注意力并不能改变seq2seq内部RNN的迭代机制,因此无法加速。
3、关于点积注意力机制描述错误的是:
A 高维张量的矩阵乘法可用于并行计算多个位置的注意力分数。
B 计算点积后除以
d
\sqrt d
d以减轻向量维度对注意力权重的影响。
C 可视化注意力权重的二维矩阵有助于分析序列内部的依赖关系。
D 对于两个有效长度不同的输入序列,若两组键值对完全相同,那么对于同一个query的输出一定相同。
有效长度不同导致 Attention Mask 不同,屏蔽掉无效位置后进行attention,会导致不同的输出。
3、Transformer
3.1 Transformer
之前,我们已经介绍了主流的神经网络架构如卷积神经网络(CNNs)和循环神经网络(RNNs)。让我们进行一些回顾:
- CNNs 易于并行化,却不适合捕捉变长序列内的依赖关系。
- RNNs 适合捕捉长距离变长序列的依赖,但是却难以实现并行化处理序列。
为了整合CNN和RNN的优势,[Vaswani et al., 2017] 创新性地使用注意力机制设计了Transformer模型。该模型利用attention机制实现了并行化捕捉序列依赖,并且同时处理序列的每个位置的tokens,上述优势使得Transformer模型在性能优异的同时大大减少了训练时间。
图10.3.1展示了Transformer模型的架构,与9.7节的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:由于自注意力层并没有区分元素的顺序,所以一个位置编码层被用于向序列元素里添加位置信息。
F i g . 10.3.1 T r a n s f o r m e r 架 构 . Fig.10.3.1\ Transformer 架构. Fig.10.3.1 Transformer架构.
3.2 多头注意力层
在我们讨论多头注意力层之前,先来迅速理解以下自注意力(self-attention)的结构。自注意力模型是一个正规的注意力模型,序列的每一个元素对应的key,value,query是完全一致的。如图10.3.2 自注意力输出了一个与输入长度相同的表征序列,与循环神经网络相比,自注意力对每个元素输出的计算是并行的,所以我们可以高效的实现这个模块。
F i g . 10.3.2 自 注 意 力 结 构 Fig.10.3.2\ 自注意力结构 Fig.10.3.2 自注意力结构
多头注意力层包含 h h h个并行的自注意力层,每一个这种层被成为一个head。对每个头来说,在进行注意力计算之前,我们会将query、key和value用三个现行层进行映射,这 h h h个注意力头的输出将会被拼接之后输入最后一个线性层进行整合。
F i g . 10.3.3 多 头 注 意 力 Fig.10.3.3\ 多头注意力 Fig.10.3.3 多头注意力
假设query,key和value的维度分别是 d q d_q dq、 d k d_k dk和 d v d_v dv。那么对于每一个头 i = 1 , … , h i=1,\ldots,h i=1,…,h,我们可以训练相应的模型权重 W q ( i ) ∈ R p q × d q W_q^{(i)} \in \mathbb{R}^{p_q\times d_q} Wq(i)∈Rpq×dq、 W k ( i ) ∈ R p k × d k W_k^{(i)} \in \mathbb{R}^{p_k\times d_k} Wk(i)∈Rpk×dk和 W v ( i ) ∈ R p v × d v W_v^{(i)} \in \mathbb{R}^{p_v\times d_v} Wv(i)∈Rpv×dv,以得到每个头的输出:
o ( i ) = a t t e n t i o n ( W q ( i ) q , W k ( i ) k , W v ( i ) v ) o^{(i)} = attention(W_q^{(i)}q, W_k^{(i)}k, W_v^{(i)}v) o(i)=attention(Wq(i)q,Wk(i)k,Wv(i)v)
这里的attention可以是任意的attention function,比如前一节介绍的dot-product attention以及MLP attention。之后我们将所有head对应的输出拼接起来,送入最后一个线性层进行整合,这个层的权重可以表示为 W o ∈ R d 0 × h p v W_o\in \mathbb{R}^{d_0 \times hp_v} Wo∈Rd0×hpv
o = W o [ o ( 1 ) , … , o ( h ) ] o = W_o[o^{(1)}, \ldots, o^{(h)}] o=Wo[o(1),…,o(h)]
接下来我们就可以来实现多头注意力了,假设我们有h个头,隐藏层权重 h i d d e n _ s i z e = p q = p k = p v hidden\_size = p_q = p_k = p_v hidden_size=pq=pk=pv 与query,key,value的维度一致。除此之外,因为多头注意力层保持输入与输出张量的维度不变,所以输出feature的维度也设置为 d 0 = h i d d e n _ s i z e d_0 = hidden\_size d0=hidden_size。
3.3 基于位置的前馈网络
Transformer 模块另一个非常重要的部分就是基于位置的前馈网络(FFN),它接受一个形状为(batch_size,seq_length, feature_size)的三维张量。Position-wise FFN由两个全连接层组成,他们作用在最后一维上。因为序列的每个位置的状态都会被单独地更新,所以我们称他为position-wise,这等效于一个1x1的卷积。
3.4 Add and Norm
除了上面两个模块之外,Transformer还有一个重要的相加归一化层,它可以平滑地整合输入和其他层的输出,因此我们在每个多头注意力层和FFN层后面都添加一个含残差连接的Layer Norm层。这里 Layer Norm 与7.5小节的Batch Norm很相似,唯一的区别在于Batch Norm是对于batch size这个维度进行计算均值和方差的,而Layer Norm则是对最后一维进行计算。层归一化可以防止层内的数值变化过大,从而有利于加快训练速度并且提高泛化性能。 (ref)
3.5 位置编码
与循环神经网络不同,无论是多头注意力网络还是前馈神经网络都是独立地对每个位置的元素进行更新,这种特性帮助我们实现了高效的并行,却丢失了重要的序列顺序的信息。为了更好的捕捉序列信息,Transformer模型引入了位置编码去保持输入序列元素的位置。
假设输入序列的嵌入表示 X ∈ R l × d X\in \mathbb{R}^{l\times d} X∈Rl×d, 序列长度为 l l l嵌入向量维度为 d d d,则其位置编码为 P ∈ R l × d P \in \mathbb{R}^{l\times d} P∈Rl×d ,输出的向量就是二者相加 X + P X + P X+P。
位置编码是一个二维的矩阵,i对应着序列中的顺序,j对应其embedding vector内部的维度索引。我们可以通过以下等式计算位置编码:
P i , 2 j = s i n ( i / 1000 0 2 j / d ) P_{i,2j} = sin(i/10000^{2j/d}) Pi,2j=sin(i/100002j/d)
P i , 2 j + 1 = c o s ( i / 1000 0 2 j / d ) P_{i,2j+1} = cos(i/10000^{2j/d}) Pi,2j+1=cos(i/100002j/d)
f o r i = 0 , … , l − 1 a n d j = 0 , … , ⌊ ( d − 1 ) / 2 ⌋ for\ i=0,\ldots, l-1\ and\ j=0,\ldots,\lfloor (d-1)/2 \rfloor for i=0,…,l−1 and j=0,…,⌊(d−1)/2⌋
F i g . 10.3.4 位 置 编 码 Fig. 10.3.4\ 位置编码 Fig.10.3.4 位置编码
3.6 编码器
已经有了组成Transformer的各个模块,现在我们可以开始搭建了!编码器包含一个多头注意力层,一个position-wise FFN,和两个 Add and Norm层。对于attention模型以及FFN模型,我们的输出维度都是与embedding维度一致的,这也是由于残差连接天生的特性导致的,因为我们要将前一层的输出与原始输入相加并归一化。
3.7 解码器
Transformer 模型的解码器与编码器结构类似,然而,除了之前介绍的几个模块之外,编码器部分有另一个子模块。该模块也是多头注意力层,接受编码器的输出作为key和value,decoder的状态作为query。与编码器部分相类似,解码器同样是使用了add and norm机制,用残差和层归一化将各个子层的输出相连。
仔细来讲,在第t个时间步,当前输入 x t x_t xt是query,那么self attention接受了第t步以及前t-1步的所有输入 x 1 , … , x t − 1 x_1,\ldots, x_{t-1} x1,…,xt−1。在训练时,由于第t位置的输入可以观测到全部的序列,这与预测阶段的情形项矛盾,所以我们要通过将第t个时间步所对应的可观测长度设置为t,以消除不需要看到的未来的信息。
1、关于Transformer描述正确的是:
A 在训练和预测过程中,解码器部分均只需进行一次前向传播。
B Transformer 内部的注意力模块均为自注意力模块。
C 解码器部分在预测过程中需要使用 Attention Mask。
D 自注意力模块理论上可以捕捉任意距离的依赖关系。
选项1:训练过程1次,预测过程要进行句子长度次
选项2:Decoder 部分的第二个注意力层不是自注意力,key-value来自编码器而query来自解码器
选项3:不需要
选项4:正确,因为自注意力会计算句子内任意两个位置的注意力权重
2、在Transformer模型中,注意力头数为h,嵌入向量和隐藏状态维度均为d,那么一个多头注意力层所含的参数量是:
4
h
d
2
4hd^2
4hd2
(
3
h
+
1
)
d
2
(3h+1)d^2
(3h+1)d2
4
d
2
4d^2
4d2
3
h
d
2
3hd^2
3hd2
参考MultiHeadAttention模块的定义。
h
h
h个注意力头中,每个的参数量为
3
d
2
3d^2
3d2,最后的输出层形状为
h
d
∗
d
hd*d
hd∗d,所以参数量共为
4
h
d
2
4hd^2
4hd2
3、下列对于层归一化叙述错误的是:
层归一化有利于加快收敛,减少训练时间成本
层归一化对一个中间层的所有神经元进行归一化
层归一化对每个神经元的输入数据以mini-batch为单位进行汇总
层归一化的效果不会受到batch大小的影响
批归一化(Batch Normalization)才是对每个神经元的输入数据以mini-batch为单位进行汇总