Transformer(seq2seq、self-attention)学习笔记

2023-12-30 05:03:36

在self-attention 基础上记录一篇Transformer学习笔记

Transformer的网络结构

Transformer是一种seq2seq 模型。输入一个序列,经过encoder、decoder输出结果也是一个序列,输出序列的长度由模型决定。

seq2seq可以解决包括机器翻译、语音识别、语法解析、多标签分类问题等。还可以用于目标检测任务。
Transformer的网络结构:
在这里插入图片描述

Encoder

Transformer的编码器由多个self-attention block堆叠构成。
Transformer Encoder对应网络结构中这一部分:
在这里插入图片描述
multi-head attention模块就是Multi-head self-attention结构
self-attention block的结构如图:
在这里插入图片描述
self-attention block的输入向量为原始输入或者隐藏层的输出向量

操作将当前向量的qi 向量与序列中所有其他向量的kj做点乘,计算attention score 记为αi,经过softmax得到αi ',再与向量vi 做点乘,得到attention 操作的输出。multi-head将得到的qi 向量分别与n个矩阵做点乘,head设置为n,说明要提取n中不同的相关性。
每一个输出向量结果接一个Fully Connected,完成一个self-attention block

另外Encoder中增加了Add&Norm,residual connection和layer normalization。

在这里插入图片描述

  • 在self-attention结构和Fully connected结构上都上增加了残差连接,将输入向量与输出的向量相加得到最终输出结果。
  • 在transformer中使用的是layer normalization。

layer normalization 与 batch normalization
在这里插入图片描述
对于batch normalization,在同一个mini batch 内做归一化处理,向量中有几个channel,就做几次normalization 操作;
对于layer nromalization,在同一个向量内部,向量中有几个dimention,就做几次normalization操作。

在卷集中使用batch normalization;在RNN中使用Layer Normalization.
对于RNN网络的动态输入,当batch较小时,batch normalization效果不好;
时序特征向量一个batch 中的特征长度并不是相同的。

Decoder

Transformer的decoder结构如图:
在这里插入图片描述

  1. AutoRegress(AT)

在这里插入图片描述
Encoder的输出结果一部分作为decoder的输入,同时还有一个特殊的token BEGIN输入到decoder中,经过softmax得到一个长度为L的向量。
L表示期望输出的内容的所有可能情况+1(END)。例如,机器翻译任务,英文翻译成中文,输出向量的长度为所有可能输出的汉字的集合。
输出的结果每一个向量对应属于每一个结果的概率,取概率最大的取值,该结果为当前输入对应额decoder输出结果。
将所有以往的输出结果和START一同输入到decoder,相同的方法获得输出的结果。
decoder不仅需要训练输出向量的内容还要训练输出向量的长度。当输出向量为“END”,说明说明该序列输出结束。

decoder中的multi-head attention是带有masked,因为decoder的输出结果是一个一个输出的,训练decoder模型希望它能够根据已有的输出信息得到输出结果,decoder只能看到左侧的内容,不能看到右侧的内容。

  1. Non-AutoRegress(NAT)
    NAT将一次输出整个序列。一次同时输入多个BEGIN,如何确定一次输入的BEGIN的数量(如何确定输出序列的长度)。

    (1)训练一个classifier网络来训练输出序列的长度
    (2)指定一个分厂大的值作为输出序列的长度,知道输出END,只保留END之前的内容作为decoder的输出。

    Non-AutoRegress(NAT)的优点:
    (1)能够实现并行处理,速度更快
    (2)可以控制输出序列的长度

AutoRegress(AT)和Non-AutoRegress(NAT)对比:
在这里插入图片描述
Encoder和decoder之间如何传递信息
通过cross attention将encoder的输出与decoder中间的attention block连接。
将encoder输出的k向量与decoder输出的q向量计算点乘,在将得到的结果与v向量做点乘,得到的向量结果再进行Fully connection操作。实现cross attention
在这里插入图片描述
这一过程计算decoder中的节点,与encoder中所有节点的相关性。
在这里插入图片描述

模型训练与评估

对于decoder的训练是带有ground truth的,每一个输出的向量斗鱼ground truth计算一个损失值,计算cross entropy loss.可以看做是有几个输出向量就做了几次分类问题。min(cross entropy loss).

文章来源:https://blog.csdn.net/weixin_43227526/article/details/135293587
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。