说一下Transformer:

Transformer是由encoder模块各decoder模块构成的,这两个模块都是由6各相同的子模块组成。
1.它的encoder模块首先是embedding层,然后是基于三角函数的绝对位置编码
2.接下来进入第一个子模块,首先是多头自注意力机制,Transformer将512维的embedding转换成8*64的embedding,通过计算各单词之间的注意力权重加权生成新的向量表示,然后进行残差连接和层归一化操作,接下来将embeding送入前馈神经网络层,最后将embedding再进行残差连接和层归一化操作,送入到第二个相同的子模块。
3.decoder模块中是掩码自注意力机制,在交互时,由当前时刻输入的embedding提供query向量,由encoder提供key,value向量,通过cross attention操作得到当前单词的上下文表示。

self-attention计算过程:

1.将单词转化成embedding向量
2.将各单词的embedding向量通过不同的线性变换生成query,key,value向量
3.通过self-attention公式计算各单词之间的注意力权重,然后加权各单词的embedding向量

解释self-attention公式:

s o f t m a x ( q u e r y ∗ k e y d k ) v a l u e softmax(\frac{query*key}{\sqrt d_k})value softmax(d kquerykey)value
softmax作用:使得各单词输出的注意力权重和为1
为什么要除以根号d_k:因为在点积操作之后,方差会变大,经过softmax之后,容易出现梯度消失现象,除以d_k后,能降低方差。

说一下多头注意力机制:

多头注意力机制:能够捕获embeding不同子空间的特征,可以让模型关注不同方面的信息,更有助于特征的提取。

为什么要用层归一化:

1.为了加速训练,前向传播的输出分布更加稳定。
2.每个样本的长度一般不同,如果使用BN的话,后面的单词在计算均值和方差时batchsize就变得越来越小,导致计算出现偏差。LN不受样本数量的限制。
BN和LN的区别:BN是在batch这一维度做归一化,LN是在hidden这一维度做归一化。
在transformer或bert中,LN是对单个样本单个单词的所有维度做归一化,有点类似于IN
为什么需要残差连接?
为了解决多层神经网络训练困难的问题,将前一层的信息无差的传递到下一层,避免了信息丢失的问题。

decoder为什么要掩码注意力机制

1.为了保证训练阶段和测试阶段的一致,因为在预测阶段,模型看不到当前时刻的输入和未来时刻的单词,所以需要将当前时刻之后的单词mask掉。
(如果不mask掉的话,后面的输入也会对当前时刻的输出有贡献)
Teacher forcing:加速收敛,减少训练时间
为什么需要padding mask
为了不考虑padding位置上的信息,在softmax操作之前需要进行padding mask
将注意力权重矩阵中padding位置上权重替换成无穷小,softmax之后这些位置就会变成0
Transformer相关-LMLPHP#

10-25 15:34