【跟李沐学AI 动手学深度学习】注意力机制 笔记

1. Summary

1.1 心理学背景

心理学框架:

你的面前有黑白色的报纸、A4纸、书本,和一个红色杯子

由于红色杯子很显眼,你一眼就会注意到它,不需要思考,所以它是不随意线索

如果你想看报纸,所以你看到了报纸,所以这个报纸是随意线索

1.2 注意力机制概述

  1. 卷积、全连接、池化层都只考虑不随意线索(直接把最大的值抽出来)
  2. 注意力机制考虑随意线索
    1. 随意线索被称为查询(query)
    2. 每个输入是一个值(value)和不随意线索(key)的对
    3. 通过注意力池化层,根据query,有偏向(权重)地去选择某些输入
    4. 一般写作 f ( x ) = ∑ i α ( x , x i ) y i f(x)=\sum_{i}\alpha(x, x_i)y_i f(x)=iα(x,xi)yi,此处的 α ( x , x i ) \alpha(x, x_i) α(x,xi)是注意力权重

1.3 非参注意力池化层

非参即不学习参数

首先给定数据(Xi,Yi)

最简单的方案是平均池化:f(x) = ΣYi/n

Nadaraya-Watson核回归:

更好的方案是Nadaraya-Watson核回归:K是衡量x和xi的函数,式子的目的是找出和y最相近的数字

在这里插入图片描述

使用高斯核: K ( u ) = 1 2 e x p ( − u 2 2 ) K(u)=\frac{1}{\sqrt 2}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 i ) 2 ) ) y i = ∑ i = 1 n s o f t m a x ( − 1 2 ( x − x i ) 2 ) y i f(x)=\sum_{i=1}^n\frac{exp\Big(-\frac{1}{2}(x-x_i)^2)\Big)}{\sum_{j=1}^nexp\Big(-\frac{1}{2}(x-x_i)^2)\Big)}y_i\newline=\sum_{i=1}^nsoftmax\Big(-\frac{1}{2}(x-x_i)^2\Big)y_i f(x)=i=1nj=1nexp(21(xxi)2))exp(21(xxi)2))yi=i=1nsoftmax(21(xxi)2)yi

1.4 参数化的注意力机制

在之前学习的基础上引入可以学习的w

f ( x ) = ∑ j = 1 n s o f t m a x ( − 1 2 ( ( x − x i ) w ) 2 ) ) y i f(x)=\sum_{j=1}^nsoftmax\Big(-\frac{1}{2}((x-x_i)w)^2)\Big)y_i f(x)=j=1nsoftmax(21((xxi)w)2))yi

2. 注意力分数

上述提到的 f ( x ) = ∑ i = 1 n s o f t m a x ( − 1 2 ( x − x i ) 2 ) y i f(x)=\sum_{i=1}^nsoftmax\Big(-\frac{1}{2}(x-x_i)^2\Big)y_i f(x)=i=1nsoftmax(21(xxi)2)yi,其中的 1 2 ( x − x i ) 2 \frac{1}{2}(x-x_i)^2 21(xxi)2就是注意力分数

假设query q,有m对key-value(k,v)

则注意力池化层为:

f ( q , ( k 1 , v 1 ) , ⋅ ⋅ ⋅ , ( k m , v m ) ) = ∑ i = 1 m s o f t m a x ( α ( q , k i ) ) v i f\Big(q,(k_1,v_1),···,(k_m,v_m)\Big)=\sum_{i=1}^msoftmax\Big(\alpha(q, k_i)\Big)v_i f(q,(k1,v1),⋅⋅⋅,(km,vm))=i=1msoftmax(α(q,ki))vi,其中的 α ( q , k i ) \alpha(q, k_i) α(q,ki)就是注意力分数

Additive Attention

query、key长度不一致

可学参数: W k , W q , v W_k,W_q,v WkWqv

α ( q , k i ) = v T t a n h ( W k h + W q q ) \alpha(q, k_i)=v^Ttanh(W_kh+W_qq) α(q,ki)=vTtanh(Wkh+Wqq),h为激活函数

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

Scaled Dot-Product Attention

query、key长度一致

长度为d,尖括号为内积,即求两个向量夹角余弦值

α ( q , k i ) = ⟨ q , k i ⟩ / d \alpha(q, k_i)=\langle q,k_i \rangle/ \sqrt d α(q,ki)=qki/d

向量版本:

α ( Q , K ) = Q K T d \alpha(Q, K)=QK^T\sqrt d α(Q,K)=QKTd

3. 使用注意力机制的seq2seq

seq2seq详见我的另一个文章

在机器翻译中,每个生成的词可能相关与源句子中不同的词

而seq2seq模型中,解码器的初始隐状态是编码器最后时间步的隐状态,看不到前面词语的输入,因此不能直接建模,所以需要向其中加入注意力机制

  1. 编码器对每次词的输出作为key和value
  2. 解码器RNN对上一词的输出是query
  3. 注意力的输出和下一个词的词嵌入合并进入RNN

因为RNN的输出都是在同一个语义空间中,key和value是RNN的输出,所以用解码器RNN的输出而不是embedding的输入

在这里插入图片描述

4. self-attention自注意力

给定序列 x 1 , ⋅ ⋅ ⋅ , x n x_1,···,x_n x1,⋅⋅⋅,xn

自注意力池化层将 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 ) ) y_i=f\Big(x_i,(x_1,x_1),···,(x_n,x_n)\Big) yi=f(xi,(x1,x1),⋅⋅⋅,(xn,xn))

CNN、RNN和自注意力都可以用于处理序列

CNN:把序列当作一维的数据

CNNRNN自注意力
计算复杂度 O ( k n d 2 ) O(knd^2) O(knd2) O ( n d 2 ) O(nd^2) O(nd2) O ( n 2 d ) O(n^2d) O(n2d)
并行度 O ( n ) O(n) O(n) O ( 1 ) O(1) O(1) O ( n ) O(n) O(n)
最长路径 O ( n / 2 k ) O(n/2k) O(n/2k) O ( n ) O(n) O(n) O ( 1 ) O(1) O(1)

位置编码

跟CNN、RNN不同,自注意力不记录位置信息,想要加入位置信息,则需要位置编码

位置编码将位置信息注入到输入中

假设位置编码矩阵为P,序列为X,则X+P作为自编码输入

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值