学习视频:Transformer论文逐段精读【论文精读】_哔哩哔哩_bilibili
(看了一个小时,后面的positional embedding没看)
Transformer可以用在图像、视频、文本。。。。。
编码器与解码器
编码器encoder:将输入转换为网络可以辨识的向量(每次可以看到完整的输入)
解码器encoder:使用了自回归,一个一个生成文字。即对于一组输入文字,比如(我爱你),可以通过(我爱),生成(你)。即过去时刻的输出,可以当作当前时刻的输入。(每次只能看到前面时刻的输入,不能看到后面的文字)
为什么要用LayerNorm而不用BatchNorm?
BN:每列就是特征,每次让每个mini_batch里面每一列的特征的均值为0,方差为1。在训练时就是算每一个minibatch的均值和方差,然后减去这个均值本身,让其均值最后为0,再除以方差本身,这样方差就为1。都是可学习参数,它们两可以尽量保证均值为0,方差为1。
LN:每行就是样本,让每行(每个样本)对特征的均值为0,方差为1
在NLP,每个样本的长度会变换(语句长度不一样):
BN在样本变化比较大时,每个minibatch的均值和方差的变化也大。而实际预测时,若遇到一个非常长的、训练集没遇到过的样本,则其均值和方差会不好算。
LN就是算每个样本的均值和方差。实际预测的时候也就是在每个样本里面算均值方差,稳定性会更好。
解码器:
解码器有个Mask,因为解码器每次只能看到t时刻前面的输入,不能看到t时刻后面的文字,所以要用mask把t时刻以后的输入遮住。
Attention
Scaled Dot-Product Attention:
q=k=dk,v=dv
- 计算时就是让每个qurey和value作内积(向量内积),若两个向量长度相等,则内积值越大,说明两个向量相似度越高。
- 向量长度long=
- 权重=softmax(long),得到n个非负、和为1的权重
- 将权重加权到value上,得到输出
其实就是通过两次向量内积得到输出,实际使用时,qkv都是序列
Multi-Head Attention:
其实类似于CNN的输出通道,是可以有多个的
并行地执行注意力函数,产生dv-dimensional输出值。这些被连接并再次投影,产生最终值
Applications of Attention in our Model:
对于self-attention:q、k、v其实是一个东西,就是该序列本身。所以相似度求取时,和自己本身对应的那个序列肯定是1。
Position-wise Feed-Forward Networks(MLP):
其实就是两层线性层:W1把512投影成2048,因为有残差,W2又把2048投影成512
Transformer的大致流程:
attention把序列的特征抓取出来,作汇聚,而MLP可以把它映射成我们想要的语义空间。