首页 > 其他分享 >4-2 Transformer

4-2 Transformer

时间:2022-10-11 14:22:09浏览次数:73  
标签:输出 Transformer 裡面 Sequence 一个 Decoder 输入

1、Seq2seq

input是一个sequence,那output有几种可能

  • 一种是input跟output的长度一样
  • 有一种case是output一个东西
  • 我们不知道应该要output多长,由机器自己决定output的长度,即Seq2seq

sequence to sequence(seq2seq)模型即为输入一个序列,输出一个序列。这两个序列的长度、关系是由模型自己确定的。相关场景包括:

  • 语音识别(一段语音转换成的文字的长度是由模型决定的)
  • 机器翻译(翻译后的语句的长度是由机器决定的)
  • 语音翻译(直接对语音进行翻译)
  • 还有很多看起来和seq2seq完全没关系的问题也可以用seq2seq硬做

Question Answering (QA)
事实上Seq2Seq model,在NLP的领域使用,是极为广泛的,其实很多natural language processing的任务,都可以想成是question answering(QA)的任务,就是给机器读一段文字,然后问机器一个问题,希望他可以给你一个正确的答案

假设今天想做的是翻译,那机器读的文章就是一个英文句子,问题就是这个句子的德文翻译是什麼,然后输出的答案就是德文

或者是想要叫机器自动作摘要,摘要就是给机器读一篇长的文章,叫他把长的文章的重点节录出来,那你就是给机器一段文字,问题是这段文字的摘要是什麼,然后期待他答案可以输出一个摘要

或者是想要叫机器做Sentiment analysis,Sentiment analysis就是机器要自动判断一个句子,是正面的还是负面的;假设你有做了一个产品,然后上线以后,你想要知道网友的评价,但是你又不可能一直找人家ptt上面,把每一篇文章都读过,所以就做一个Sentiment analysis model,看到有一篇文章裡面,有提到你的产品,然后就把这篇文章丢到,你的model裡面,去判断这篇文章,是正面还是负面。你就给机器要判断正面还负面的文章,问题就是这个句子,是正面还是负面的,然后希望机器可以告诉你答案

所以各式各样的NLP的问题,往往都可以看作是QA的问题,而QA的问题,就可以用Seq2Seq model来解

具体来说就是有一个Seq2Seq model输入,就是有问题跟文章把它接在一起,输出就是问题的答案,就结束了,你的问题加文章合起来,是一段很长的文字,答案是一段文字

Seq2Seq model只要是输入一段文字,输出一段文字,只要是输入一个Sequence,输出一个Sequence就可以解,所以你可以把QA的问题,硬是用Seq2Seq model解,叫它读一篇文章读一个问题,然后就直接输出答案,所以各式各样NLP的任务,其实都有机会使用Seq2Seq model

必须要强调,对多数NLP的任务,或对多数的语音相关的任务而言,往往為这些任务客製化模型,你会得到更好的结果

Seq2seq for Syntactic Parsing
在语音还有自然语言处理上的应用,其实有很多应用,你不觉得他是一个Seq2Seq model的问题,但你都可以硬用Seq2Seq model的问题硬解他

举例来说文法剖析,给机器一段文字,比如Deep learning is very powerful,机器要做的事情是產生,一个文法的剖析树 告诉我们,deep加learning合起来,是一个名词片语,very加powerful合起来,是一个形容词片语,形容词片语加is以后会变成,一个动词片语,动词片语加名词片语合起来,是一个句子。文法剖析要做的事情,就是產生这样子的一个Syntactic tree,所以在文法剖析的任务裡面,假设你想要deep learning解的话,输入是一段文字,他是一个Sequence,但输出看起来不像是一个Sequence,输出是一个树状的结构,但事实上一个树状的结构,可以硬是把他看作是一个Sequence。

这个树状结构可以对应到一个,这样子的Sequence,从这个Sequence裡面,你也可以看出

  • 这个树状的结构有一个S,有一个左括号,有一个右括号
  • S裡面有一个noun phrase,有一个左括号跟右括号
  • NP裡面有一个左括号跟右括号,NP裡面有is
  • 然后有这个形容词片语,他有一个左括号右括号

