从Attention到Bert——1 Attention解读

下一篇从Attention到Bert——2 transformer解读

文章目录

最早,attention诞生于CV领域,真正将其发杨光大的还是在NLP领域,自2018年Google的bert和OPENAI的GPT大火之后,大家才开始注意到背后的transformer以及Attention。

1 Attention的发展历史

Attention 的发展可以粗暴地分为两个阶段。
ref from:https://zhuanlan.zhihu.com/p/77307258

2015-2017年

自从 attention 提出后,基本就成为 NLP 模型的标配,各种各样的花式 attention 铺天盖地。不仅在 Machine Translation,在 Text summarization,Text Comprehend(Q&A), Text Classification 也广泛应用。奠定基础的几篇文章如下:

2015年 ICLR 《Neural machine translation by jointly learning to align and translate》首次提出 attention(基本上算是公认的首次提出),文章提出了最经典的 Attention 结构(additive attention 或者 又叫 bahdanau attention)用于机器翻译,并形象直观地展示了 attention 带来源语目标语的对齐效果,解释深度模型到底学到了什么,人类表示服气。

2015年 EMNLP 《Effective Approaches to Attention-based Neural Machine Translation》在基础 attention 上开始研究一些变化操作,尝试不同的 score-function,不同的 alignment-function。文章中使用的 Attention(multiplicative attention 或者 又叫 Luong attention)结构也被广泛应用。

2015年 ICML 《Show, Attend and Tell: Neural Image Caption Generation with Visual Attention》是 attention(提出hard/soft attention的概念)在 image caption 上的应用,故事圆满,符合直觉,人类再次表示很服气。

在上面几篇奠基之作之上,2016和2017年 attention 开枝散叶,无往不利。Hiearchical Attention,Attention over Attention,multi-step Attention……这些或叫得上名的或叫不上名。

2017年-至今是属于 transformer 的时代。基于 transformer 强大的表示学习能力,NLP 领域爆发了新一轮的活力,BERT、GPT 领跑各项 NLP 任务效果。奠基之作无疑是:

2017年 NIPS《Attention is all you need》提出 transformer 的结构(涉及 self-attention,multi-head attention)。基于 transformer 的网络可全部替代sequence-aligned 的循环网络, 实现 RNN 不能实现的并行化,并且使得长距离的语义依赖与表达更加准确(据说2019年的 transformer-xl《Transformer-XL:Attentive Lanuage Models Beyond a fixed-length context》通过片段级循环机制结合相对位置编码策略可以捕获更长的依赖关系)。

2 Attention的原理

Attention 经常会和 Encoder–Decoder 一起说。
参见《一文看懂 NLP 里的模型框架 Encoder-Decoder 和 Seq2Seq》

从Attention到Bert——1 Attention解读
但是,Attention 并不一定要在 Encoder-Decoder 框架下使用的,他是可以脱离 Encoder-Decoder 框架的。

下面的图片则是脱离 Encoder-Decoder 框架后的原理图解。

从Attention到Bert——1 Attention解读
Attention 原理的3步分解:
可以描述query为将查询和一组键key值value对映射到输出y,其中查询、键、值和输出都是向量。输出是作为值的加权和计算的,其中分配给每个值的权重是通过查询与相应键的兼容性函数计算的。
从Attention到Bert——1 Attention解读
  1. 第一步: query 和 key 进行相似度计算,得到权值
    相似度计算有多种,最简单就是
    点乘、矩阵相乘:s ( p , q ) = q T k s(p,q)=q^Tk s (p ,q )=q T k
    cos函数:s ( q , k ) = q T k ∥ q ∥ ⋅ ∥ k ∥ s(q, k)=\frac{q^{T} k}{\|q\| \cdot\|k\|}s (q ,k )=∥q ∥⋅∥k ∥q T k ​
  2. 第二步:将权值进行归一化,得到直接可用的权重
    α i = softmax ⁡ ( s ( k i , q ) ) \alpha_{i}=\operatorname{softmax}\left(s\left(k_{i}, q\right)\right)αi ​=softmax (s (k i ​,q ))
  3. 第三步:将权重和 value 进行加权求和。
    a t t ( q , k , v ) = ∑ i = 1 N α i v i att(q,k,v)=\sum^{N}_{i=1}\alpha_iv_i a tt (q ,k ,v )=i =1 ∑N ​αi ​v i ​

这也就是文中提到的Scaled Dot-Product Attention。

从Attention到Bert——1 Attention解读
由此推出Attention的公式:
Attention ⁡ ( Q , K , V ) = softmax ⁡ ( Q K ⊤ d k ) V \operatorname{Attention}(\boldsymbol{Q}, \boldsymbol{K}, \boldsymbol{V})=\operatorname{softmax}\left(\frac{\boldsymbol{Q} \boldsymbol{K}^{\top}}{\sqrt{d_{k}}}\right) \boldsymbol{V}Attention (Q ,K ,V )=softmax (d k ​​Q K ⊤​)V

