【AI之路】RNN—序列处理的强者

前言

接着上一篇的CNN,本篇继续学习深度学习中另一个非常重要的模型RNN。如果说卷积神经网络可以有效地处理空间信息, 那么本篇的循环神经网络(recurrent neural network,RNN)则可以更好地处理序列信息

循环神经网络通过引入状态变量存储过去的信息当前的输入,从而可以确定当前的输出。(过去信息+当前输入=当前输出)

序列模型

序列数据:有时序结构的数据

之前学的CNN是给定一系列图片,去预测它的类别。而在本章中,给定的是 t − 1 t-1 t1的数据,让我们去预测第 t t t个数据。
对见过的数据进行建模,来预测未来,也被称为自回归模型

  1. 马尔可夫假设:假设当前的数据只跟过去的 τ \tau τ个数据相关。区别上图中的与之前的每个数据相关
  1. 潜变量模型:专门引入一个变量 h t = f ( x 1 , . . . , x t − 1 ) h_t=f(x_1,...,x_{t-1}) ht=f(x1,...,xt1)来表示过去的信息。这样 x t = p ( x t ∣ h t ) x_t=p(x_t|h_t) xt=p(xtht)

k k k步预测:对于直到时间步 𝑡 的观测序列,其在时间步 𝑡+𝑘 的预测输出。随着我们对预测时间 𝑘 值的增加,会导致误差累计和模型预测质量的快速下降

RNN

隐状态使用循环计算的神经网络称为循环神经网络

RNN与之前的多层感知机不一样的地方在于,它保存了前一个时间步的隐藏变量 H t − 1 \mathbf{H}_{t-1} Ht1,并为这个变量引入了权重参数 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+Ht1Whh+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 gmin(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=1nα(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=1mα(q,ki)viRv,
其中查询 𝐪 和键 𝐤𝑖 的注意力权重 α \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)=wvtanh(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)=qk/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

  1. W q W^q Wq 乘以 a 1 a_1 a1 ,得到查询向量query q 1 q_1 q1
  2. 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
  3. 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
  1. α \alpha α 丢入softmax层计算注意力权重;
  1. 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
  2. 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

参考资料

  1. 李沐-动手学深度学习v2
  2. 《动手学深度学习》第8章第9章
  3. 李宏毅机器学习—自注意力
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

CodeSlogan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值