这一个Sequence就代表了这一个tree 的structure,你先把tree 的structure,转成一个Sequence以后,你就可以用Seq2Seq model硬解他

multi-label classification
multi-class的classification,跟multi-label的classification,听起来名字很像,但他们其实是不一样的事情,multi-class的classification意思是说,我们有不只一个class机器要做的事情,是从数个class裡面,选择某一个class出来

但是multi-label的classification,意思是说同一个东西,它可以属於多个class,举例来说 你在做文章分类的时候,可能这篇文章 属於class 1跟3,这篇文章属於class 3 9 17等等,你可能会说,这种multi-label classification的问题,能不能直接把它当作一个multi-class classification的问题来解。

举例来说,我把这些文章丢到一个classifier裡面,
本来classifier只会输出一个答案,输出分数最高的那个答案。我现在就输出分数最高的前三名,看看能不能解,multi-label的classification的问题。

但这种方法可能是行不通的,因為每一篇文章对应的class的数目,根本不一样 有些东西 有些文章,对应的class的数目,是两个 有的是一个 有的是三个。所以 如果你说 我直接取一个threshold,我直接取分数最高的前三名,class file output分数最高的前三名,来当作我的输出 显然,不一定能够得到好的结果 那怎麼办呢

也可以用seq2seq硬做,输入一篇文章 输出就是class 就结束了,机器自己决定 它要输出几个class

我们说seq2seq model,就是由机器自己决定输出几个东西,输出的output sequence的长度是多少,既然 你没有办法决定class的数目,那就让机器帮你决定,每篇文章 要属於多少个class

2、Transformer

Transformer模型是一个基于多头自注意力的序列到序列模型(seq2seq model),整个网络结构可以分为编码器(Encoder)和解码器(Decoder)两部分。

这个seq2seq模型输出序列的长度是不确定的。我们输入一个sequence后,先由Encoder负责处理,再把处理好的结果输入到Decoder中,由Decoder决定最后输出什么样的sequence。Transformer的完整结构如下图所示:

3、Encoder

在seq2seq模型中的Encoder要做的事情就是输入一排向量,输出另一排向量。

给一排向量、输出一排向量这件事情,很多模型都可以做到,可能我们会想到前面的self-attention,其实不只是self-attention, RNN CNN 也都能够做到input一排向量,output另外一个同样长度的向量

  • 在inputs的地方加上了positional encoding,之前有讲过如果你只用self-attention,没有未知的资讯,所以需要加上positional的information。
  • Multi-Head Attention:这里就是self-attention的block,然后专门强调说它是Multi-Head的self-attention。
  • Add&Norm:residual加上layer normalization
  • Feed Forward: 是FC的feed forward network
  • N×:block会重复N次。

但在transformer的Encoder里,用的是Multi-Head attention模型,看起来会有点复杂,因此我们用另外一张图来仔细地解释Encoder的架构。

现在的Encoder裡面,会分成很多很多的block 每一个block都是输入一排向量,输出一排向量,你输入一排向量 第一个block,第一个block输出另外一排向量,再输给另外一个block,到最后一个block,会输出最终的vector sequence,每一个block其实,并不是neural network的一层。每一个block裡面做的事情,是好几个layer在做的事情,也即

  • 先做一个self-attention, input一排vector以后,做self-attention,考虑整个sequence的资讯,Output另外一排vector.
  • 接下来这一排vector,会再丢到fully connected的feed forward network裡面,再output另外一排vector,这一排vector就是block的输出

上述两个步骤,仅仅是描述了block中完成的大体工作。Transformer中,在self-attention和fully collected上还额外加了residual connection和layer normalization。

在之前self-attention的时候,我们说 输入一排vector,就输出一排vector,这边的每一个vector,它是考虑了所有的input以后,所得到的结果

transformer裡面,它加入了一个设计不只是输出这个vector,还要把这个vector加上它的input,它要把input拉过来直接加给输出,得到新的output 也就是说,这边假设这个vector叫做a,另一个vector叫做b,把a+b当作是新的输出,这样子的network架构叫做residual connection。

得到residual的结果以后,再做normalization,这边用的不是batch normalization,而是layer normalization

