[Transformer]Transformer-李宏毅

Section A Background

seq2seq with self-attention
RNN处理sequence
RNN输入 vector sequence, 输出 vector sequence
RNN的问题:不容易被并行化,只能序列化

usiong CNN to replace RNN->为了并行化
RNN和CNN都能实现 输出B1-B4序列;
更高层的filter可以考虑更大范围的依赖关系
CNN的缺点:需要叠很多层 才能有较大的感受野
在这里插入图片描述小结:
RNN可以捕捉长程关系,但不能并行;
CNN可以并行,但不善于捕捉长程关系,需要堆叠很多层。
使用self-attention layer可以替代RNN
Transformer本身不包含序列的顺序信息,因此需要在输入时增加positional embedding
Transformer重点在self-attention结构,mulit-head旨在捕获单词之间多种维度上的依赖关系。

Section II Self-Attention Layer

如何trade-off—self-attention layer:
《Attention is all you need》
self-attention层的输入处理序列,输出也是序列。
在这里插入图片描述在这里插入图片描述
在这里插入图片描述在这里插入图片描述

每一个输出bi都是基于整个输入序列得到的;但不同的bi是并行输出的。
Step 1:
每一个输入 先经过embedding,然后在乘上三个不同的transformation,产生三个不同的vector(Q,K,V)
q:query(to match others)
k:key(to be matched)
v:information to be extracted
Step 2:
每一个q对每一个k做attention(向量的夹角、相似度)–看这两个向量有多匹配->a11,a12,a13,a14…
每个head的q,k,v都不一样,可以理解为用不同的卷积核提取不同的特征
在这里插入图片描述
d:是q和k的维度,为什么要scaled?—归一化
为了避免inner product之后variance太大
Step 3:
将所有的a经过softmax后得到注意力系数α
所有head的该系数 乘以v 得到最后的输出bi
精妙之处:
(1)因为v是包含整个序列的,因此生成的bi是考虑了整个序列的;
(2)通过控制α11,α12,α13等的值就可以控制信息流的输入
比如只考虑local信息,则只保留α11; 考虑global信息,α11,α12,α13,α14都考虑在内
(3)所有的bi都是并行输出的

Section III Self-Attention的并行化

在这里插入图片描述Step 1:
计算Q,K,V细节:
a1Wq得到q1;a2Wq得到q2…
因此a1,a2,a3,a4可以拼接为一个整体I,他们的Wq可以拼接为一个大的Wq,输出Q按column分为是q1,q2,q3,q4.
K,V同理。

Step 2:
计算α的细节
q1*不同的ki得到αi
因此不同的ki也可以拼成一个大的K;大α矩阵按列拆分成α1,α2,α3,α4;
qi也是可以拼接成一个大的Q
A=K^T * Q
在这里插入图片描述在这里插入图片描述

Step 3:获得的A矩阵 经过softmax后获得注意力系数α矩阵A^

Step 4:V矩阵的每一个v根据注意力系数矩阵A^的值做weighted sum,A ^ 按列拆分。
weighted sum结果则是b1,b2,b3,b4组成的输出矩阵O

在这里插入图片描述

并行化的OverView:
Wq,Wk,Wv就是需要学习的参数
在这里插入图片描述

Section IV Multi-head Self-Attention

以two-head为例,需要将Q,K,V进一步分裂成两个矩阵,like 需要学习的Wq,Wk,Wv有多组(2组)->多通道的思想
multi-head的好处:不同的head关注的点是不一样的(local or global)

在这里插入图片描述

Section V Positional Encoding

No position information in self-attention[输入序列的顺序是没有考虑在内的]-如何加入位置信息?
Way 1:
ei表征位置信息,ei维度与ai维度一致,相加;ei:人工设定;
Way 2:
另外一种加入位置信息的方式:
append一个one-hotvector pi 表征位置

在这里插入图片描述

Section VI Transformer

在这里插入图片描述在这里插入图片描述

分为Encoder和Decoder部分
Encoder:
Step 1:将输入序列通过embedding转化为vector,并且附加位置信息。
Step 2:随后送入 multi-head attention模块 获得序列化输出
Step 3:将self-attention的输入和输出先经过elementwise-addition再经过layer norm
参考:Batch Norm vs Layer Norm
Step 4:将add&norm的结果经过feed forward
Step 5:将feed fordward的输入和输出进行add&norm

Decoder:
输入Decoder的是前一时间步timestep的输出
Step 1:将输入序列通过embedding转化为vector,并且附加位置信息。
Step 2:随后送入 multi-head attention模块 获得序列化输出,注意使用的是masked self-attention-保证输出的因果性,因为后面时间步的结果还没生成呢
Step 3:ADD & Norm
Step 4:将Encoder的输出 进行multi-head attention
这样做的好处是 使用了encoder的结果,使得每一个单词都可以利用到encoder所有单词的信息,而这些信息是无需mask的
Step 5:将前一时间步的self-attention结果和当前时间步Encoder的self-attention结果 进行Add&Norm
Step 6:进行feed forward+Add&Norm

Step 7:经过Linear和softmax获得最终预测输出

Section VII Transformer-Visualization Results

在这里插入图片描述
在这里插入图片描述
multi-head可以看到不同head关注不同的特征 green-global的关联;red-local的关联

Appendix

Batch Normalization

批归一化:目的为了解决网络中协变量偏移的问题,将每一批的分布拉倒一个一致的分布。
在这里插入图片描述

Layer Normalization

主要用在序列处理,BN并不适用于RNN这种动态网络和batchsize较小的情况。
Layer Normalization的归一化的维度与BN是垂直的。
BN:取不同样本的同一个通道的特征做归一化
LN:取同一个样本不同通道的特征做归一化。
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值