机器学习之深度学习学习笔记(五)

文章目录

(一)Transformer

Transformer是Sequence-toSequence(Seq2Seq)的一个模型,我们之前在作一些实验的时候,当我们输入一个Sequence时,我们的输出也会是一个Sequence,而输入和输出结果的长度是一样的,当我们不知道输出结果是有多长时,我们便要机器自己决定要输出多长,这就会用到Seq2Seq,特别是在语音辨识及机器翻译中。
机器学习之深度学习学习笔记(五)
一般的Seq2Seq模型是由Encoder和Decoder组成,Encoder接受外界的输入,然后把输出的结果丢给Decoder,再由Decoder决定要输出的Sequence的大小机器学习之深度学习学习笔记(五)
Seq2seq最早在14年的时候就有了,那时是长的很眉清目秀,后面就变得一言难尽了
机器学习之深度学习学习笔记(五)
机器学习之深度学习学习笔记(五)

Encoder

Encoder要做的事情就是输入一排向量然后输出一排长度相同向量,这个用RNN或者CNN都能做得到,Encoder用的是self-attention(在我第四篇笔记中有记录到,欢迎大家指正)机器学习之深度学习学习笔记(五)
现在的Encoder会被分成很多个block,每一个block先做一个self-attention,接受一排向量的输入,考虑全部的资讯,然后输出一排向量,再把结果丢到全连接层再输出一排向量,这就是每一个block的输出,机器学习之深度学习学习笔记(五)
实际上原来的transformer中,block做的事情更加复杂,在经过self-attention得到一排向量之后,并不会直接丢给全连接层,而是将输入加进来得到新的向量,当成新的output,这种架构叫做residual connection,再将得到的新output做layer normalization(不需要考虑batch),layer normalization在同一个feature中计算不同维度的mean,standard,用公式x’i = (xi - mean)/ std归一化,得到要输入到全连接层的结果,机器学习之深度学习学习笔记(五)
同样的,全连接层里面也有residual connection的架构和normalization,然后才得到一个block的输出

Decoder

这里记录两种常用的Decoder

Autoregressive(AT)

语音辨识例子:
给Encoder吃入”机器学习“的一段语音,Encoder会输出四排向量;对于Decoder来说,他的输入就是encoder的输出,首先Decoder有一个代表开始的符号BEGIN,缩写是BOS机器学习之深度学习学习笔记(五)
Decoder接受的每一个输入都可以用One-hot-vector来表示,然后Decoder会吐出一排向量,大小是一个字典的长度,比如说做的是中文的语音辨识,中文大概有三四千常用字,所以Decoder吐出向量的长度是三四千。在Decoder中,结果还会经过softmax,最终会给每一个文字一个分数,分数最高的为所需结果
机器学习之深度学习学习笔记(五)
同样的,第一个的输出再作为第二次的输入,进行同样过程。机器学习之深度学习学习笔记(五)
我们能够发现Decoder的输出会被当成下一次的输入,这也会导致一个问题,就是当Deocder在某一次的输出错误的话就可能会导致后面的结果全部错误。接下来看一下Decoder的内层结果机器学习之深度学习学习笔记(五)
可以看出,Decoder除了中间部分和结果处的softmax之外,跟Encoder是差不多的。还有一个地方就是在Decoder里面self-attention变成了Masked self-attention,Masked其实是对self-attention的一个限制,就是让网络由可以考虑全部的资讯变成只能考虑左边的资讯机器学习之深度学习学习笔记(五)
例如下面,在输出b2时,只用第二个query和第一、二个的key相乘,而不考虑key3和key4
机器学习之深度学习学习笔记(五)
因为在Decoder中,输入不是一次性全部输入的,他是先有a1,再有a2,a3,a4,所以当你要输出b2时,是没有a3,a4的。开始的时候我们讲到Decoder是要有一个开始符号的,那类似的,Decoder也有结束的符号end机器学习之深度学习学习笔记(五)

Non-autoregressive(NAT)

对于NAT Decoder,他是一次性吃一整排的向量,然后直接生成一个 句子,就很直接,机器学习之深度学习学习笔记(五)

Encoder和Decoder之间的桥梁

Decoder通过产生一个query,到Encoder中抽取资讯,然后当作Decoder中的全连接层的输入,这个过程叫做Cross attention
机器学习之深度学习学习笔记(五)
Decoder的输入接下来的处理是一样的。

训练

我们还是用语音辨识的例子,假如输入的是”机器学习“,每一个字用一个独热向量表示,但我们经过Decoder得到第一个输出,这个输出是一个概率分布,我们会用”机“对应的独热向量跟输出进行cross entropy的计算机器学习之深度学习学习笔记(五)
每一个输出都有一个cross entropy,而我们就要使总cross entropy loss越小越好,但是要注意的是,我们还要输出end(结束)向量机器学习之深度学习学习笔记(五)
可以观察到我们在训练的时候,Decoder的输入都是正确的,这个叫Teacher Forcing:using the ground truth as input。但我们在测试时看的是自己的输入,可能有时候的输出是错误的,比如说将“器”输出成“气”,就可能导致后面全部错,所以我们在训练过程中需要给model加一些错误的信息让他去训练机器学习之深度学习学习笔记(五)
这个叫做Scheduled Sampling。

(二)结语

以上是我本人学习机器学习的学习笔记的第五篇,有错误的地方还望指出,共勉!

上一篇:Pytorch简单实现seq2seq+Attention机器人问答


下一篇:SubsamplingScaleImageView 源码解析