注意力机制

文章目录

    • 1. 简介
    • 2. 非参数化注意力池化层
    • 3. 参数化的注意力机制
    • 4. 注意力分数
    • 5. 自注意力和位置编码

1. 简介

心理学

  • 动物需要在复杂环境下有效关注值得注意的点
  • 心理学框架:人类根据随意(有意识)线索和不随意(无意识)线索选择注意点

注意力机制是一种在深度学习领域中的重要技术,尤其在自然语言处理(NLP)任务中取得了显著的成果。本文将介绍注意力机制的基本概念、原理和如何在神经网络模型中应用注意力机制。

注意力机制

  • 卷积、全连接、池化层都只考虑不随意线索
  • 注意力机制则显示的考虑随意线索
    • 随意线索被称之为查询(query)
    • 每个输入是一个值(value)和不随意线索(key)的对
    • 通过注意力池化层来有偏向性的选择某些输入

注意力机制_第1张图片


2. 非参数化注意力池化层

  • 给定数据 ( x i , y i ) , i = 1 , . . . , n (x_i,y_i),i=1,...,n (xi,yi),i=1,...,n

  • 平均池化是最简单的方案: f ( x ) = 1 n ∑ i y i f(x)=\frac{1}{n}\sum\limits_iy_i f(x)=n1iyi

  • 更好的方案是60年代提出来的Nadaraya-Watson核回归
    f ( x ) = ∑ i = 1 n K ( x − x i ) ∑ j = 1 n K ( x − x j ) y i f(x) = \sum\limits_{i=1}^n\frac{K(x-x_i)}{\sum_{j=1}^nK(x-x_j)}y_i f(x)=i=1nj=1nK(xxj)K(xxi)yi
    x x x为query, x j x_j xj为key, y i y_i yi为value。

Nadaraya-Watson核回归

  • 使用高斯核 K ( u ) = 1 2 π e x p ( − u 2 2 ) K(u)=\frac{1}{\sqrt{2\pi}}exp(-\frac{u^2}{2}) K(u)=2π 1exp(2u2)

  • 那么
    f ( x ) = ∑ i = 1 n e x p ( − 1 2 ( x − x i ) 2 ) ∑ j = 1 n e x p ( − 1 2 ( x − x j ) 2 ) y i = ∑ i = 1 n s o f t m a x ( − 1 2 ( x − x i ) 2 ) y i f(x)=\sum\limits_{i=1}^n\frac{exp(-\frac{1}{2}(x-x_i)^2)}{\sum_{j=1}^nexp(-\frac{1}{2}(x-x_j)^2)}y_i \\ =\sum\limits_{i=1}^nsoftmax(-\frac{1}{2}(x-x_i)^2)y_i f(x)=i=1nj=1nexp(21(xxj)2)exp(21(xxi)2)yi=i=1nsoftmax(21(xxi)2)yi


3. 参数化的注意力机制

在之前的基础上引入可以学习的 w w w
f ( x ) = ∑ i = 1 n s o f t m a x ( − 1 2 ( ( x − x i ) w ) 2 ) y i f(x)=\sum\limits_{i=1}^nsoftmax(-\frac{1}{2}((x-x_i)w)^2)y_i f(x)=i=1nsoftmax(21((xxi)w)2)yi


4. 注意力分数

注意力分数主要是对注意力权重的修改。

注意力机制_第2张图片

注意力机制_第3张图片

拓展到高维度

  • 假设query q ∈ R q q\in \mathbb{R}^q qRq m m m对key-value ( k 1 , v 1 ) (k_1,v_1) (k1,v1),…,这里 k i ∈ R k , v i ∈ R v k_i \in \mathbb{R}^k,v_i \in \mathbb{R}^v kiRk,viRv

  • 注意力池化层:
    f ( q , ( k 1 , v 1 ) , . . . , ( k m , v m ) ) = ∑ i = 1 m α ( q , k i ) v i ∈ R v α ( a , k i ) = s o f t m a x ( α ( q , k i ) ) = e x p ( a ( q , k i ) ) ∑ j = 1 m e x p ( a q , k j ) ∈ R f(q,(k_1,v_1),...,(k_m,v_m))=\sum\limits_{i=1}^m\alpha(q,k_i)v_i \in \mathbb{R}^v \\ \alpha(a,k_i)=softmax(\alpha(q,k_i)) = \frac{exp(a(q,k_i))}{\sum_{j=1}^mexp(a{q,k_j})} \in \mathbb{R} f(q,(k1,v1),...,(km,vm))=i=1mα(q,ki)viRvα(a,ki)=softmax(α(q,ki))=j=1mexp(aq,kj)exp(a(q,ki))R
    注意力机制_第4张图片

