2022.5.15第六次周报

目录

一、Transformer

二、Sequence-to-sequence(seq2seq)

Seq2seq应用

1.Chatbot(训练聊天机器人)

2.QA(问答任务)

3.Syntactic Parsing(句法分析)

4.Multi-label Classification(多标签分类问题)

5.Object Detection

Seq2seq构成

Encoder

Decoder

Masked Self-attention

Encoder-Dncoder

cross-attention

三、Training

tips

1.Copy mechanism

2.Guided Attention

3.Beam Search

4.Sampling


一、Transformer

transformer 是一种seqence-to-sequence model。

二、Sequence-to-sequence(seq2seq)

1.Input a sequence , output a sequence.

2.The output length is determined by model

Seq2seq应用

1.Chatbot(训练聊天机器人)

2.QA(问答任务)

3.Syntactic Parsing(句法分析)

4.Multi-label Classification(多标签分类问题)

5.Object Detection

Seq2seq构成

通常Seq2Seq模型会分成两部分,一个是Encoder另一个是Decoder。

Encoder

Encoder(编码器)要做的事情就是给一排向量,输出一排向量。

像RNN、CNN等都能完成这个任务。而在Transformer中用的是Self-attention来实现的。

       Transformer的Encoder乍看起来非常复杂,首先它是由很多个Block组成的,每个Block都是输入一排向量,输出一排向量。最下面的Block的输出又可以作为它上面那个Block的输入,这样叠加起来。最上面一个Block就会输出最终的向量序列。而每个Block里面是由好几层组成的。在Transformer的Encoder里面,每一个Block做的事情是,一排向量,输入到Self-attention中,然后得到另外一排向量,然后给全连接网络(FC),再得到Block的输出。

值得注意的是在self-attention这里有两个特殊的处理,分别是 residual 和 layer norm。residual的意思是把Transformer得到的输出向量a再加上原来的输入向量b得到一个新的向量,我们把这种操作叫做残差连接(residual connection)。layer norm 是计算输入向量的均值m和标准差\alpha,然后用公式\frac{x-m}{\alpha }就得到了新的输出,我们称之为层归一化(Layer Normalization)。

Decoder

Decoder有两种,一种是Autoregressive Decoder(AT),另一种是Non-autoregressive (NAT)。

我们首先来了解AT。以语音识别为例,输入机器学习的声音信号,输出是一排向量。然后,我们引入Decoder,它读入Encoder的输入,那Decoder这里如何产生一段文字呢,首先需要给它一个特殊的开始符号。接下来,Decoder就可以输出一个向量。这个向量的大小和词典大小一样,如果加上Softmax就可以看成是输出每个词汇的概率。然后一般取概率最高(GreedySearch)的当成此刻的输出,这里是“机”,然后将这个“机”输入到Decoder中,此时Decoder根据前面的两个输入又生成一个输出,取最最大概率对应的单词,假设是“器”,接着把“器”再输入到Decoder,又会产生一个新的单词,依此类推。

 

下面我们来看另一个关键的问题,就是Decoder必须自己决定输出的序列长度。比如,当它产生了“习”之后,可能接着将它作为输入,又会产生一个“惯”,还有可能继续生成下去。为了让它能停下去,输入给它一个特别的符号,让它输出了这个符号后,就停止了。这个特别的符号就是结束字符,除了开始字符,我们还要添加结束字符。那么我们希望在把“习”作为输入的时候,Decoder就要输出结束符号。

 最后我们说一下AT和NAT的区别

AT现输入开始字符,然后输出一些词汇,最后输出结束字符。

而NAT Decoder它不是一次产生一个词汇,而是一次产生整个句子的词汇。它的输入是一排开始字符,然后一次输出一排词汇,就结束了。

那NAT如何决定输出的长度呢?有一些做法,比如:

另外用一个模型来预测输出长度输出很长的序列,而忽略结束字符后面的所有输出。NAT的优点是可以并行化,因为一次就可以产生所有的输出。

显然,NAT这种想法是有了Self-attention之后才有的。但是NAT的Decoder的表现往往不如AT,很多人想让它的表现和AT一样好,这样子利用它可以并行化的特性,可以极大地加快生成的效率。

 

Masked Self-attention

简单的说

我们原来的Self-attention的输出都是看过所有的输入得到的,那么加了Masked的意思就是现在不能看右边的输入。比如输出b2,就只考虑a1,2;不考虑a3,4.

那为什么需要加Masked呢?

这其实很直观,假设把Decoder当成生成模型的时候,它只能看到它生成过的东西,未生成的当然是未知的、看不到的。

就和Seq2Seq中Decoder采用的是从左到右的单向RNN而不是双向RNN一个道理。

 

Encoder-Dncoder

Encoder 是如何将信息传给Dncoder ?我们下面就来讨论一下cross-attention.

cross-attention

 Cross attention,它是连接Transformer中Encoder和Decoder的桥梁。这一块有两个输入来自Encoder,一个输入来自Decoder。它的原理是,假设给定Encoder一排向量,得到一排输出,然后输入开始字符到Masked Self-attention,得到一个输出。然后接下来把这个向量乘上一个矩阵,得到q然后q和a1,2,3的输出k1,2,3做运算,经过softmax得到\alpha1,2,3然后\alpha,1,2,3乘上对应的v1,2,3之后做加权得到结果v。这个过程就叫做Cross-attention.

 

 

三、Training

即输入一个序列,如何训练,得到另一排输出序列的。如果是做语言识别。首先我们要收集训练数据,我们要有一大堆语言和对应的文字数据。

那如何让机器做到语音识别呢?

我们知道,当输入“机器学习”这段语音,模型输出的第一个中文应该是“机”。所以当我们把开始符号输入给Decoder时,它的第一个输出应该要与“机”越接近越好。

如何让输出和“机”越接近越好?

目标词“机”会用one-hot向量来表示,而我们的输出经过Softmax之后,是一个概率分布,我们希望这个概率分布和这个one-hot向量越接近越好。

就变成计算它们之间的cross entroy(交叉熵),希望这个cross entroy的值越小越好。

现在,我们已经知道输出是“机器学习”这四个字,加上一个结束符。

我们希望Decoder的输出和这四个字的one-hot向量越接近越好,然后每个Decoder的输出都会和它的目标词的ont-hot向量计算交叉熵,这里加上结束符就会得到5个交叉熵。

我们希望这5个交叉熵越小越好,这样我们就确定了损失函数,就可以梯度下降。

这里还有一个技巧我们要知道,就是我们可以在训练的时候,给Decoder看正确答案。比如输入开始符之后,不管Decoder的输出是什么,强制输入“机”这个字进去,然后期望Decoder输出“器”。当然接着也可以不管它输出什么, 强制输入“器”进去,期望它输出“学”…

这个技巧叫Teacher Forcing。

 

tips

1.Copy mechanism

有些任务是希望Decoder从输入的序列里面复制出一些东西出来。

2.Guided Attention

如果在语音合成时,你发现机器看字的顺序是乱的,比如它先看最后面,再看最前面,最后看的是中间。显然此时有些问题,而Guided Attention做的事情就是强迫机器由左向右进行Attention。

3.Beam Search

4.Sampling

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值