transformer(李宏毅老师系列)

Moliay 2024-08-17 17:31:10 阅读 77

自学参考:

Transformer:Attention Is All You Need

Transformer论文逐段精读

视频课

课件+资料

笔记

一、引入

seq2seq:输入一个序列的向量作为input,output的长度由机器自己决定seq2seq model应用:

语音辨识

输入是声音讯号的一串vector

输出是语音辨识结果,即声音讯号对应的文字,输出长度由机器自行决定

在这里插入图片描述

机器翻译

输入一种语言的句子,长度为N

输出另一种语言的句子,长度为N’,N和N’之间的关系由机器自行决定

在这里插入图片描述

语音翻译

输入一种语言的语音

输出另一种语言的文字

不能用以上两种简单拼接,因为很多语言并没有对应的文字(例如一些方言)

在这里插入图片描述

语音合成Text-to-Speech (TTS) Synthesis

输入文字

输出声音讯号

在这里插入图片描述

聊天机器人Chatbot

输入和输出都是文字,利用人的对话进行train

在这里插入图片描述

问答系统Question Answering (QA)

输入和输出都是文字序列

许多nlp任务,都可以解读为QA任务,例如翻译、摘要、情感分析。而QA问题就可以用seq2seq model来解决

在这里插入图片描述

语法分析Syntactic Parsing

树状结构也可以视为一个sequence,从这个角度切入语法分析问题也可以视为:

输入一个语句

输出一个代表语法分析树的序列

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

多标签分类multi-label classification

multi-class classification:从多个class里为样本选某一个classmulti-label classification:同一个样本,可属于多个class

在这里插入图片描述

实体检测Object Detection

在这里插入图片描述

二、 seq2seq’s model =Encoder + Decoder

在这里插入图片描述

encoder

输入一排向量(序列)

输出另一排同样长度的向量(序列)

可使用self-attention、RNN、CNN

在这里插入图片描述

进一步分析,每个block都包含若干层(例如下图中是self-attention&FC)

每个block输入一排向量,输出一排向量

在这里插入图片描述

在transformer中:

在这里插入图片描述

在送入block前,要先进行positional encoding

在这里插入图片描述

每个block中的架构为

multi self-attentionresidual connection:把这个vector加上其input作为output(残差网络)layer normalization:对同一个feature,同一个example,不同的dimension,计算mean和standard deviation

区别:batch normalization:是对不同example,不同feature的同一个dimension,计算mean跟standard deviation

FC network也有residual架构把residual结果再做一次layer normalization得到的输出才是residual network里一个block的输出

decoder

以Autoregressive Decoder为主(AT)

向decoder输入encoder产生的向量

在decoder可能产生的文字里多加一个特殊字符BEGIN(BOS,begin of sentence)。在nlp问题中,每个token用一个one-hot的vector来表示,其中一维是1,其他全0,而BEGIN也用one-hot vector表示

decoder输出的一个向量长度和vocabulary size(取决于输出的单位。本例中输出中文,则size是中文方块字的数目)一样。在产生这个向量前,跑一个softmax,分数最高的一个中文字,即为最终的输出

在这里插入图片描述

把“机”作为decoder新的input,原来decoder的输入有BEGIN和“机”;

根据这两个输入,输出一个蓝色的向量;

根据这个蓝色的向量里给每一个中文的字的分数,来决定第二个输出,再作为输入,继续输出后续的字,以此类推……

decoder会把自己的输出作为接下来的输入之一,当decoder看到错误的输入,再被decoder自己吃进去,可能会造成error propagation,一步错步步错

⇒解决:teacher forcing技术

在这里插入图片描述

机器自行决定输出的长度:特别符号END(EOS)

在这里插入图片描述

在这里插入图片描述

在transformer中,除了中间部分,encoder和decoder没有太大的差别。最后部分,可能会再做一个softmax,使得它的输出变成一个概率分布

在这里插入图片描述

Masked self-attention:产生输出时,不能再看”右边“的部分

⇒因为实际上就是顺次产生的

在这里插入图片描述

Non-autoregressive (NAT)

NAT不是依次产生,而是一次吃的是一整排的 BEGIN 的 Token,把整个句子一次性都产生出来

问题:如何确定BEGIN的个数?

方法①: 另外训练一个 Classifier,吃 Encoder 的 Input,输出是一个数字,代表 Decoder 应该要输出的长度,方法②:给它一堆 BEGIN 的 Token,(比如输出的句子的最大长度长度,不超过 300),给它 300 个 BEGIN,然后就会输出 300 个字。什麼地方输出 END表示这个句子结束。

NAT的好处:

