Press "Enter" to skip to content

Transformer原理与代码精讲(PyTorch)原理部分

文章目录

Encoder – Multi Head Attention
Encoder – Positional Encoding
残差网络、LayerNorm、FFN

Attention

 

Sequence to sequence 就是将source转成target,它们的长度可以不一样。比如中文翻译英文,那幺词的个数可能是不同的。

 

用RNN进行Encoder和Decoder。RNN是按照时间进行的预测。

 

RNN是天然按照时间步骤顺序处理,中间步骤z不能从所以输入时间步骤编码成信息。这称为bottleneck problem。

 

另外,RNN有堆叠时,有梯度消失的问题。

 

Attention的好处是,上下文的z应该是对于所以输入数据都是可接触的,而不是只和最近的一个输入有关。但是它不是全部记下来,而是有意的pay attention。在时间上关注输入的多个部分。

 

attention分为隐式的implicit和显式的explicit。也可以用在图像处理中,在深度学习网络中,学习到一些隐式的attention。比如2016那篇文章,激活的单元,有意的倾向于人体的动作。相对于输入的一个偏导数,也就是jacobian matrix。另一种是显式的attention,也就是基于前面输入的记忆,对于输入进行weight,一种加权值。

 

还有一种attention就是soft和hard。对每个词的每个区域赋予不同的attention。

 

soft关注整个图像。hard式关注图像中一个patch。两种attention来说,soft:平滑,可求导。

 

hard:计算少,推理时间短。但是soft:计算比较贵,hard:不能求导,需要其他复杂方法,比如variance reduction或者reinforcement learning。

 

global全部的输入,local:部分的输入。卷积一般是local的,fully connect一般是global的。可以看到不同的颜色,意味着weight是不断地变化的。只不过它们是在梯度下降缓慢的变化。

 

输出加了额外的start和end的token。start表示一句话的开始,end表示一句话的结束。

 

为了解决bottleneck problem,引入了attention mechanism。蓝色的圈和绿圈(start token)都称为hidden state。2个hidden state做点积,就得到attention scores。得分越大,hidden state更相似,也就是aligned越相似。

 

然后将attention score经过一个softmax得到一个概率的分布attention distribution,对于start更关注编码器第一个hidden state,也就是起始位置。它的he的信息就更多。所以概率比较大。

 

然后在得到一个attention output,是一个encoder hidden state的加权和。这个attention output又叫context vector。权重大的,就有高的attention。

 

在计算hit的时候,借用了start和he两个decoder信息。如果he预测错的,那幺借助一个叫做teacher focing的机制,就是我们知道he是groud truth,即使预测的不是he,我们也用he。

 

由此可以看出,每一个时间步,都有自己的attention score和attention distribution、和attention output。也就是一个dynamic context vector。

 

注意力机制是一个可以训练的权重均值。输入和输出是1对多。一个输出由很多输入单词决定,他们的决定weight不同。

 

attention score的计算有不同的方法。additive就是concat。我们上面主要讲的是Dot-Product,后面会讲Scaled Dot-Product.

 

self-attention就是相同的sequence做注意力机制。看同一个sequence词与词之间的得分。

 

eating和apple的attention就比较高,但是和green就比较低。

 

对于RNN来说,自注意力的每一个hidden state和之前的hidden state有关。每一个query的state由前面的s0到st-1的keys和values决定。如果不是self-attention,而是encoder和decoder之间的注意力,我们称之为cross attention交互注意力。

 

注意,self-attention的query、keys、values都是来自自己,比如encoder的,就都是来自encoder的,或者都是来自decoder的。但是corss-attention,它的query是来自decoder,但是它的key和value是来自encoder的hidden state h0到hn。

 

给一个value和query,attention可以根据query计算value的加权和。这相当于做了一个选择性总结selective summary。query决定了哪些value需要focus。根据query可以得到一个固定长度的values。

 

attention可以用到transformer,图像,推荐系统等等。

 

Transformer框架概述

 

Transformer可以表示token之间的关系。

 

google brain提出的。

 

seq2seq。机器翻译。

 

从最上面的encoder连到每一个decoder的block。

 

FFN:Feed Forward Network。前向传播网络。除了encoder和decoder自身的self-attention外,在decoder里,还有一个cross-attention,也就是encoder-decoder attention。

 

encoder的时候,可以一次放入整个句子,但是decoder的时候,从左到右,依次解码。

 

transformer要考虑上下文。

 

it对于animal和street关注度不同。

 

Encoder – Multi Head Attention

 

点积运算得到的score就是queries和keys的相似度。

 

为什幺除以8,不除的话,softmax值比较大,梯度不是很稳定。

 

输入句子,就是做矩阵运算。

 

Linear就是Q、K、V和W的矩阵乘法。

 

论文中是用的8个头。

 

我们有key,query,value多个weight空间,这样表示更具有丰富的层次。可以关注自身,

 

Encoder – Positional Encoding

 

因为transofrmer是直接输入的句子,作并行处理,所以我们引入了positional encoding,来记录句子的顺序。

 

PEpos表示一个位置编码,PEpos+k表示距离pos位置k个距离的编码,它是PEpos的一个线性函数表示。

 

残差网络、LayerNorm、FFN

 

 

Decoder

 

 

Training

 

 

Summary

 

这是Encoder。

 

这是Decoder。

 

Be First to Comment

发表回复

您的电子邮箱地址不会被公开。 必填项已用*标注