[DL笔记] Transformer介绍 Attention机制 李宏毅深度学习

Transformer 李宏毅深度学习

tags: Deep Learning, Transformer, , seq2seq, Attention

笔记内容参考于:https://youtu.be/ugWDIIOHtPA
原文link(我最初的笔记,图较多,建议阅读,要fq ^.^): https://hackmd.io/@abliu/BkXmzDBmr


RNN:

  • 是最经典的处理Sequence的模型,单向RNN或双向RNN等等。
  • RNN的问题:难以平行处理=>就有人提出用CNN取代RNN

CNN取代RNN:

  • CNN filters:每一个三角形代表一个filter输入为seq的一小段,输出一个数值(做内积得到),不同的filter对应seq中不同的部分。
  • 每一个CNN只能考虑有限的内容,RNN能考虑一整个句子
  • 考虑很长的句子:叠很多层CNN,上层的filter就可以考虑较多资讯,因为上层的filter会把下层的filter的输出当作输入
  • 问题:必须叠很多层才有办法做到考虑较长的句子,因此出现了self-attention机制

Self-Attention Layer

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-vINtPja7-1576743293341)(https://i.imgur.com/ma6cYQP.png)]

目的

  • 想取代RNN原本想做的事情,输入输出同RNN,可以输入sequence输出sequence
  • 跟双向RNN有同样能力,可以先偷看过整个sequence,但特别的是 b 1 , b 2 , b 3 , b 4 b^1,b^2,b^3,b^4 b1,b2,b3,b4是同时处理的,不需要一个算完才能算下一个
  • 可以完全取代RNN

以前用RNN发表过的paper已经全部被使用self-attention机制洗一轮了…[name=Li]

Attention机制(参考自[4])

核心思想:

  • 用三元组 < Q , K , V > <Q,K,V> <Q,K,V>代表注意力机制,表示Query和Key的相似性,再根据相似性赋予Value的取值

公式:

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-HGSCtOci-1576743293345)(https://i.imgur.com/uFNNTPY.png)]

Self-attention 思路(本文)

  • input: x 1 , . . . , x 4 x_1,..., x_4 x1,...,x4,是一个sequence
  • 每一个输入先通过一个embedding,乘上一个权重矩阵变成 a 1 , . . . , a 4 a_1,...,a_4 a1,...,a4,把 a 1 , . . . , a 4 a_1,...,a_4 a1,...,a4丢进Self-attention layer
  • 每一个输入都乘上不同的vector: q , k , v q,k,v q,k,v
  • q q q:query(为了去匹配其他人)
    • q i = W q a i q_i=W_qa_i qi=Wqai
  • k k k:key(为了被匹配)
    • k i = W k a i k_i=W_ka_i ki=Wkai
  • v v v:value 被抽取出来的资讯
    • v i = W v a i v_i=W_va_i vi=Wvai
  • 权重 W q W k W v W_q W_k W_v WqWkWv是训练出来的,一开始随机初始化

方法

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Tphroiks-1576743293348)(https://i.imgur.com/8zYZ7ti.png)]

  1. 拿每个query q去对每个key k做attention(吃两个向量, 输出一个分数),其实就是计算q.k的相似度Similarity。
    • Scaled Dot-Product : S ( q 1 , k 1 ) S(q_1,k_1) S(q1,k1)得到 α 1 , 1 \alpha_{1,1} α1,1 S ( q 1 , k 2 ) S(q_1,k_2) S(q1,k2)得到 α 1 , 2 \alpha_{1,2} α1,2
    • α 1 , i = q 1 ・ k i / d \alpha_{1,i}=q_1・k_i /\sqrt{d} α1,i=q1ki/d
    • d代表q和k的dimension,只是论文中作者使用的小技巧
  2. 再做Softmax normalization(归一化)
  3. 把得到的 α ^ \hat{\alpha} α^ v v v相乘得到 b b b,相当于做weighted sum
  4. 上图中得到的 b 1 b_1 b1就是所求sequence的第一个vector(word或character)
  5. 每个output vector都用了整个sequence的资讯

===

Self-attention 平行化处理

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9sVKC8dP-1576743293359)(https://i.imgur.com/uCc1ru1.png)]

q i = W q a i q_i=W_qa_i qi=Wqai
k i = W k a i k_i=W_ka_i ki=Wkai
v i = W v a i v_i=W_va_i vi=Wvai

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-RRyMevxe-1576743293366)(https://i.imgur.com/tNyNAhC.png)]

  1. a 1 , . . . , a 4 a_1,...,a_4 a1,...,a4当作一个矩阵 I I I,与权重矩阵 W q W_q Wq相乘得到 q 1 , . . . , q 4 q_1,...,q_4 q1,...,q4,当作一个矩阵 Q Q Q。相同的矩阵 K , V K,V K,V也是同样方式,由 q , k q,k q,k a a a相乘得来的
  2. α 1 , 1 = k 1 T . q 1 \alpha_{1,1}=k_1^T.q_1 α1,1=k1Tq1
    α 1 , 2 = k 2 T . q 1 \alpha_{1,2}=k_2^T.q_1 α1,2=k2Tq1

    所以把 k 1 , . . . k 4 k_1,...k_4 k1,...k4叠一起变成矩阵 K K K,同乘以 q 1 q_1 q1
    也把 q 1 , . . . q 4 q_1,...q_4 q1,...q4叠一起变成矩阵 Q Q Q,得到 α \alpha α集合成的矩阵 A A A,就是Attention,做Softmax后变成 A ^ \hat{A} A^
  3. 每一个time step中,两两vector之间都有attention

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-EFdCDYaA-1576743293368)(https://i.imgur.com/wx4mdTE.png)]

  1. 计算V、A hat的weighted sum,就得到b,b集合成的矩阵就是输出的矩阵 O O O

Self-attention Layer做的事情

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-n42FwiKx-1576743293371)(https://i.imgur.com/56JpMo7.png)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-ozo7C8LW-1576743293375)(https://i.imgur.com/uZLy5zJ.png)]

转换成矩阵乘法,就可以使用GPU来加速运算了

Multi-head Self-attention

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-U5Wg0nBF-1576743293380)(https://i.imgur.com/4c9iFPJ.png)]

以2 heads为例

  • 2个head就是把 q , k , v q,k,v q,k,v分裂成两个 q , k , v q,k,v q,k,v,而 q i , 1 q_{i,1} qi,1只会跟 k i , 1 k_{i,1} ki,1相乘得到 α i , 1 \alpha_{i,1} αi,1,最后计算出 b i , 1 b_{i,1} bi,1
  • 最后把 b i , 1 , b i , 2 b_{i,1},b_{i,2} bi,1,bi,2concat起来,乘上一个transform,做降维得到最终的 b i b_i bi

每个head所关注的资讯不同,有的只关心local资讯(邻居的资讯),有个只关心global(较长时间)资讯等等。

Positional Encoding

天涯若比邻

在注意力机制中,输入句子的词的顺序如何是没差的。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-2gxGGYhP-1576743293382)(https://i.imgur.com/LTmJC97.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-BGXif3dA-1576743293388)(https://i.imgur.com/7BQOS1a.png)]

  • 没有位置资讯=>所以有一个唯一的位置向量 e i e_i ei,不是学出来的而是人设置的。
  • 其他方法:使用one-hot encoding表示的 p i p_i pi x i x_i xi表示其位置

Seq2seq with Attention

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-gn7nlXDd-1576743293392)(https://i.imgur.com/vMWuegd.png)]

原始seq2seq2 model由两个RNN分别组成了Encoder、Decoder,可以应用于机器翻译。

上图中原本Encoder里面是双向RNN,Decoder里面是一个单向RNN,下图把两个都用Self-attention layer取代,可以到达一样的目的而且可以平行运算。

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-XAip1lvE-1576743293395)(https://i.imgur.com/UPAlIwM.png)]

细看Transformer Model

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-xkjPeBbq-1576743293399)(https://i.imgur.com/X0IgIjE.png)]

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5rawATMJ-1576743293406)(https://i.imgur.com/Vt3iFUR.png)]

Encoder的部分
  1. Input通过Input Embedding,考虑位置资讯,加上人为设置的Positional Encoding,进入会重复N次的block

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-8SEssStW-1576743293408)(https://i.imgur.com/Qou2NfM.png)]

  1. Multi-head:进到Encoder里面,他是Multi-head Attention的,也就是q,k,v有多个,在里面做qkv个别乘以a的运算,算出 α \alpha α 最后得到 b b b

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-OfXlPBc9-1576743293414)(https://i.imgur.com/AEWD7zx.png)]

  1. Add & Norm([3]残差连接residual connection):把Multi-head attention的input a a a和output b b b加起来得到 b ′ b' b,再做[1]Layer Normalization
  2. 计算完后丢到前向传播,再经过一个Add & Norm
Decoder的部分

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-qxJY60OQ-1576743293416)(https://i.imgur.com/Jy5uxlE.p ng)]

  1. Decoder input为前一个time step的output,通过output embedding,考虑位置资讯,加上人为设置的positional encoding,进入会重复n次的block
  2. Masked Multi-head Attention:做Attention,Masked表示只会attend到已经产生出来的sequenc e,再经过Add & Norm Layer
  3. 再经过Multi-head Attention Layer,attend到之前Encoder的输出,然后再进到Add & Norm Layer
  4. 计算完丢到Feed Forward前向传播,再做Linear和Softmax,产生最终输出

Attention Visualization

single-head

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-Fq0NgFEU-1576743293421)(https://i.imgur.com/Agvn0v5.png)]
文字俩俩之间的关系,线条越粗代表关联越深

Multi-head

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-tiNjHnUT-1576743293424)(https://i.imgur.com/43k2M4X.png)]
用不同组的q.k配对出来的结果有所不同,代表不同组的q.k拥有不同资讯(下面local or 上面global)

应用

Summarizer By Google

input为一堆文档,output为一篇文章(summarize)

Universal Transformer

横向(时间上)是Transformer,纵向是RNN

Self-attention GAN

用在影像生成上

参考资料

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-3Ycg2UFn-1576743293428)(https://i.imgur.com/n2nKumo.png)]

[1]. Layer Norm https://arxiv.org/abs/1607.06450 不需要考虑batch,希望各个不同维度的资料平均=0,变异数=1,一般来说Layer Norm会搭配RNN使用

[2] Batch Norm https://www.youtube.com/watch?v=BZh1ltr5Rkg 对同一batch中不同data做normalization,希望平均数=0,变异数=1

[3] Residual Connection 残差连接:将输出表示成输入和输入的非线性变换的线性叠加

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值