笔记:ML-LHY: Transformer / Self-attention

Transformer主要思想是Self-attention,详细介绍了Self-attention过程,简单介绍Transformer框架
pdf 视频

Sequence

在这里插入图片描述

用RNN很难并行训练/推理,计算 b 4 b^4 b4时必须先计算 b 1 , b 2 , b 3 b^1,b^2,b^3 b1,b2,b3
考虑用CNN,虽然可以做到并行训练/推理,但是需要叠很多层,才能包含长序列。
而使用Self-Attention,可以取得RNN,并且是可以并行计算。

Self-Attention

在这里插入图片描述
使用Self-Attention Layer, b i b^i bi包含了所有输入信息,同时 b 1 , b 2 , b 3 , b 4 b^1, b^2, b^3, b^4 b1,b2,b3,b4可以同时计算。

在这里插入图片描述
Attention is all you need.😏
先对输入的word做Embedding,如何做embedding可以回顾(笔记:ML-LHY-14: Unsupervised Learning - Word Embedding),这样就把输入word( x i x^i xi)转成一样长的vector( a i a^i ai)。对 a i a^i ai乘上不同的matrix:

  • W q W^q Wq,得到q:query,去匹配其他key(包括自己的) q i = W q a i q^{i}=W^{q} a^{i} qi=Wqai

  • W k W^k Wk,得到k:key,被其他query匹配(包括自己的) k i = W k a i k^{i}=W^{k} a^{i} ki=Wkai

  • W v W^v Wv,得到v:value,vector( a i a^i ai)所包含的信息 v i = W v a i v^{i}=W^{v} a^{i} vi=Wvai

以上 q , k , v q,k,v q,k,v都是长度一样的向量

attention过程就和以往一样,先match,然后softmax,最后weigh sum

match:
在这里插入图片描述
每个输入word( x i x^i xi)对应在 x j x^j xj上的初始attention值 α \alpha α的输出为:
α j , i = q j ⋅ k i / d \alpha_{j, i}=q^{j} \cdot k^{i} / \sqrt{d} αj,i=qjki/d
除以 d \sqrt{d} d ,是为了防止维度过高内积值太大。

进行softmax:
在这里插入图片描述
α ^ j , i = exp ⁡ ( α j , i ) / ∑ m = 1 L exp ⁡ ( α j , m ) \hat{\alpha}_{j, i}=\exp \left(\alpha_{j, i}\right) / \sum_{m=1}^L \exp \left(\alpha_{j, m}\right) α^j,i=exp(αj,i)/m=1Lexp(αj,m)

最后进行weight sum:
在这里插入图片描述
输入 x j x^j xj对应的输出:
b j = ∑ i = 1 L α ^ j , i v i b^{j}=\sum_{i=1}^L \hat{\alpha}_{j, i} v^{i} bj=i=1Lα^j,ivi

综合的式子:
b j = ∑ i = 1 L ( exp ⁡ ( α j , i ) / ∑ m = 1 L exp ⁡ ( α j , m ) ) v i = ∑ i = 1 L [ exp ⁡ ( q j ⋅ k i / d ) / ∑ m = 1 L exp ⁡ ( q j ⋅ k m / d ) ] v i \begin{aligned} b^{j}&=\sum_{i=1}^L (\exp \left(\alpha_{j, i}\right) / \sum_{m=1}^L \exp \left(\alpha_{j, m}\right)) v^{i}\\ &=\sum_{i=1}^L \left[\exp \left(q^{j} \cdot k^{i} / \sqrt{d}\right) / \sum_{m=1}^L \exp \left(q^{j} \cdot k^{m} / \sqrt{d}\right)\right] v^{i} \end{aligned} bj=i=1L(exp(αj,i)/m=1Lexp(αj,m))vi=i=1L[exp(qjki/d )/m=1Lexp(qjkm/d )]vi