batch normalization是对不同example,不同feature的同一个dimension,去计算mean跟standard deviation; 但layer normalization,它是对同一个feature,同一个example裡面,不同的dimension,去计算mean跟standard deviation

layer normalization做的事情,比batch normalization更简单一点: 输入一个向量输出另外一个向量,不需要考虑batch,它会把输入的这个向量,计算好它的mean跟standard deviation后就可以做一个normalize。我们把input 这个vector裡面每一个dimension减掉mean,再除以standard deviation以后得到x',就是layer normalization的输出 得到layer normalization的输出以后,它的这个输出才是FC network的输入

而FC network这边,也有residual的架构,所以会把FC network的input,跟它的output加起来 做一下residual,得到新的输出。这个FC network做完residual以后,要把residual的结果,再做一次layer normalization,得到的输出才是residual network裡面一个block的输出。

上图其实就是我们刚才讲的全部过程

  • 首先有self-attention,其实在input的地方,还有加上positional encoding,我们之前已经有讲过,如果你只光用self-attention,你没有未知的资讯,所以你需要加上positional的information,然后在这个图上,有特别画出positional的information
  • Multi-Head Attention,这个就是self-attention的block,这边有特别强调说,它是Multi-Head的self-attention
  • Add&norm,就是residual加layer normalization,我们刚才有说self-attention,有加上residual的connection,加下来还要过layer normalization,这边这个图上的Add&norm,就是residual加layer norm的意思
  • 接下来,要过feed forward network,fc的feed forward network以后再做一次Add&norm,再做一次residual加layer norm,才是一个block的输出,
  • 这个block会重复n次,这个复杂的block,其实在之后会讲到的,一个非常重要的模型BERT裡面,会再用到 BERT,它其实就是transformer的encoder

To Learn more
為什麼 transformer的encoder,要这样设计 不这样设计行不行?

行,不一定要这样设计,这个encoder的network架构,现在设计的方式,本文是按照原始的论文讲给你听的,但原始论文的设计 不代表它是最好的,最optimal的设计

4、Decoder

(1)Decoder分类

Decoder分为Auto regressive(AT)和Non-Auto regressive(NAT)两种。其中AT应用范围更为广泛一些。

(2)Decoder工作机制

Encoder 做的事情,就是输入一个 Vector Sequence,输出另外一个 Vector Sequence。接下来,就轮到 Decoder 运作了,Decoder 要做的事情就是產生输出,也就是產生语音辨识的结果, Decoder 怎麼產生这个语音辨识的结果。Decoder 做的事情,就是把 Encoder 的输出先读进去

(3)Auto regressive(AT)产生文字

以语音辨识为例,假设我们要处理的这个NLP问题,每一个Token都用One-Hot的Vector表示,并假设START和END两个special token,其中START表示开始工作,END表示结束工作。

  • 在Encoder完成之后,将其输出作为一个输入喂到Decoder中。
  • 同时,输入一个special token:START表示开始工作。
  • Decoder结合这两个输入,输出一个经过softmax处理后的长度为Vocabulary Size的输出向量,该向量中每一个中文字都对应一个数值,数值最大的中文字为最终输出的中文字。
全流程

首先,先给Decoder一个特殊的符号,这个特殊的符号,代表开始,在助教的投影片裡面,是写 Begin Of Sentence,缩写是 BOS。就是 Begin 的意思,这个是一个 Special 的 Token,你就是在你的个 Lexicon 裡面,你就在你可能,本来 Decoder 可能產生的文字裡面,多加一个特殊的字,这个字就代表了 BEGIN,代表了开始这个事情 在这个机器学习裡面,假设你要处理 NLP 的问题,每一个 Token,你都可以把它用一个 One-Hot 的 Vector 来表示,One-Hot Vector 就其中一维是 1,其他都是 0,所以 BEGIN 也是用 One-Hot Vector 来表示,其中一维是 1,其他是 0

接下来Decoder 会吐出一个向量,这个 Vector 的长度很长,跟你的 Vocabulary 的 Size 是一样的