可以逐个向量来看:
Attention ⁡ ( q t , K , V ) = ∑ s = 1 m 1 Z exp ⁡ ( ⟨ q t , k s ⟩ d k ) v s \operatorname{Attention}\left(\boldsymbol{q}{t}, \boldsymbol{K}, \boldsymbol{V}\right)=\sum{s=1}^{m} \frac{1}{Z} \exp \left(\frac{\left\langle\boldsymbol{q}{t}, \boldsymbol{k}{s}\right\rangle}{\sqrt{d_{k}}}\right) \boldsymbol{v}_{s}Attention (q t ​,K ,V )=s =1 ∑m ​Z 1 ​exp (d k ​​⟨q t ​,k s ​⟩​)v s ​
其中Z是归一化因子。事实上q,k,v分别是query,key,value的简写,K,V是一一对应的,它们就像是key-value的关系,那么上式的意思就是通过qt这个query,通过与各个ks内积的并softmax的方式,来得到qt与各个vs的相似度,然后加权求和,得到一个dv维的向量。

因子 √dk 起到调节作用,使得内积不至于太大(太大的话softmax后就非0即1了,不够”soft”了)。

; 3 Multi-Head Attention

这个是Google提出的新概念,是Attention机制的完善。不过从形式上看,它其实就再简单不过了,就是把Q,K,V通过参数矩阵W映射一下,然后再做Attention,把这个过程
重复做h次,结果拼接起来就行了,可谓”大道至简”了。具体来说

head i = Attention ( Q W i Q , K W i K , V W i V ) \text { head }{i}=\text { Attention }\left(\boldsymbol{Q} \boldsymbol{W}{i}^{Q}, \boldsymbol{K} \boldsymbol{W}{i}^{K}, \boldsymbol{V} \boldsymbol{W}{i}^{V}\right)head i ​=Attention (Q W i Q ​,K W i K ​,V W i V ​)
这里 W i Q ∈ R d k × d ~ k , W i K ∈ R d k × d ~ k , W i V ∈ R d v × d ~ v \boldsymbol{W}{i}^{Q} \in \mathbb{R}^{d{k} \times \tilde{d}{k}}, \boldsymbol{W}{i}^{K} \in \mathbb{R}^{d_{k} \times \tilde{d}{k}}, \boldsymbol{W}{i}^{V} \in \mathbb{R}^{d_{v} \times \tilde{d}{v}}W i Q ​∈R d k ​×d ~k ​,W i K ​∈R d k ​×d ~k ​,W i V ​∈R d v ​×d ~v ​ ,然后
MultiHead ⁡ ( Q , K , V ) = Concat ⁡ ( head ⁡ 1 , … , head h ) \operatorname{MultiHead}(\boldsymbol{Q}, \boldsymbol{K}, \boldsymbol{V})=\operatorname{Concat}\left(\operatorname{head}
{1}, \ldots, \text { head }{h}\right)MultiHead (Q ,K ,V )=Concat (head 1 ​,…,head h ​)
最后得到一个 n × ( h d ~ v ) n \times\left(h \tilde{d}
{v}\right)n ×(h d ~v ​) 的序列。所谓”多头”(Multi-Head),就是只多做几次同样的杀情(参数不共享),然后把结果拼接。

4 Self-Attention

自注意力机制就是只有输入X,通过三个变换得到QKV矩阵,然后在根据三步计算注意力得分。

从Attention到Bert——1 Attention解读
从Attention到Bert——1 Attention解读
从Attention到Bert——1 Attention解读

; 为什么需要self-attention

RNN 的长距离依赖比较 tricky:RNN 很强大

  1. 作为 encoder 对长度任意的序列进行特征抽取,基于特征抽取的能力可以胜任分类任务。
  2. 作为Generators 学习 Language Model),其实核心就是长距离依赖gate architectures – 线性操作让信息可以保持并流动,并选择性地让信息通过,可以对长度任意的序列进行表达。

但是这种方式还是比较 tricky。并且这种序列建模方式,
3. 无法对具有层次结构的信息进行很好的表达。.

  1. RNN 由于递归的本质, 导致无法并行

    从Attention到Bert——1 Attention解读
    CNN 在 NLP 中扮演了 n-gram 的 detector 角色,
  2. 虽然层内可以并行。

  3. 但是 CNN 具有 Hierarchical Receptive Field,使得任意任意两个位置之间的长度距离是对数级别的。
  4. 基于的假设是局部信息相互依赖。

所以有没有一种方法,能够做到既能又能还能?

相对于 CNN:

  • 要 constant path length 不要 logarithmic path length ,
  • 要 variable-sized perceptive field,不要固定 size 的 perceptive field;

相对于 RNN:

  • 考虑长距离依赖
  • 还要可以并行!

