前言
接着上一篇的CNN,本篇继续学习深度学习中另一个非常重要的模型RNN。如果说卷积神经网络可以有效地处理空间信息, 那么本篇的循环神经网络(recurrent neural network,RNN)则可以更好地处理序列信息。
循环神经网络通过引入状态变量存储过去的信息和当前的输入,从而可以确定当前的输出。(过去信息+当前输入=当前输出)
序列模型
序列数据:有时序结构的数据
之前学的CNN是给定一系列图片,去预测它的类别。而在本章中,给定的是
t
−
1
t-1
t−1的数据,让我们去预测第
t
t
t个数据。
对见过的数据进行建模,来预测未来,也被称为自回归模型
- 马尔可夫假设:假设当前的数据只跟过去的 τ \tau τ个数据相关。区别上图中的与之前的每个数据相关
- 潜变量模型:专门引入一个变量 h t = f ( x 1 , . . . , x t − 1 ) h_t=f(x_1,...,x_{t-1}) ht=f(x1,...,xt−1)来表示过去的信息。这样 x t = p ( x t ∣ h t ) x_t=p(x_t|h_t) xt=p(xt∣ht)
k k k步预测:对于直到时间步 𝑡 的观测序列,其在时间步 𝑡+𝑘 的预测输出。随着我们对预测时间 𝑘 值的增加,会导致误差累计和模型预测质量的快速下降
RNN
对隐状态使用循环计算的神经网络称为循环神经网络
RNN与之前的多层感知机不一样的地方在于,它保存了前一个时间步的隐藏变量 H t − 1 \mathbf{H}_{t-1} Ht−1,并为这个变量引入了权重参数 W h h \mathbf{W}_{hh} Whh,来描述前一个时间步的变量对当前情况情况的影响。
具体地说,当前时间步隐藏变量 H t \mathbf{H}_{t} Ht由当前时间步的输入,与前一个时间步的隐藏变量一起计算得出:
H t = ϕ ( X t W x h + H t − 1 W h h + b h ) . \mathbf{H}_t = \phi(\mathbf{X}_t \mathbf{W}_{xh} + \mathbf{H}_{t-1} \mathbf{W}_{hh} + \mathbf{b}_h). Ht=ϕ(XtWxh+Ht−1Whh+bh).
输出层是根据
H
t
H_t
Ht求出,
O
t
=
H
t
W
h
q
+
b
q
.
\mathbf{O}_t = \mathbf{H}_t \mathbf{W}_{hq} + \mathbf{b}_q.
Ot=HtWhq+bq.
- 这个变量捕获并保留了序列直到其当前时间步的历史信息,因此该隐藏变量也被称为隐状态
- 由于隐状态的定义与前一个时间步的相同,计算是循环的,因此基于循环计算的隐状态神经网络被命名为 循环神经网络
- 虽然有多个时间步,但在不同的时间步当中,循环体的参数是共享的。因此,循环神经网络的参数开销不会随着时间步的增加而增加。
梯度裁剪
g ← m i n ( 1 , θ ∣ ∣ g ∣ ∣ ) g g \leftarrow min(1, \frac{\theta}{||g||})g g←min(1,∣∣g∣∣θ)g
θ
\theta
θ通常为5或者10,当g在这个范围内时,不会去改变g的值。
若过大,则会还原为
θ
\theta
θ
从而避免数值不稳定而出现的梯度爆炸的问题
注意力机制
卷积、全连接、池化层都只考虑不随意线索,即非自主性提示。换句话,它们会把注意力自动集中在最大、最明显的一类数据。
而注意力机制考虑的是随意线索,自主性提示
- 随意线索——查询(query)
- 每个输入是一个值(value)和不随意线索(key)
注意力机制中,通过query和key来有偏向性的选择输入,即把query和key作一个注意力权重
我们可以从注意力机制框架的角度,得到一个更加通用的注意力汇聚(attention pooling)公式:
f ( x ) = ∑ i = 1 n α ( x , x i ) y i , f(x) = \sum_{i=1}^n \alpha(x, x_i) y_i, f(x)=i=1∑nα(x,xi)yi,
其中 x x x是查询, ( x i , y i ) (x_i, y_i) (xi,yi)是键值对。注意力汇聚是 y i y_i yi的加权平均。将查询 x x x和键 x i x_i xi之间的关系建模为注意力权重(attention weight) α ( x , x i ) \alpha(x, x_i) α(x,xi),这个权重将被分配给每一个对应值 y i y_i yi。
attention-score
注意力分数即计算query和key的相似度,注意力权重是分数softmax的结果
f
(
q
,
(
k
1
,
v
1
)
,
…
,
(
k
m
,
v
m
)
)
=
∑
i
=
1
m
α
(
q
,
k
i
)
v
i
∈
R
v
,
f(\mathbf{q}, (\mathbf{k}_1, \mathbf{v}_1), \ldots, (\mathbf{k}_m, \mathbf{v}_m)) = \sum_{i=1}^m \alpha(\mathbf{q}, \mathbf{k}_i) \mathbf{v}_i \in \mathbb{R}^v,
f(q,(k1,v1),…,(km,vm))=i=1∑mα(q,ki)vi∈Rv,
其中查询 𝐪 和键 𝐤𝑖 的注意力权重
α
\alpha
α(标量) 是通过注意力评分函数 𝑎 将两个向量映射成标量, 再经过softmax运算得到的:
α
(
q
,
k
i
)
=
s
o
f
t
m
a
x
(
a
(
q
,
k
i
)
)
=
exp
(
a
(
q
,
k
i
)
)
∑
j
=
1
m
exp
(
a
(
q
,
k
j
)
)
∈
R
.
\alpha(\mathbf{q}, \mathbf{k}_i) = \mathrm{softmax}(a(\mathbf{q}, \mathbf{k}_i)) = \frac{\exp(a(\mathbf{q}, \mathbf{k}_i))}{\sum_{j=1}^m \exp(a(\mathbf{q}, \mathbf{k}_j))} \in \mathbb{R}.
α(q,ki)=softmax(a(q,ki))=∑j=1mexp(a(q,kj))exp(a(q,ki))∈R.
根据注意力评分函数a的不同,会得到不同的注意力汇聚方式
常见的注意力评分函数有加性注意力、缩放点积注意力
加性注意力
当查询和键是不同长度的矢量时,可采用如下加性注意力作为评分函数
a ( q , k ) = w v ⊤ tanh ( W q q + W k k ) ∈ R , a(q, k) = \mathbf w_v^\top \text{tanh}(W_qq + W_k k) \in \mathbb{R}, a(q,k)=wv⊤tanh(Wqq+Wkk)∈R,
将查询和键连结起来后输入到一个多层感知机(MLP)中,感知机包含一个隐藏层,其隐藏单元数是一个超参数 h h h。通过使用 tanh \tanh tanh作为激活函数,并且禁用偏置项。
缩放点积注意力
点积操作要求查询和键具有相同的长度 d d d
假设查询和键的所有元素都是独立的随机变量, 并且都满足零均值和单位方差, 那么两个向量的点积的均值为 0 0 0 ,方差为 d d d 。
为确保无论向量长度如何, 点积的方差在不考虑向量长度的情况下仍然是 1 , 我们将点积除以 d \sqrt{d} d, 则缩放点积注意力(scaled dot-product attention)评分函数为:
a ( q , k ) = q ⊤ k / d . a( q, k) = \mathbf{q}^\top k /\sqrt{d}. a(q,k)=q⊤k/d.
self-attention
自注意力,即query,key,value全由输入向量自身计算得到的一种注意力机制
计算流程:例第一个输出b1
输入向量为 a 1 , a 2 , a 3 , a 4 a_1,a_2,a_3,a_4 a1,a2,a3,a4,现在计算第一个输出 b 1 b_1 b1
- 用
W
q
W^q
Wq 乘以
a
1
a_1
a1 ,得到查询向量
query
q 1 q_1 q1; -
W
k
W^k
Wk 同时乘以
a
2
,
a
3
,
a
4
a_2,a_3,a_4
a2,a3,a4,得到
key
即 k 2 , k 3 , k 4 k_2,k_3,k_4 k2,k3,k4; - 将 q 1 q_1 q1与 k 2 , k 3 , k 4 k_2,k_3,k_4 k2,k3,k4相乘,得到注意力分数 α 1 , 2 , α 1 , 3 , α 1 , 4 \alpha_{1,2},\alpha_{1,3},\alpha_{1,4} α1,2,α1,3,α1,4。同时 α 1 \alpha_1 α1作自环,得 α 1 , 1 \alpha_{1,1} α1,1;
- 将
α
\alpha
α 丢入
softmax
层计算注意力权重;
- 用
W
v
W^v
Wv 与输入向量
a
1
,
a
2
,
a
3
,
a
4
a_1,a_2,a_3,a_4
a1,a2,a3,a4相乘,得到
value
v 1 , v 2 , v 3 , v 4 v_1,v_2,v_3,v_4 v1,v2,v3,v4; - v 1 , v 2 , v 3 , v 4 v_1,v_2,v_3,v_4 v1,v2,v3,v4与注意力权重作乘积,最后加和,得到 b 1 b^1 b1。同理可得 b 2 , b 3 , b 4 b^2,b^3,b^4 b2,b3,b4