每一个中文的字,都会对应到一个数值,因為在產生这个向量之前,你通常会先跑一个 Softmax,就跟做分类一样,所以这一个向量裡面的分数,它是一个 Distribution,也就是,它这个向量裡面的值,它全部加起来,总和 会是 1 分数最高的一个中文字,它就是最终的输出 在这个例子裡面,机的分数最高,所以机,就当做是这个 Decoder 第一个输出 然后接下来,你把“机”当做是 Decoder 新的 Input,原来 Decoder 的 Input,只有 BEGIN 这个特别的符号,现在它除了 BEGIN 以外,它还有“机”作為它的 Input

  • START对应的向量
  • “机”对应的向量

然后这个 Process ,就反覆持续下去,这边有一个关键的地方,我们特别用红色的虚线把它标出来

也就是说 Decoder 看到的输入,其实是它在前一个时间点,自己的输出,Decoder 会把自己的输出,当做接下来的输入。如果Decoder 看到错误的输入,让 Decoder 看到自己產生出来的错误的输入,再被 Decoder 自己吃进去,会不会造成 Error Propagation 的问题?一步错步步错这样,就是在这个地方,如果不小心把机器的“器”,不小心写成天气的"气",会不会接下来就整个句子都坏掉了,都没有办法再產生正确的词汇了?

有可能,最后会稍微讲一下这个问题要怎麼处理。

(4)Decoder内部结构

如上图所示,通过对比可以看出在每一个block中Decoder比Encoder多了中间的一个Multi-Head Attention,同时第一个自注意力机制使用的是Masked Multi-Head Attention。

如果我们把 Decoder 中间这一块,中间这一块把它盖起来,其实 Encoder 跟 Decoder,并没有那麼大的差别。都是Multi-Head Attention,然后 Add & Norm,Feed Forward,Add & Norm,重复 N 次。

所以 Encoder 跟 Decoder,其实并没有非常大的差别,除了中间这一块不一样的地方,那只是最后,我们可能会再做一个 Softmax,使得它的输出变成一个机率,

(5)Masked Multi-Head attention

Masked Multi-Head attention的计算顺序其实是和Decoder的串行计算顺序相对应的,以上边左图中计算b2为例:
在计算b2的时候,和原来的self-attention考虑所有输入信息[a1, a2, a3, a4]不同,Masked Multi-Head attention只考虑[ a1, a2],因为此时的[a3, a4]还没有计算出来。

(6)Decoder - stop

Decoder 必须自己决定,输出的 Sequence 的长度可是到底输出的 Sequence 的长度应该是多少,我们不知道。

所以我们要让 Decoder 做的事情,也是一样,要让它可以输出一个断,所以你要特别準备一个特别的符号,这个符号,就叫做断,我们这边,用 END 来表示这个特殊的符号

所以我们现在,当把"习"当作输入以后,就 Decoder 看到 Encoder 输出的这个 Embedding,看到了 "BEGIN",然后"机" "器" "学" "习"以后,看到这些资讯以后 它要知道说,这个语音辨识的结果已经结束了,不需要再產生更多的词汇了 它產生出来的向量END,就是断的那个符号,它的机率必须要是最大的,然后你就输出断这个符号,那整个运作的过程,整个 Decoder 產生 Sequence 的过程,就结束了这个就是 Autoregressive Decoder,它运作的方式

5、Encoder-Decoder 之间的数据传输

Encoder 跟 Decoder它们中间是怎麼传递资讯,也就是刚才我们刻意遮起来的那一块叫做 Cross Attention,它是连接 Encoder 跟 Decoder 之间的桥樑,这一块裡面会发现有两个输入来自於 Encoder,Encoder 提供两个箭头,然后 Decoder 提供了一个箭头,所以从左边这两个箭头,Decoder 可以读到 Encoder 的输出

现在假设Encoder有[a1, a2, a3]三个输出。

  • 在cross attention中,首先生成对应的矩阵[k1, k2, k3]。每当Decoder生成一个结果q qq,就将其与[k1, k2, k3]一起计算Attention Score得到[\(\alpha^1, \alpha^2, \alpha^3\)]。

  • 将得到的Attention Score分别与[a1, a2, a3]对应的[v1, v2, v3]计算相加得到输出v,这个v vv后续将输入全连接网络中进一步的计算。

  • 上述过程持续到Decoder输出END结束。这里Decoder使用的是Encoder最后一层的输出,当然,也可以和中间的其他层做出各式各样的连接,如下图所示:

