【第九周】李宏毅机器学习笔记07:Transformer

摘要

这周主要了解了 transformer 中的 encoder 和 decoder 的结构和实现原理。在 decoder 中学习了两种解码的方法,一种是 AT (Autoregressive Transformer) ,另一种是NAT(Non-Autoregressive Transformer)。其中,AT生成序列质量高但速度较慢,而NAT则以牺牲部分质量换取更快的生成速度。最后还学习了如何训练 transformer 以及训练中的小 tips。

Abstract

This week, I mainly learned about the structure and implementation principles of the encoder and decoder in Transformers. In the decoder, two decoding methods were studied: one is AT (Autoregressive Transformer), and the other is NAT (Non-Autoregressive Transformer). AT generates high-quality sequences but is slower, while NAT sacrifices some quality for faster generation speed. Finally, I also learned how to train Transformers and some tips for training.

1.Transformer

1.1.Seq2seq

Transformer 是一个seq2seq的model。Seq2seq指的是input是一个序列,输出也是一个序列,输出的长度是由机器自己的来决定的。

在这里插入图片描述

Seq2seq任务有以下几种:

  • 1.语音识别:将一段声音讯号转换为文字
  • 2.机器翻译:将一种文字转换为另一种文字
  • 3.语音翻译:将声音讯号转换为文字(相当于1+2)

在这里插入图片描述

Seq2seq 模型的架构通常如上图,输入序列先经过一个 encoder 进行编码,再经过 decoder 进行解码,最后输出 output sequence 。

1.2.Encoder

在这里插入图片描述

Encoder 的任务就是将一组向量序列经过处理转化为另一组向量序列。Encoder 模型可以使用 RNN 或者 CNN,在 transformer 里使用的是 Self-attention 模型。

在这里插入图片描述

Encoder 内部的结构如上图所示,其中一组向量输入一个 block 转换为一组新的向量,然后再把这组新向量输入一个 block 转换为一组新向量,按这个流程循环进行。其中的一个 block 并不代表一个 layer,因为一个block 里面完成了很多个 layer 实现的任务。Block 的结构如上图有右半部分所示,向量组会输入到一个 self-attention 层里产生一组新的向量,这组向量再分别输入 FC 层后再把向量组输出。

在这里插入图片描述

对于 transformer 里的 block 结构更加复杂。除了把向量序列输入 self-attention 层外,还需要实现一次 residual connection 的操作。也就是说把通过 self-attention 层的向量和原向量相加起来,再把这个向量经过一次 layer normalization,也就是把向量进行一次均值归一化,最后再输出到 F C层。向量输入到 FC 层也和之前一样做类似的处理。

为什么要使用 residual connection (残差连接)呢?

Residual connection(残差连接)是深度学习中的一种技术,主要用于解决深层神经网络训练过程中的梯度消失问题和性能退化问题。这种连接方式首次在2015年由何凯明等人提出的ResNet(残差网络)架构中被广泛应用。 在传统的深层神经网络中,随着网络层数的增加,训练误差可能会出现饱和甚至上升的情况,这与直观上认为更深的网络应该有更好的表现相矛盾。为了解决这个问题,残差连接被引入到网络结构中。 残差连接的基本思想是在网络层之间添加直接的连接,使得信息能够绕过一个或多个层直接传递到后面的层。具体来说,在两个层之间加入一个跳跃连接(skip connection),这样可以将输入直接加到几层之后的输出上。数学上,如果 F ( x ) F(x) F(x)表示几个层的变换结果,则残差块的输出可以表示为 x + F ( x ) x +F(x) x+F(x),其中 x x x 是残差块的输入。 这种设计允许梯度在反向传播过程中可以直接通过残差连接流回更早的层,从而减轻了梯度消失的问题,并且使得网络更容易优化。此外,残差连接也使得模型能够在不损害性能的情况下增加更多的层,从而提高了模型的表达能力。

1.3.Decoder

1.3.1.Autoregressive

在这里插入图片描述

以语音识别为例,声音序列经过 encoder 之后会产生一组新的向量,这组新的向量会输入到 decoder 之中,此时会再往 decoder 里输入一个 BEGIN 向量,代表着任务的开始。这个 BEGIN 向量是使用 one-hat 编码的。

在这里插入图片描述

BEGIN 向量输入之后,decoder 会输出一个通过softmax函数的向量,这个向量的行数于中文字符数相等,每行还有一个代表概率的数值,数值最大的字符就是识别出来的汉字。

在这里插入图片描述

经过 decoder 输出的向量会在下一轮成为 decoder 的输入,decoder 同时考虑 encoder 传来的向量组、BEGIN 向量和上一次 decoder 产生的输出来产生一个新的向量,这个流程将以此循环往复。

在这里插入图片描述

在transformer中,decoder 的结构如上图右半部分所示。

在这里插入图片描述

对比encoder和decoder,我们发现decoder其实与encoder类似,只是再多了一层 Add & Norm 和 Mutil-Head Attention 而已。从外还有一个不同就是输入到 decoder 中的信息首先经过一个 Masked 的Mutil-Head Attention 层,而 encoder 中就不需要。