此时,关键是 a a a如何设计。

1. Additive Attention

  • 可学参数: W k ∈ R h × k , W q ∈ R h × q , v ∈ R h W_k \in \mathbb{R}^{h \times k},W_q \in \mathbb{R}^{h \times q},v \in \mathbb{R}^h WkRh×k,WqRh×q,vRh

    a ( k , q ) = v T t a n h ( W k k + w q q ) a(k,q)=v^Ttanh(W_kk+w_qq) a(k,q)=vTtanh(Wkk+wqq)

  • 等价于将key核value合并起来后放入到一个隐藏大小为h,输出大小为1的单隐藏层MLP

2. Scaled Dot-Product Attention

  • 如果query和key都是同样的长度 q , k i ∈ R d q,k_i \in \mathbb{R}^d q,kiRd,那么可以
    a ( q , k i ) = < q , k i > / d a(q,k_i)=/\sqrt{d} a(q,ki)=<q,ki>/d

  • 向量化版本

    • Q ∈ R n × d , K ∈ R m × d , V ∈ R m × v Q \in \mathbb{R}^{n \times d},K \in \mathbb R^{m\times d},V \in \mathbb R^{m\times v} QRn×d,KRm×d,VRm×v

    • 注意力分数: a ( Q , K ) = Q K T / d ∈ R n × m a(Q,K)=QK^T/\sqrt{d} \in \mathbb R^{n\times m} a(Q,K)=QKT/d Rn×m

    • 注意力池化: f = s o f t m a x ( a ( Q , K ) ) V ∈ R n × v f=softmax(a(Q,K))V \in \mathbb R^{n\times v} f=softmax(a(Q,K))VRn×v

总结:

  • 注意力分数是query和key的相似度,注意力权重是分数的softmax结果
  • 两种常见的分数计算:
    • 将query和key合并起来进入一个单输出单隐藏层的MLP
    • 直接将query和key做内积

5. 自注意力和位置编码

注意力机制_第5张图片

  • 给定序列 x 1 , . . . , x n , ∀ x i ∈ R d x_1,...,x_n,\forall x_i \in \mathbb R^d x1,...,xn,xiRd

  • 自注意力池化层将 x i x_i xi当作key,value,query来对序列抽取特征得到 y 1 , . . . , y n y_1,...,y_n y1,...,yn。这里 y i = f ( x i , ( x 1 , x 1 ) , . . . , ( x n , x n ) ) ∈ R d y_i=f(x_i,(x_1,x_1),...,(x_n,x_n)) \in \mathbb R^d yi=f(xi,(x1,x1),...,(xn,xn))Rd

跟CNN,RNN对比

注意力机制_第6张图片

注意力机制_第7张图片

位置编码

  • 和CNN/RNN不同,自注意力并没有记录位置信息

  • 位置编码将位置信息注入到输入里

    • 假设长度为 n n n到序列是 X ∈ R n × d X \in \mathbb R^{n \times d} XRn×d,那么使用位置编码军阵 P ∈ R n × d P \in \mathbb R^{n\times d} PRn×d来输出 X + P X+P X+P作为自编码输入
  • P P P的元素如下计算:
    p i , 2 j = sin ⁡ ( i 1000 0 2 j / d ) , p i , 2 j + 1 = cos ⁡ ( i 1000 0 2 j / d ) p_{i,2j}=\sin(\frac{i}{10000^{2j/d}}),p_{i,2j+1}=\cos(\frac{i}{10000^{2j/d}}) pi,2j=sin(100002j/di),pi,2j+1=cos(100002j/di)
    注意力机制_第8张图片

总结:

  • 自注意力池化层将 X i X_i Xi当作key,value,query来对序列抽取特征
  • 完全并行、最长序列为1、但是对长序列计算复杂度高
  • 位置编码在输入中加入位置信息,使得自注意力能够记忆位置信息

你可能感兴趣的:(Python,神经网络,深度学习,人工智能,RNN,NLP)