6、Training

我们已经知道输入这段声音讯号,第一个应该要输出的中文字是“机”,所以今天当我们把 BEGIN,丢给这个 Encoder 的时候,它第一个输出应该要跟“机”越接近越好

“机”这个字会被表示成一个 One-Hot 的 Vector,在这个 Vector 裡面,只有机对应的那个维度是 1,其他都是 0,这是正确答案,那我们的 Decoder,它的输出是一个 Distribution,是一个机率的分布,我们会希望这一个机率的分布,跟这个 One-Hot 的 Vector 越接近越好 - 所以你会去计算这个 Ground Truth,跟这个 Distribution 它们之间的 Cross Entropy,然后我们希望这个 Cross Entropy 的值,越小越好

它就跟分类很像,你可以想成每一次我们在產生,每一次 Decoder 在產生一个中文字的时候,其实就是做了一次分类的问题,中文字假设有四千个,那就是做有四千个类别的分类的问题

所以实际上训练的时候这个样子,我们已经知道输出应该是“机器学习”这四个字,就告诉你的 Decoder ,现在你第一次的输出 第二次的输出,第三次的输出 第四次输出,应该分别就是“机” “器” “学”跟“习”,这四个中文字的 One-Hot Vector,我们希望我们的输出,跟这四个字的 One-Hot Vector 越接近越好

在训练的时候,每一个输出都会有一个 Cross Entropy,每一个输出跟 One-Hot Vector,跟它对应的正确答案都有一个 Cross Entropy,我们要希望所有的 Cross Entropy 的总和最小,越小越好 所以这边做了四次分类的问题,我们希望这些分类的问题,它总合起来的 Cross Entropy 越小越好,还有 END 这个符号

Decoder 的训练:把 Ground Truth ,正确答案给它,希望 Decoder 的输出跟正确答案越接近越好

在训练的时候我们会给 Decoder 看正确答案,这件事情叫做 Teacher Forcing。也就是我们会告诉它说

在已经有 "BEGIN",在有"机"的情况下你就要输出"器"
有 "BEGIN" 有"机" 有"器"的情况下输出"学"
有 "BEGIN" 有"机" 有"器" 有"学"的情况下输出"习"
有 "BEGIN" 有"机" 有"器" 有"学" 有"习"的情况下,你就要输出"断"

在真正使用这个模型,在 Inference 的时候,Decoder 看到的是自己的输入,而训练的时候,Decoder 有偷看到正确答案。这中间显然有一个 Mismatch,那等一下我们会有一页投影片的说明,有什麼样可能的解决方式

7、训练Sequence To Sequence Model 的Tips(不局限于 Transformer)

Copy Mechanism

在我们刚才的讨论裡面,我们都要求 Decoder 自己產生输出,但是对很多任务而言,也许 Decoder 没有必要自己创造输出出来,它需要做的事情,也许是从输入的东西裡面复製一些东西出来

聊天机器人

对机器来说,它其实没有必要创造库洛洛这个词汇,这对机器来说一定会是一个非常怪异的词汇,所以它可能很难,在训练资料裡面可能一次也没有出现过,所以它不太可能正确地產生这段词汇出来

但是假设今天机器它在学的时候,它学到的是看到输入的时候说我是某某某,就直接把某某某,不管这边是什麼复製出来说某某某你好

那这样子机器的训练显然会比较容易,它显然比较有可能得到正确的结果,所以复製对於对话来说,可能是一个需要的技术 需要的能力

Summarization

摘要是要训练一个模型,然后这个模型去读一篇文章,然后產生这篇文章的摘要

那这个任务完全是有办法做的,就是收集大量的文章,那每一篇文章都有人写的摘要,然后你就训练一个,Sequence-To-Sequence 的 Model,就结束了

要做这样的任务,只有一点点的资料是做不起来的,有的同学收集个几万篇文章,然后训练一个这样的,Sequence-To-Sequence Model,发现结果有点差

