transformer论文笔记
batchnorm和layernorm区别
参考大佬BatchNorm和LayerNorm——通俗易懂的理解文章
上图描述的是batch_norm
操作
batch_norm
将一个batch内的所有图片的同一通道视作一个分布,并进行标准化:
- 不同图片同一通道可以相互比较
- 同一图片不同通道不能相互比较
上图描述的是layer_norm
操作
layer_norm
将一个句子中的所有词义向量视作一个分布,并进行标准化:
- 同一个句子之间可以比较
- 不同句子之间不能比较
总而言之,layer_norm
的操作更符合我们机器翻译等任务的需求,因此采用layer_norm
进行标准化
点积为什么要缩放
由于transfomer的超参数中d_model
的参数大小为512
,因此,在query
和key
进行注意力点积操作的时候,得到的数据可能会很大。
这样就会导致在经过softmax
归一化时,更倾向于得到0.99
和0.01
这样的权重分布,而不是0.9
和0.1
这样的权重分布,而后者我们更喜欢。因此模型通过除以
d
m
o
d
e
l
\sqrt{d_{model}}
dmodel缩放点积结果,以达到期望的目的。
掩码注意力机制如何实现
自回归(AR Model):自回归模型是用自身做回归变量的过程,即利用前期若干时刻的随机变量的线性组合来描述以后某时刻随机变量的线性回归模型,它是时间序列中的一种常见形式。
在解码器decoder
中,为了保证本次query
的预测仅与之前的序列信息有关,因此采用掩码mask
来处理生成的注意力分数结果,将本次query
之后的所有query
的注意力分数设置为负无穷。这样在经过softmax
归一化后,这部分的结果就会被置为0,从而保证了自回归。
transformer和rnn在学习长序列上的不同
transformer首先先将qeury
经过注意力层,得到的输出是一个已经包含了所有key
信息聚合的输出,由于得到的输出已经是所有key
的聚合,前馈神经网络MLP
的变换可以照顾到全体key
值并学习最佳的语义变换。
rnn是将前一层的输出作为下一层的输入,以递归的方式来确保照顾到所有key的信息。
- 并行性
- Transformer:由于自注意力机制的并行计算性质,Transformer可以高效地并行计算整个序列,从而加速训练和推断过程。这使得Transformer在处理长序列时更具优势。
- RNN:由于RNN的顺序处理特性,无法进行有效的并行计算,必须按照序列的顺序逐步进行计算。这导致RNN在处理长序列时计算效率较低。
- 长距离依赖
- Transformer:Transformer通过自注意力机制能够同时关注输入序列中的不同位置,使得它能够有效地捕捉长距离的依赖关系。这使得Transformer在处理长距离依赖关系的任务时更为有效。
- RNN:RNN通过隐藏状态的传递来捕捉序列中的依赖关系,但在处理长距离依赖时会面临梯度消失或爆炸的问题。这使得RNN在处理长距离依赖关系时相对困难。
嵌入层为什么要缩放
在嵌入层学习的过程中,不可避免地会将输出学习成一个二阶范数为1的向量。此时,为了方便和position_encoding
相加,将他乘以
d
m
o
d
e
l
\sqrt{d_{model}}
dmodel来增大他的值,使得他的数量级与position_encoding
相似。
为什么要用多头注意力机制
假设模型共有
h
h
h个注意力头,输入的向量维度为
d
m
o
d
e
l
d_{model}
dmodel,多头注意力是指将输入维度通过不同的线性层映射到
d
m
o
d
e
h
\frac{d_{mode}}{h}
hdmode,然后分别通过不同的注意力机制得到
d
m
o
d
e
h
\frac{d_{mode}}{h}
hdmode的输出,最后将这些输出并在一起得到
d
m
o
d
e
l
d_{model}
dmodel维度的输出并投影得到最终输出。
观察左图不难发现,单注意力头的缺陷是没有什么可以学习的参数,为了弥补这样的缺点,右图为模型提供了 h h h次学习机会,用来学习的投影方式,从而使用不同的模式,从而得到不同的计算相似度的方法,尽可能提高模型的学习能力。