矩阵形式:
在这里插入图片描述
在这里插入图片描述
首先对embedding输出的 a i a^i ai并列,可以得到矩阵 I I I
I = [ a 1 a 2 . . . ] I=\left[ a^1 a^2 ...\right] I=[a1a2...]

各种乘不同矩阵得到输出矩阵 Q , K , V Q,K,V Q,K,V
Q = [ q 1 q 2 . . . q i ] = W q I = W q [ a 1 a 2 . . . q i ] Q = \left[ q^1 q^2 ... q^i\right] = W^q I = W^q \left[ a^1 a^2 ...q^i\right]\\ Q=[q1q2...qi]=WqI=Wq[a1a2...qi]

K = [ k 1 k 2 . . . k i ] = W k I = W k [ k 1 k 2 . . . k i ] K = \left[ k^1 k^2 ...k^i\right] = W^k I = W^k \left[ k^1 k^2 ...k^i \right]\\ K=[k1k2...ki]=WkI=Wk[k1k2...ki]

V = [ v 1 v 2 . . . v i ] = W v I = W v [ v 1 v 2 . . . v i ] V = \left[ v^1 v^2 ... v^i \right] = W^v I = W^v \left[ v^1 v^2 ... v^i \right]\\ V=[v1v2...vi]=WvI=Wv[v1v2...vi]


q i = W q a i q^{i}=W^{q} a^{i} qi=Wqai

k i = W k a i k^{i}=W^{k} a^{i} ki=Wkai

v i = W v a i v^{i}=W^{v} a^{i} vi=Wvai


match:在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
每个输入word( x i x^i xi)对应在 x j x^j xj上的初始attention值 α \alpha α的输出为:
[ α 1 , 1 α 2 , 1 . . . α j , 1 α 1 , 2 α 2 , 2 . . . α j , 2 . . . . . . . . . . . . α 1 , i α 2 , i . . . α j , i ] = [ k 1 k 2 . . . k i ] [ q 1 q 2 . . . q j ] A = K T Q \begin{bmatrix} \alpha_{1,1} & \alpha_{2,1} & ... & \alpha_{j,1}\\ \alpha_{1,2} & \alpha_{2,2} & ... & \alpha_{j,2}\\ ... & ... & ... & ...\\ \alpha_{1,i} & \alpha_{2,i} & ... & \alpha_{j,i} \end{bmatrix} = \begin{bmatrix} k_{1} \\ k_{2} \\ ...\\ k_{i} \end{bmatrix}\left[ q^1q^2...q^j \right]\\ A=K^TQ α1,1α1,2...α1,iα2,1α2,2...α2,i............αj,1αj,2...αj,i=k1k2...ki[q1q2...qj]A=KTQ


α j , i = q j ⋅ k i / d \alpha_{j, i}=q^{j} \cdot k^{i} / \sqrt{d} αj,i=qjki/d


进行softmax:

在这里插入图片描述

[ α ^ 1 , 1 α ^ 2 , 1 . . . α ^ j , 1 α ^ 1 , 2 α ^ 2 , 2 . . . α ^ j , 2 . . . . . . . . . . . . α ^ 1 , i α ^ 2 , i . . . α ^ j , i ] ⇐ [ α 1 , 1 α 2 , 1 . . . α j , 1 α 1 , 2 α 2 , 2 . . . α j , 2 . . . . . . . . . . . . α ^ 1 , i α 2 , i . . . α j , i ] A ^ ⇐ A \begin{bmatrix} \hat{\alpha}_{1,1} & \hat{\alpha}_{2,1} & ... & \hat{\alpha}_{j,1} \\ \hat{\alpha}_{1,2} & \hat{\alpha}_{2,2} & ... & \hat{\alpha}_{j,2} \\ ... &... & ... &... \\ \hat{\alpha}_{1,i} & \hat{\alpha}_{2,i} & ... & \hat{\alpha}_{j,i} \end{bmatrix} \Leftarrow \begin{bmatrix} \alpha_{1,1} & \alpha_{2,1} & ... & \alpha_{j,1}\\ \alpha_{1,2} & \alpha_{2,2} & ... & \alpha_{j,2}\\ ... & ... & ... & ...\\ \hat{\alpha}_{1,i}& \alpha_{2,i} & ... & \alpha_{j,i} \end{bmatrix} \\ \hat{A} \Leftarrow A α^1,1α^1,2...α^1,iα^2,1α^2,2...α^2,i............α^j,1α^j,2...α^j,iα1,1α1,2...α^1,iα2,1α2,2...α2,i............αj,1αj,2...αj,iA^A