你要训练这种,你要叫机器说合理的句子,通常这个百万篇文章是需要的,所以如果你有百万篇文章,那些文章都有人标的摘要,那有时候你会把,直接把文章标题当作摘要,那这样就不需要花太多人力来标,你是可以训练一个,直接可以帮你读一篇文章,做个摘要的模型

对摘要这个任务而言,其实从文章裡面直接复製一些资讯出来,可能是一个很关键的能力,那 Sequence-To-Sequence Model,有没有办法做到这件事呢,那简单来说就是有,那我们就不会细讲

Guided Attention

机器就是一个黑盒子,有时候它裡面学到什麼东西,你实在是搞不清楚,那有时候它会犯非常低级的错误

语音合成

让它讲 1 次发财,它不念“发”,不知道為什麼这样,就是这个 Sequence-To-Sequence Model,有时候 Train 出来就是,会產生莫名其妙的结果,也许在训练资料裡面,这种非常短的句子很少,所以机器不知道要怎麼处理这种非常短的句子,你叫它念发财,它把发省略掉只念财,你居然叫它念 4 次的发财,重复 4 次没问题,叫它只念一次,居然会有问题,就是这麼的奇怪

当然其实这个例子并没有那麼常出现,就这个用 Sequence-To-Sequence,Learn 出来 TTS,也没有你想像的那麼差,这个要找这种差的例子也是挺花时间的,要花很多时间才找得到这种差的例子,但这样子的例子是存在的

我们发现说机器居然漏字了,输入有一些东西它居然没有看到,我们能不能够强迫它,一定要把输入的每一个东西通通看过呢?这个是有可能的,这招就叫做 Guided Attention

像语音辨识这种任务,你其实很难接受说,你讲一句话,今天辨识出来,居然有一段机器没听到,或语音合成你输入一段文字,语音合出来居然有一段没有念到,这个人很难接受

那如果是其它应用,比如说 Chat Bot,或者是 Summary,可能就没有那麼严格,因為对一个 Chat Bot 来说,输入后一句话,它就回一句话,它到底有没有把整句话看完,其实你 Somehow 也不在乎,你其实也搞不清楚

但是对语音辨识 语音合成,Guiding Attention,可能就是一个比较重要的技术。Guiding Attention 要做的事情就是,要求机器它在做 Attention 的时候,是有固定的方式的,举例来说,对语音合成或者是语音辨识来说,我们想像中的 Attention,应该就是由左向右

用红色的这个曲线,来代表 Attention 的分数,这个越高就代表 Attention 的值越大

以语音合成為例,那你的输入就是一串文字,那你在合成声音的时候,显然是由左念到右,所以机器应该是,先看最左边输入的词汇產生声音,再看中间的词汇產生声音,再看右边的词汇產生声音

如果你今天在做语音合成的时候,你发现机器的 Attention,是颠三倒四的,它先看最后面,接下来再看前面,那再胡乱看整个句子,那显然有些是做错了,显然有些是,Something is wrong,有些是做错了,

所以 Guiding Attention 要做的事情就是,强迫 Attention 有一个固定的样貌,那如果你对这个问题,本身就已经有理解知道说,语音合成 TTS 这样的问题,你的 Attention 的分数,Attention 的位置都应该由左向右,那不如就直接把这个限制,放进你的 Training 裡面,要求机器学到 Attention,就应该要由左向右

我们现在的这个 Decoder就只能產生两个字,一个叫做 A 一个叫做 B

那对 Decoder 而言,它做的事情就是,每一次在第一个 Time Step,它在 A B 裡面决定一个,然后决定了 A 以后,再把 A 当做输入,然后再决定 A B 要选哪一个

它可能选 B 当作输入,再决定 A B 要选哪一个,那在我们刚才讲的 Process 裡面,每一次 Decoder 都是选,分数最高的那一个

我们每次都是选Max 的那一个,所以假设 A 的分数 0.6,B 的分数 0.4,Decoder 的第一次就会输出 A,然后接下来假设 B 的分数 0.6,A 的分数 0.4,Decoder 就会输出 B,好,然后再假设把 B 当做 Input,就现在输入已经有 A 有 B 了,然后接下来,A 的分数 0.4,B 的分数 0.6,那 Decoder 就会选择输出 B,所以输出就是 A 跟 B 跟 B