这就是 self attention。下图可以看到 self-attention 和 convolution 有点儿神似,它摒弃了 CNN 的局部假设,想要寻找长距离的关联依赖。看下图就可以理解 self-attention 的这几个特点:

  • constant path length & variable-sized perceptive field :任意两个位置(特指远距离)的关联不再需要通过 Hierarchical perceptive field 的方式,它的 perceptive field 是整个句子,所以任意两个位置建立关联是常数时间内的。
  • parallelize : 没有了递归的限制,就像 CNN 一样可以在每一层内实现并行。

从Attention到Bert——1 Attention解读

什么是self-attention

  1. QKV 都是对输入 x 的线性映射。但是不能是一样的,不然乘积之后会出现大的更大,小的更小,导致数据分布的方差增大。映射到softmax函数上面导致权重的方差也增大。
  2. score-function 使用 scaled-dot product。
  3. multihead 的方式将多个 head 的输出 z,进行 concat 后,通过线性变换得到最后的输出 z。

从Attention到Bert——1 Attention解读

; 5 Position Embedding

然而,只要稍微思考一下就会发现,这样的模型 并不能捕捉序列的顺序!换句话说,如果将K,V按行打乱顺序(相当于句子中的词序打乱),那么Attention的结果还是一样的。这就表明了,到目前为止,Attention模型顶多是一个非常精妙的”词袋模型”而已。

这问题就比较严重了,大家知道,对于时间序列来说,尤其是对于NLP中的任务来说,顺序是很重要的信息,它代表着局部甚至是全局的结构,学习不到顺序信息,那么效果将会大打折扣(比如机器翻译中,有可能只把每个词都翻译出来了,但是不能组织成合理的句子)。

于是Google再祭出了一招——Position Embedding,也就是”位置向量”,将每个位置编号,然后每个编号对应一个向量,通过结合位置向量和词向量,就给每个词都引入了一定的位置信息,这样Attention就可以分辨出不同位置的词了。

Position Embedding并不算新鲜的玩意,在FaceBook的《Convolutional Sequence to Sequence Learning》也用到了这个东西。但在Google的这个作品中,它的Position Embedding有几点区别:

  1. 以前在RNN、CNN模型中其实都出现过Position Embedding,但在那些模型中,Position Embedding是锦上添花的辅助手段,也就是”有它会更好、没它也就差一点点”的情况,因为RNN、CNN本身就能捕捉到位置信息。但是在这个纯Attention模型中,Position Embedding是位置信息的唯一来源,因此它是模型的核心成分之一,并非仅仅是简单的辅助手段。
  2. 在以往的Position Embedding中,基本都是根据任务训练出来的向量。而Google直接给出了一个构造Position Embedding的公式:
    { P E 2 i ( p ) = sin ⁡ ( p / 1000 0 2 i / d p o s ) P E 2 i + 1 ( p ) = cos ⁡ ( p / 1000 0 2 i / d p o s ) \left{\begin{array}{l} P E_{2 i}(p)=\sin \left(p / 10000^{2 i / d} p o s\right) \ P E_{2 i+1}(p)=\cos \left(p / 10000^{2 i / d_{p o s}}\right) \end{array}\right.{P E 2 i ​(p )=sin (p /1000 0 2 i /d p os )P E 2 i +1 ​(p )=cos (p /1000 0 2 i /d p os ​)​
    这里的意思是将id为 p p p 的位置映射为一个 d pos d_{\text {pos }}d pos ​ 维的位置向量,这个向量的第 i i i 个元素的数值就是P E i ( p ) P E_{i}(p)P E i ​(p ) 。Google在论文中说到他们比较过直接训练出来的位置向量和上述公式计算出来的位置向量,效果是接近的。因此显然哦们更乐意使用公式构造的Position Embedding了,我们称之为Sinusoidal形 İ 的Position Embedding。
  3. Position Embedding本身是一个绝对位置的信息,但在语言中,相对位置也很重要,Google选择前述的位置向量公式的一个重要原因是:由于我们有 sin ⁡ ( α + β ) = sin ⁡ α cos ⁡ β + cos ⁡ α sin ⁡ β \sin (\alpha+\beta)=\sin \alpha \cos \beta+\cos \alpha \sin \beta sin (α+β)=sin αcos β+cos αsin β 以及 cos ⁡ ( α + β ) = cos ⁡ α cos ⁡ β − sin ⁡ α sin ⁡ β \cos (\alpha+\beta)=\cos \alpha \cos \beta-\sin \alpha \sin \beta cos (α+β)=cos αcos β−sin αsin β ,这表明位置 p + k p+k p +k 的向量可以表示成位置 p p p 的向量的线性恋换, 这提供了表达相对位置信息的可能性

下一篇 从Attention到Bert——2 transformer解读

Original: https://blog.csdn.net/weixin_42327752/article/details/123666779
Author: Weiyaner
Title: 从Attention到Bert——1 Attention解读

原创文章受到原创版权保护。转载请注明出处:https://www.johngo689.com/531936/

转载文章受原作者版权保护。转载请注明原作者出处!

(0)

大家都在看

亲爱的 Coder【最近整理,可免费获取】👉 最新必读书单  | 👏 面试题下载  | 🌎 免费的AI知识星球