神经网络与深度学习7---注意力机制与seq2seq模型

本文是邱锡鹏教授撰写的《神经网络与深度学习》一书中 第8章:注意力机制与外部记忆 的读书笔记,主要内容是一些本人觉得比较值得记录的内容,中间也会包括一些拓展和思考。

注意力评分函数

以下为注意力机制的流程图,查询 q \boldsymbol q q 通过注意力评分函数 a a a 与键 k \boldsymbol k k 作用,并通过softmax得到对应 k \boldsymbol k k 的概率分布值,最后这些概率分布值与值 v \boldsymbol v v 做加权和:

写成数学公式:
f ( q , ( k 1 , v 1 ) , ⋯   , ( k m , v m ) ) = ∑ i = 1 m softmax ( a ( q , k i ) ) v i = ∑ i = 1 m exp ( a ( q , k i ) ) ∑ j = 1 m exp ( a ( q , k j ) ) v i f(\boldsymbol q, (\boldsymbol k_1,\boldsymbol v_1),\cdots, (\boldsymbol k_m,\boldsymbol v_m)) = \sum_{i=1}^m \text{softmax}(a(\boldsymbol q,\boldsymbol k_i)) \boldsymbol v_i = \sum_{i=1}^m \frac{\text{exp}(a(\boldsymbol q,\boldsymbol k_i))}{\sum_{j=1}^m \text{exp}(a(\boldsymbol q,\boldsymbol k_j))} \boldsymbol v_i f(q,(k1,v1),,(km,vm))=i=1msoftmax(a(q,ki))vi=i=1mj=1mexp(a(q,kj))exp(a(q,ki))vi

常用的注意力评分函数有 加性注意力点积注意力 两种:

加性注意力
a ( q , k ) = w v T tanh ( W q ⋅ q + W k ⋅ k ) ∈ R a(\boldsymbol q,\boldsymbol k) = \boldsymbol w_v^T\text{tanh}(\boldsymbol W_q \cdot \boldsymbol q + \boldsymbol W_k\cdot \boldsymbol k) \in \mathbb{R} a(q,k)=wvTtanh(Wqq+Wkk)R
其中可学习参数 W q ∈ R h × q , W k ∈ R h × k , w v ∈ R h \boldsymbol W_q \in \mathbb{R}^{h\times q}, \boldsymbol W_k \in \mathbb{R}^{h\times k}, \boldsymbol w_v \in \mathbb{R}^{h} WqRh×q,WkRh×k,wvRh

点积注意力
a ( q , k i ) = q T k i d a(\boldsymbol q,\boldsymbol k_i) = \frac{\boldsymbol q^T \boldsymbol k_i}{\sqrt{d}} a(q,ki)=d qTki

点积评分函数计算效率更高,但是要求 q \boldsymbol q q k \boldsymbol k k 具有相同的长度 d d d

在实践中,可以考虑批量计算注意力值来提升效率:
softmax ( Q K T d ) V ∈ R n × v \text{softmax}(\frac{\boldsymbol Q\boldsymbol K^T}{\sqrt{d}}) \boldsymbol V \in \mathbb{R}^{n\times v} softmax(d QKT)VRn×v

其中 Q ∈ R n × d \boldsymbol Q \in \mathbb{R}^{n\times d} QRn×d 表示 n n n 个查询, K ∈ R m × d \boldsymbol K \in \mathbb{R}^{m\times d} KRm×d 表示 m m m 个键, V ∈ R m × v \boldsymbol V \in \mathbb{R}^{m\times v} VRm×v 表示 m m m 个值。


基于rnn的seq2seq模型

首先回忆基于循环神经网络的seq2seq模型:
在这里插入图片描述
如图所示:

  1. encoder每一层最后时间步的state会作为decoder对应层state的初始化,因此要求encoder,decoder的层数一样,hidden_size 一样
  2. 上下文变量 c \boldsymbol c c 会与decoder上一时间步的输出 y t − 1 y_{t-1} yt1 拼接,作为当前时间步的输入