在这里插入图片描述

对于普通的 Self-attention 来说, b 1 b^1 b1 b 2 b^2 b2 b 3 b^3 b3 b 4 b^4 b4都会依赖于 a 1 a^1 a1 a 2 a^2 a2 a 3 a^3 a3 a 4 a^4 a4的输入。

在这里插入图片描述

而 Masked Self-attention 的输出向量仅依赖于当前的输入向量以及先前的输入向量,不会考虑之后的输入向量。

在这里插入图片描述

例如要输出 b 2 b^2 b2,我们仅需要用 q 2 q^2 q2 k 2 k^2 k2 去生成 a 2 , 2 ′ a'_{2,2} a2,2,再用 q 2 q^2 q2 k 1 k^1 k1 去生成 a 2 , 1 ′ a'_{2,1} a2,1,最后再生成 b 2 b^2 b2。其实这一切也非常符合直觉,因为通过 decoder 输出的文字是一个一个输出的,所以将输出之后的文字再输入到 decoder 也是一个接一个输入进去的,自然无法考虑到之后输入的内容。

那么 decoder 如何知道输出文字的个数呢?

在这里插入图片描述

我们需要再准备一个类似 BEGIN 的符号向量 END,当 decoder 接收人到 encoder 传来的向量组以及 BEGIN、机、器、学和习后,就会自动输出一个 END,此时说明整个过程已经完成了。

1.3.2.Non-autoregressive(NAT)

在这里插入图片描述

和 AT 不同,NAT 不需要把原来输出的向量重新输入到自身,而是可以平行地直接生成一句话。NAT 要做的就是接受多少个 BEGIN 就输出多少个向量。当向量中出现了 END 时代表这句话的结束。不过通常来说 NAT 的性能表现是不如 AT 的。

1.4.Encoder和Decoder间的信息传递

在这里插入图片描述

红圈圈起来的叫做 Cross attention,它是连接 encoder 和 decoder 的桥梁,其中有两个输入来自 encoder,一个输入来自 decoder。

在这里插入图片描述

Cross attention 内部的结构如上图所示,输入向量 BEGIN 经过了 Masked Self-attention 之后产生的向量需要乘上一个矩阵进行变换之后生成 query 向量,再把这个向量 q 和 encoder 产生的各个 key 向量进行计算,最后才会生成最终的结果。

1.5.Training

在这里插入图片描述

正确答案的 label 应该是以 one-hat 的形式来表示的,我们通过模型求解出来的向量是一个基于概率的分布,为了得到最佳的答案,我们需要把求出来的向量和正确答案的 label 做一个 cross entropy 计算,使得所有的交叉熵总和达到最小值就是我们想到的结果。这个问题其实很像分类问题。

在这里插入图片描述

训练的时候我们会给 decoder 输入正确答案,这个操作我们叫做 Teacher Forcing。

1.6.Tips

1.6.1.Copy Mechanism

在这里插入图片描述

对于某些任务来说,有些输出并不需要去创造输出出来,也许只需要去输入复制出来。如上图聊天机器人的例子,机器并不需要去学习“库洛洛”是什么,只需要学习看到“我是某某某”就把后面的“某某某”复述一遍。

在这里插入图片描述

又如摘要的生成,也许需要机器学会从原文复制部分信息。

在这里插入图片描述

Guided Attention 指的是我们需要对机器的 attention 有所限制。比如在语音合成任务中,机器应该是要先看左边的词汇产生声音,再看中间,最后看后面的词汇。因此 Attention scores 应该如上图的上半部分所示。如果机器的 attention scores 如图的下半部分所示,说明机器的注意力没有放到正确的地方,生成出来的内容就可能有误。

1.6.3.Beam Search

在这里插入图片描述

Beam Search(束搜索)是一种用于序列生成任务的解码策略,如机器翻译、文本生成等。它被设计用来找到最有可能的输出序列,而不是仅仅依赖于每一步的最大概率选择,后者被称为 Greedy Search(贪婪搜索)。如上图所示,红色线路虽然每一步都走概率最大的部分,但是总体的得分并没有绿色线路高。

总结

“Transformer” 是一种在自然语言处理 (NLP) 领域中使用的深度学习模型,它的关键创新之一是引入了自注意力机制(self-attention mechanism),这使得模型能够在处理输入序列时考虑整个序列中的所有元素及其相互关系,而不仅仅是依赖于递归或卷积操作。这种机制使得 Transformer 能够并行处理序列中的各个位置,从而显著提高了训练效率。自注意力机制部分前几周已经学过了,这周主要了解的是 seq2seq 任务中 encoder 和 decoder 的结构和原理。Encoder 的作用是将输入序列转换成一个固定长度的向量表示,这个过程通常称为“编码”。在自然语言处理中,输入序列可以是一句话或一个句子片段,encoder 会将这些文本信息转换成一个或多个向量,这些向量捕捉了输入序列的关键特征和语义信息。Decoder 的作用是将 encoder 产生的向量表示转换回序列形式的数据。在典型的 seq2seq 模型中,decoder 接收encoder 的输出,并生成目标序列,如另一种语言的翻译。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值