Attention Is All You Need
2014 - attention -《Neural Machine Translation by Jointly Learning to Align and Translate》-ICLR(Bengio)
2017 - self-attention -《Attention is all you need》- Transformer-谷歌
self-attention 计算 :
C
=
A
t
t
e
n
t
i
o
n
(
Q
,
K
,
V
)
=
softmax
Q
K
T
d
k
∗
V
C = Attention(Q, K, V ) = \text{softmax} \frac{Q K^T}{\sqrt{dk}} * V
C=Attention(Q,K,V)=softmaxdkQKT∗V
其中:
d
k
\sqrt{dk}
dk为 scaling factor, 防止
Q
K
T
QK^T
QKT矩阵元素方差过大。
Q
.
s
i
z
e
(
)
=
[
M
,
D
]
Q.size() = [M, D]
Q.size()=[M,D]: Query
K
.
s
i
z
e
(
)
=
[
N
,
D
]
K.size() = [N, D]
K.size()=[N,D]: Key
V
.
s
i
z
e
(
)
=
[
N
,
F
]
V.size() = [N, F]
V.size()=[N,F]: Value
Key 和 Value 是相同序列(含有N个元素在)不同高维空间下的表达,表征的本质对象是一致的。
self-attention:当
Q
,
K
,
V
Q, K, V
Q,K,V 为[同一个高维空间]+[同一集合特征]
(
D
=
F
,
N
=
M
)
(D=F, N=M)
(D=F,N=M) , 计算V中元素间attention(加权求和)特征, 如上QKV 原始元素集合相同,即编码。
C
.
s
i
z
e
(
)
=
[
N
,
F
]
C.size() = [N, F]
C.size()=[N,F]是集合元素
{
S
0
,
S
1
,
.
.
.
,
S
N
}
\{S_0, S_1,...,S_N\}
{S0,S1,...,SN} 自注意力编码[特征轴各维度 收集到 每个成员在该位置特征加权和 ,后序可直接用于
{
S
0
,
S
1
,
.
.
.
,
S
N
}
\{S_0, S_1,...,S_N\}
{S0,S1,...,SN} 相关任务的解码。
cross-attention: Qurey 目标序列,Key Value 源序列-(源序列和目标序列长度可能不一致 M != N)
Attention是将query和key映射到同一高维空间中去计算相似度,而对应的multi-head attention把query和key映射到高维空间 的不同子空间 中去计算相似度。
FFN
1 Introduction
递归神经网络(Recurrent Neural Network)在序列建模领域占据了稳固的地位。递归模型通常沿着输入和输出序列的符号位置进行计算(factor computation) 。在计算的过程中将位置和时间步长对齐,生成一系列的隐状态 h t h_t ht。隐状态 h t h_t ht是前一个时刻隐状态 h t − 1 h_{t-1} ht−1和当前 t t t时刻位置信息的函数。这种固有的序列性质妨碍了样本的并行训练,在序列很长时这种串行性的缺点将变得十分明显。虽然最近有许多工作例如’因式分解’(factorization)[21] 条件计算(conditional computation)[32]致力于解决递归网络计算效率的问题,并且取得了良好的效果。但是递归网络的计算效率依旧是一个基本的限制条件。
注意力机制"attention mechanism"已经成为很多 序列建模/转换模型的一个重要组成部分。引入注意力机制之后,使得这些模型能够建模依赖性’dependencies’ 而不需要考虑’元素’在输入/输出序列中的位置。目前的这些注意力机制都是和递归神经网络一同出现的。
本文提出的Transformer模型,抛弃了递归的结构,完全依赖注意力机制来提取输入和输出序列之间的全局依赖关系。Transformer方便更大程度并行化,通过8个P100 训练12小时就能获得一个拥有先进水平翻译质量的模型。
【To be done】
2 Background
3 Model Architecture
参考文档:
- 论文解读:Attention is All you need
- 论文笔记:Attention is all you need
- Transformer–论文翻译:Attention Is All You Need 中文版
- 注意力机制Attention详解
- Attention and Self-Attention
- 【经典精读】万字长文解读Transformer模型和Attention机制
https://blog.csdn.net/m0_63097763/article/details/132293568 - 输出需要更改一下
output_a = torch.matmul(attentions_b, input_b) # (batch_size, seq_len_a, input_dim_b)
改为
output_a = torch.matmul(attentions_a, input_b) # (batch_size, seq_len_a, input_dim_b)