并行化。NAT 的 Decoder 不管句子的长度如何,都是一个步骤就产生出完整的句子,所以在速度上,NAT 的 Decoder 比AT 的 Decoder 要快,容易控制输出长度。

常用在语音合成:有一个 Classifier决定 NAT 的 Decoder 应该输出的长度,并以此调整语音的速度。比如,要让你的系统讲快一点,那你就把那个 Classifier 的 Output 除以二,它讲话速度就变两倍快;如果你想要这个讲话放慢速度,就把Classifier 输出的长度乘两倍。

但是,虽然表面上看起来有种种的厉害之处,尤其是平行化是它最大的优势,但是 NAT 的 Decoder ,它的 Performance,往往都不如 AT 的 Decoder。

⇒ Multi-Modality

在这里插入图片描述

Encoder-Decoder之间的信息传递:CrossAttention

有两个输入来自Encoder(Encoder 提供两个箭头), Decoder 提供了一个箭头

在这里插入图片描述

Encoder输入一排向量,输出一排向量

a

1

,

a

2

,

a

3

a^1,a^2,a^3

a1,a2,a3,经过transform产生 Key1 Key2 Key3(

k

1

,

k

2

,

k

3

k^1,k^2,k^3

k1,k2,k3),以及

v

1

,

v

2

,

v

3

v^1,v^2,v^3

v1,v2,v3.

Decoder 会先吃 BEGIN,得到一个向量,输入多少长度的向量,输出就是多少向量。乘上一个矩阵做一个 Transform,得到一个 Query 叫做

q

q

q

利用q,k计算attention的分数,并做Normalization,得到

α

1

,

α

2

,

α

3

,

\alpha_1',\alpha_2',\alpha_3',

α1′​,α2′​,α3′​,

在这里插入图片描述

α

1

,

α

2

,

α

3

,

\alpha_1',\alpha_2',\alpha_3',

α1′​,α2′​,α3′​,与

v

1

,

v

2

,

v

3

v^1,v^2,v^3

v1,v2,v3做weighted sum(加权求和),得到

v

v

v.

v

v

v丢进Fully-Connected 的Network,做接下来的任务。

在这里插入图片描述

总之,Decoder 就是产生一个

q

q

q,去 Encoder 抽取信息出来,当做接下来的 Decoder 的Fully-Connected 的 Network 的 Input

在这里插入图片描述

其中,Decoder可以看Encoder中的许多层而不一定只是最后一层。

training

以语音辨识为例

训练数据:一段音频与对应的文字,文字为one-hot编码的向量

训练过程:Decoder输出的是概率分布。可以通过输出的概率分布与Ground Truth之间的计算交叉熵(Cross Entropy)并求梯度实现优化,交叉熵的值越小越好。

在这里插入图片描述

在训练Decoder时,会输入“正确答案”而不是自己产生的答案

⇒Teacher Forcing

(但测试的时候,显然没有正确答案可以给 Decoder 看)

在这里插入图片描述

三、Tips

(for seq2seq model)

Copy Mechanism

decoder没必要自行创造输出,它要做的事也许是从输入的东东里复制一些出来,而非创造词汇

chatbot

在这里插入图片描述

摘要

在这里插入图片描述

Guided Attention

有时seq2seq model训练会产生奇怪的结果,比如漏字(没看到)

⇒强迫机器一定要把输入的东西全看过(如TTS),强迫attention要用某种方式

例如,对语音合成或者是语音辨识来说,我们想像中的 Attention,应该就是由左向右

在这里插入图片描述

束搜索 -beam search

在这里插入图片描述

四、评测标准Optimizing Evaluation Metrics

BLEU Score 是 Decoder产生一个完整的句子以后再去跟正确的答案一整句做比较。但是,在训练时,是对每一个生成的token进行优化,使用的指标是交叉熵。

换言之,训练的时候,是看 Cross Entropy,但是我们实际上你作业真正评估的时候,看的是 BLEU Score

不能把BLEU作为LOSS⇒无法微分。

解决办法:遇到你在 Optimization 无法解决的问题,用 RL 硬 Train 一发。遇到你无法 Optimize 的 Loss Function,把它当做是 RL 的 Reward,把你的 Decoder 当做是 Agent。

在这里插入图片描述

Scheduled Sampling

由于Teacher Forcing的存在,训练跟测试的情景是不一致。Decoder 在训练的时候,永远只看过正确的东西,那在测试的时候,只要有一个错,那就会一步错 步步错。

解决:给 Decoder 的输入加一些错误的东西⇒Scheduled Sampling。

问题:会损害平行化的能力。

在这里插入图片描述



声明

本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。