Transformer

目录

transformer

Encoder

每个block进行的操作

layer norm

Decoder

 Masked Attention

AT&NAT

 encoder的输出如何融入到decoder中?

transformer训练和测试不一样的点

 训练chat-bot时的一些tips


transformer

原论文网络结构图

Transformer_第1张图片

 transformer有一个Encoder一个Decoder,吧编码器解析输入得出的结果放到解码器中得到输出。

Encoder

Encoder由一组输入先做Positional Encoding后,再经过多个block后得到

Transformer_第2张图片

每个block进行的操作

先对输入做self-attention得到输出,再将得到的输出加上输入构造一个残差结构得到layer norm的输入,经过layer norm处理后的值作为全连接层的输入,FC层也需要添加残差结构,得到的输出再进行layer norm后才得到encoder的输出。

Transformer_第3张图片

Transformer_第4张图片

layer norm

对同一个样本的不同维度计算均值方差(batch norm是对不同样本的同一纬度计算)

Transformer_第5张图片

以上是transformer原文中结构,可以尝试改变例如layer norm位置等,可能会得到更好的结果。

Decoder

encoder得到的输出会以某种方式读入decoder中,后面会提到。

先看一下decoder的结构:

Transformer_第6张图片

先输入一个开始符,begin也是一个独热向量

decoder的每一个输出都会作为下一次的输入,所以decoder的计算不是并行的。

Transformer_第7张图片

注意到decoder中的attention模块比encoder多了一个Masked

 Masked Attention

attention计算是需要看所有输入之间的重要程度,加了masked表示只看当前输入之前的所有内容的相关性。

Transformer_第8张图片

产生b1时只考虑a1

产生b2时只考虑a1,a2

产生b3时只考虑a1,a2,a3

产生b4时考虑前面的所有

实现这种效果时就用对应的q去与前面所有的k计算相关性,而不计算全局的q*k

因为在做输出的时候可能是不定长的,而且,每一个输出是串行计算的,需要有了前一个输出,才有下一个节点的输入。

AT&NAT

AT(autoregressive)表示下图左边结构,输入一个起始符和终止符都为独热向量,根据输出的end判断什么时候结束。

NAT(Non-autoregressive)下图右边结构,直接丢入一组起始符,输出对应的输出

起始符的个数如何确定?

1.再加入一个可学习参数用来记录每组数据的输出个数,从而决定起始符个数

2.直接丢入一个超长的起始符,例如你的实际应用中每组输出不会超过300,就丢300个begin进去,看在什么地方输出了end符,结束符后面的输出全都丢弃。虽然有一部分计算浪费,但是由于可以并行处理,所以NAT跑的是比AT快的。

Transformer_第9张图片

 encoder的输出如何融入到decoder中?

Transformer_第10张图片

decoder从encoder中得到一部分输入,再从上一个decoder模块得到一个输入

这一部分模块叫做cross attention

具体实现方式:用decoder前一个模块输出的q去计算encoder的所有k的相关性,得到α然后加上v得到输出作为encoder下一层输入。

Transformer_第11张图片

 encoder和decoder都有很多层attention模块

在原始论文中是用的encoder的最后一层与decoder计算

后来还有很多魔改

Transformer_第12张图片

transformer训练和测试不一样的点

训练和测试时需要用不同的评估方式,训练时用的是cross entropy测试时用的是BLEU

因为BLEU对比每一个位置是否一样,无法计算梯度

Transformer_第13张图片

训练时decoder的输入就是正确答案

而测试时的输入是上一步的输出,如果出现错误计算会影响后面每一步的值

Transformer_第14张图片 Transformer_第15张图片

 训练chat-bot时的一些tips

Transformer_第16张图片

 有很多时候需要的输出可能在训练中从来没出现过

例如做对话机器人出现人名,或者做摘要提取之类任务时

需要有复制粘贴的能力,能更加方便的做输出。

你可能感兴趣的:(ai学习笔记,transformer,深度学习,人工智能)