α ^ j , i = exp ⁡ ( α j , i ) / ∑ m = 1 L exp ⁡ ( α j , m ) \hat{\alpha}_{j, i}=\exp \left(\alpha_{j, i}\right) / \sum_{m=1}^L \exp \left(\alpha_{j, m}\right) α^j,i=exp(αj,i)/m=1Lexp(αj,m)


最后进行weight sum:
在这里插入图片描述
在这里插入图片描述
[ b 1 b 2 . . . b j ] = [ v 1 v 2 . . . v i ] [ α ^ 1 , 1 α ^ 2 , 1 . . . α ^ j , 1 α ^ 1 , 2 α ^ 2 , 2 . . . α ^ j , 2 . . . . . . . . . . . . α ^ 1 , i α ^ 2 , i . . . α ^ j , i ] O = V A ^ [b^1 b^2 ... b^j] =[v^1 v^2 ... v^i] \begin{bmatrix} \hat{\alpha}_{1,1} & \hat{\alpha}_{2,1} & ... & \hat{\alpha}_{j,1} \\ \hat{\alpha}_{1,2} & \hat{\alpha}_{2,2} & ... & \hat{\alpha}_{j,2} \\ ... &... & ... &... \\ \hat{\alpha}_{1,i} & \hat{\alpha}_{2,i} & ... & \hat{\alpha}_{j,i} \end{bmatrix} \\ O=V\hat{A} [b1b2...bj]=[v1v2...vi]α^1,1α^1,2...α^1,iα^2,1α^2,2...α^2,i............α^j,1α^j,2...α^j,iO=VA^


b j = ∑ i = 1 L α ^ j , i v i b^{j}=\sum_{i=1}^L \hat{\alpha}_{j, i} v^{i} bj=i=1Lα^j,ivi


最后综合就是:

在这里插入图片描述
一堆矩阵乘法,用 GPU 可以加速

Multi-head Self-attention

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

可以进行分裂,不同的head产生的attention在不一样的地方。

Positional Encoding

可以发现在self-attention中不存在位置信息,而对于sequence来说,位置信息很重要。
在这里插入图片描述
e i e^i ei求法:
先对位置进行编码(one-hot):
p i = [ . . . 0 1 0 . . . ] T p^{i}=[...\quad0\quad1\quad0\quad... ]^T pi=[...010...]T
x i x^i xi拼接,然后乘W,W可以分解为 W I W^{I} WI W P W^{P} WP,而 e i = W P p i e^i = W^{P} p^{i} ei=WPpi

Seq2seq with Attention

在这里插入图片描述

可视化过程:
在这里插入图片描述

https://ai.googleblog.com/2017/08/transformer-novel-neural-network.html

Transformer

在这里插入图片描述
Batch normalization:在指定batch内,对同一维的数据做normalization,希望均值和方差为0
Layer normalization:不需要指定batch,对不同维数据做normalization,希望均值和方差为0

Masked Multi-Head Attention:这边attend是在decoder的输出上,所以只能对已生成的sequence做attention

Universal Transformer

在这里插入图片描述

https://ai.googleblog.com/2018/08/moving-beyond-translation-with.html

基于attention,但是在深度轴上是一个RNN

以上参考李宏毅老师视频和ppt,仅作为学习笔记交流使用

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值