那像这样子每次找分数最高的那个 Token,每次找分数最高的那个字,来当做输出这件事情叫做,Greedy Decoding 但是 Greedy Decoding,一定是更好的方法吗,有没有可能我们在第一步的时候,先稍微捨弃一点东西

比如说第一步虽然 B 是 0.4,但我们就先选 0.4 这个 B,然后接下来我们选了 B 以后,也许接下来的 B 的可能性就大增,就变成 0.9,然后接下来第三个步骤,B 的可能性也是 0.9

如果你比较红色的这一条路,跟绿色这条路的话,你会发现说绿色这一条路,虽然一开始第一个步骤,你选了一个比较差的输出,但是接下来的结果是好的

Beam Search,它用比较有效的方法,找一个 Approximate,找一个估测的 Solution,找一个不是很精準的,不是完全精準的 Solution

Beam Search什么时候有用?

假设一个任务,它的答案非常地明确,比如说语音辨识,说一句话辨识的结果就只有一个可能,就那一串文字就是你唯一可能的正确答案,并没有什麼模糊的地带
对这种任务而言,通常 Beam Search 就会比较有帮助

需要机器发挥一点创造力的时候,这时候 Beam Search 就比较没有帮助,
举例来说在这边的 Sentence Completion,给你一个句子,给你故事的前半部,后半部有无穷多可能的发展方式,那这种需要有一些创造力的,有不是只有一个答案的任务,往往会比较需要在 Decoder 裡面,加入随机性,还有另外一个 Decoder,也非常需要随机性的任务,叫做语音合成,TTS 就是语音合成的缩写

Optimizing Evaluation Metrics?

在作业裡面,我们评估的标準用的是,BLEU Score,BLEU Score 是你的 Decoder,先產生一个完整的句子以后,再去跟正确的答案一整句做比较,我们是拿两个句子之间做比较,才算出 BLEU Score

但我们在训练的时候显然不是这样,训练的时候,每一个词汇是分开考虑的,训练的时候,我们 Minimize 的是 Cross Entropy,Minimize Cross Entropy,真的可以 Maximize BLEU Score 吗?

不一定,因為这两个根本就是,它们可能有一点点的关联,但它们又没有那麼直接相关,它们根本就是两个不同的数值,所以我们 Minimize Cross Entropy,不见得可以让 BLEU Score 比较大

能不能在 Training 的时候,就考虑 BLEU Score 呢?我们能不能够训练的时候就说,我的 Loss 就是,BLEU Score 乘一个负号,那我们要 Minimize 那个 Loss,假设你的 Loss 是,BLEU Score乘一个负号,它也等於就是 Maximize BLEU Score

可以把 BLEU Score,当做你训练的时候,你要最大化的一个目标,但是 BLEU Score 本身很复杂,它是不能微分的。

8、Scheduled Sampling

测试的时候,Decoder 看到的是自己的输出,所以测试的时候,Decoder 会看到一些错误的东西,但是在训练的时候,Decoder 看到的是完全正确的,那这个不一致的现象叫做,Exposure Bias

假设 Decoder 在训练的时候,永远只看过正确的东西,那在测试的时候,你只要有一个错,那就会一步错 步步错,因為对 Decoder 来说,它从来没有看过错的东西,它看到错的东西会非常的惊奇,然后接下来它產生的结果可能都会错掉

有一个可以的思考的方向是,给 Decoder 的输入加一些错误的东西,就这麼直觉,你不要给 Decoder 都是正确的答案,偶尔给它一些错的东西,它反而会学得更好,这一招叫做Scheduled Sampling

参考文章:
Transformer - 李宏毅2021春机器学习笔记
unclestrong/DeepLearning_LHY21_Notes
李宏毅2021春机器学习课程笔记——Transformer模型
李宏毅机器学习笔记——Transformer
Transformer - 李宏毅2021春机器学习笔记

标签:输出,Transformer,裡面,Sequence,一个,Decoder,输入
From: https://www.cnblogs.com/cauwj/p/16779072.html

相关文章