Note:在training时,decoder可以直接使用 y_gold 与 c \boldsymbol c c 拼接作为输入;而在inference时,由于 y_gold 是不可知的,因此使用上一时间步的输出与 c \boldsymbol c c 拼接

这种结构的seq2seq会有一个问题:decoder所有时间步从encoder中获得的信息都是一样的,没有区分。但这与实际情况往往是不相符的,例如对于翻译模型,target language中的某个词往往会与source language的某一两个词具有强相关性,而跟其它的词相关性很弱。而注意力机制恰好就可以解决这样的问题。


带注意力机制的基于rnn的seq2seq模型

带注意力机制的seq2seq模型中,上下文变量 c \boldsymbol c c 不再简单的采用encoder的输出,而是encoder层隐变量与decoder上一时间步的注意力输出:
c t = ∑ i = 1 n softmax ( a ( s t − 1 , h i ) ) h i \boldsymbol c_t = \sum_{i=1}^n \text{softmax}(a(\boldsymbol s_{t-1},\boldsymbol h_i)) \boldsymbol h_i ct=i=1nsoftmax(a(st1,hi))hi

其中 s t − 1 \boldsymbol s_{t-1} st1 是decoder上一时间步的隐层输出, h i \boldsymbol h_i hi 是encoder最后隐层的所有时间步的输出。

在这里插入图片描述


多头注意力

所谓“多头”,是通过给{查询,键,值}组合施加不同的线性变换来实现的,每个头的定义如下:

h i = ∑ t = 1 n softmax ( a ( W i q q , W i k k t ) ) W i v v t ∈ R p v h_i = \sum_{t=1}^n \text{softmax}(a(\boldsymbol W^{q}_i \boldsymbol q, \boldsymbol W^{k}_i \boldsymbol k_t)) \boldsymbol W^{v}_i \boldsymbol v_t \in \mathbb{R}^{p_v} hi=t=1nsoftmax(a(Wiqq,Wikkt))WivvtRpv

其中 W i q ∈ R p d × d q , W i k ∈ R p k × d k , W i v ∈ R p v × d v \boldsymbol W^{q}_i \in \mathbb{R}^{p_d \times d_q}, \boldsymbol W^{k}_i \in \mathbb{R}^{p_k \times d_k}, \boldsymbol W^{v}_i \in \mathbb{R}^{p_v \times d_v} WiqRpd×dq,WikRpk×dk,WivRpv×dv 是可学习参数。

之后所有的头需要经过一个线性转换:
W o [ h 1 ⋮ h h ] ∈ R p o \boldsymbol W^o\begin{bmatrix} \boldsymbol h_1\\ \vdots\\ \boldsymbol h_h \end{bmatrix} \in \mathbb{R}^{p_o} Woh1hhRpo

其中 W o ∈ R p o × h p v \boldsymbol W^{o} \in \mathbb{R}^{p_o \times hp_v} WoRpo×hpv 也是可学习参数。

对同一 {查询,键,值} 施加不同的线性变换,并将这些结果组合起来,以此让模型学到比简单加权平均值更复杂的表示。

为了能够并行计算多个头,需要设置 p d = p k = p v = p o h p_d = p_k = p_v = \frac{p_o}{h} pd=pk=pv=hpo


Transfomer

论文地址:Attention Is All You Need

正如标题所表达的,Transfomer完全摒弃了循环神经网络的结构:

  1. encoder层: {多头自注意力 + 前馈网络} × n \times n ×n
  2. decoder层: {掩蔽多头自注意力 + encoder-decoder多头自注意力 + 前馈网络} × n \times n ×n

关于Transformer中注意力机制的详细使用情况,可以参加本人的另一篇博客 Transfomer矩阵维度分析及MultiHead详解


Reference:
动手学深度学习

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值