常见循环神经网络概括

常见循环神经网络概括

循环神经网络(recurrent neural network)是一类专门用于处理序列数据的神经网络,就像卷积神经网络是专门处理网格化数据(如图像)的神经网络,卷积神经网络是专门用于处理序列 x ( 1 ) , ⋯   , x ( τ ) x^{(1)}, \cdots, x^{(\tau)} x(1),,x(τ) 的神经网络。

本文主要介绍花书中提到的几种循环神经网络。

循环神经网络中的一些重要设计模式包括以下几种:

  1. 每个时间步都有输出,并且隐藏单元之间有循环连接的循环网络,如图在这里插入图片描述

  2. 每个时间步都产生一个输出,只有当前时刻的输出到下个时刻的隐藏单元之间有循环连接的循环网络。在这里插入图片描述

  3. 隐藏单元之间存在循环连接,但读取整个序列后产生单个输出的循环网络。在这里插入图片描述

关于图 10.3 的前向传播公式解释如下

假设图中的隐藏单元的激活函数是 tanh,输出是离散的,表示离散变量的常规方式是把输出 o o o 作为每个离散变量可能值的非标准化对数概率,然后经过 s o f t m a x softmax softmax 函数后续处理后,获得标准化后概率输出向量 y ^ \hat{y} y^,RNN 从特定的初始状态 h ( 0 ) h^{(0)} h(0) 开始前向传播。从 t = 1 t=1 t=1 t = τ t=\tau t=τ 的每个时间步,我们用如下式子更新

a ( t ) = b + W h ( t − 1 ) + U x ( t ) a^{(t)}=b+Wh^{(t-1)}+Ux^{(t)} a(t)=b+Wh(t1)+Ux(t)

h ( t ) = t a n h ( a t ) h^{(t)}=tanh(a^{t}) h(t)=tanh(at)

o ( t ) = c + V h ( t ) o^{(t)}=c+Vh^{(t)} o(t)=c+Vh(t)

y ^ = s o f t m a x ( o ( t ) ) \hat{y}=softmax(o^{(t)}) y^=softmax(o(t))

其中的参数的偏置向量 b , c b, c b,c 连同权重矩阵 U , V , W U,V,W U,V,W ,分别对应于输入到隐藏、隐藏到输出和隐藏到隐藏的连接。这个循环网络将一个输入序列映射到相同长度的输出序列。与 x x x 序列配对的 y y y 的总损失就是所有时间步的损失之和。例如, L ( t ) L^{(t)} L(t) 为给定的 x ( 1 ) , ⋯   , x ( τ ) x^{(1)} ,\cdots,x^{(\tau)} x(1),,x(τ) y ( t ) y^{(t)} y(t) 的负对数似然。(实际应用中对于分类问题一般使用交叉熵损失函数)

L ( { x ( 1 ) , ⋯   , x ( τ ) } , { y ( 1 ) , ⋯   , y ( τ ) } ) = ∑ t L ( t ) = − ∑ t log ⁡ p m o d e l ( y ( t ) ∣ x ( 1 ) , ⋯   , x ( t ) ) L(\{x^{(1)} ,\cdots,x^{(\tau)}\}, \{y^{(1)} ,\cdots,y^{(\tau)}\})=\sum_{t}L^{(t)}=-\sum_t\log p_{model}(y^{(t)}|x^{(1)} ,\cdots,x^{(t)}) L({x(1),,x(τ)},{y(1),,y(τ)})=tL(t)=tlogpmodel(y(t)x(1),,x(t))

其中 p m o d e l ( y ( t ) ∣ x ( 1 ) , ⋯   , x ( t ) ) p_{model}(y^{(t)}|x^{(1)} ,\cdots,x^{(t)}) pmodel(y(t)x(1),,x(t)) 需要读取模型输出向量 y ^ ( t ) \hat{y}^{(t)} y^(t) 对应 y ( t ) y^{(t)} y(t) 的项。关于循环神经网络的反向传播算法称为通过时间反向传播(back-propagation through time, BPTT)。关于其各个参数的求导可以参考RNN 公式及其推导_CZWin32768的博客-CSDN博客_rnn公式推导

关于 RNN 的梯度消失

1. 导师驱动过程和输出循环网络

对于图 10.4 所展示的神经网络,只有在一个实践部的输出和下一个时间步的隐藏单元间存在循环连接的网络没有那么强大,因为输出单元明确地训练成匹配训练集的目标,它们不太能捕获关于过去输入历史的必要信息,除非用户知道如何描述系统的全部状态,并将它作为训练目标的一部分。但是消除隐藏到隐藏单元的优点在于,任何基于比较时刻 t t t 的预测和时刻 t t t 的训练目标的损失函数的所有时间步都解耦了,因此我们可以让训练并行化。

由图 10.4 那种连接方式构成的循环神经网络可以使用导师驱动过程(teacher forcing) 进行训练。示意图在这里插入图片描述

这样的训练方式在测试时可能会出现问题,因为训练期间网络看到的输入和测时期间的输入有不同,减轻此问题的一种办法是同时使用导师驱动过程和自由运行的输入进行训练,例如展开循环的输出到输入路径上预测几个步骤正确目标值。另一种方式是通过随意选择生成值或真实的数据值作为输入以减小训练时和测试时看到的输入之间的差别。

这类 RNN 的特点:输入是向量序列,输入是等长的向量序列

2.基于上下文的 RNN 序列建模

和前面讨论的将输入 x x x 看作向量序列不同,也可以将 x x x 看作单个向量作为输入。当 x x x 是一个固定大小的向量时,我们可以简单地将其看作产生 y y y 序列 RNN 的额外输入,将额外输入提供到 RNN 的一些常见方法是:

  1. 在每个时刻作为一个额外输入,或
  2. 作为初始状态 h ( 0 ) h^{(0)} h(0) ,或
  3. 结合两种方式

在这里插入图片描述

此时 y ( t ) , ⋯   , y ( t + n ) y^{(t)},\cdots,y^{(t+n)} y(t),,y(t+n) 之间独立,如果不想它们独立,可以使用下图的连接方法

在这里插入图片描述

这类 RNN 的特点:输入是一个向量,输入是任意长的的向量序列

3.双向RNN

前面考虑的循环神经网络只考虑了右边的使用左边的信息,而没有考虑到左边的也需要右边的信息,所以引申出了双向的 RNN 如图

在这里插入图片描述

这个想法也可以拓展到二维输入,如图像,由 4 个 RNN 组成,分别计算 上下左右 四个方向的信息,相比于卷积,可以记住更长期的信息。

4.Sequence to sequence

特点:将输入向量序列映射到不一定等长的向量序列。如语音识别、机器翻译等场景都有应用。

网络是基于编码-解码架构的,编码器处理输入序列,输出上下文信息 C C C (可以使用最后一个隐藏层输出),解码器用基于上下文的 RNN 序列建模方法(图 10.9),这样就达到了让输入和输出不一定等长的目的。

在这里插入图片描述

5.渗透单元和其他多时间尺度的策略

因为普通的 RNN 会造成梯度消失等问题(RNN 的梯度消失和 DNN 的梯度消失不是一个意思),关键在于通过时间反向传播算法中有一项乘积会导致其趋于 0 或者无穷,我们需要想一些办法使其导数乘积接近 1 。

获得导数乘积接近 1 的一种方式是设置线性自连接单元,并且这些连接的权重接近 1 。我们对某些 v v v 值应用更新 v ← α μ ( t − 1 ) + ( 1 − α ) v ( t ) v \leftarrow \alpha \mu^{(t-1)}+(1-\alpha)v^{(t)} vαμ(t1)+(1α)v(t) 去累积一个滑动平均值,这种单元被称为渗透单元。

6.LSTM 长短时记忆网络

https://www.zhihu.com/question/34878706

7.GRU

考虑 LSTM 中哪些门控是必要的,哪些是不必要的,GRU 将 LSTM 的遗忘因子和更新状态单元用单个门控单元代替了。更新方式如下

h i ( t ) = u i ( t − 1 ) h i ( t − 1 ) + ( 1 − u i ( t − 1 ) ) σ ( b i + ∑ j U i , j x j ( t ) + ∑ j W i , j r j ( t − 1 ) h j ( t − 1 ) ) h_{i}^{(t)}=u_i^{(t-1)}h_i^{(t-1)}+(1-u_i^{(t-1)})\sigma(b_i+\sum_jU_{i, j}x_j^{(t)}+\sum_jW_{i, j}r_j^{(t-1)}h_j^{(t-1)}) hi(t)=ui(t1)hi(t1)+(1ui(t1))σ(bi+jUi,jxj(t)+jWi,jrj(t1)hj(t1))

其中 u u u 代表“更新门”, r r r 代表“复位门”, 他们的值就像前面的那样

u i ( t ) = σ ( b i u + ∑ j U i , j u x j ( t ) + ∑ j W i , j u h j ( t ) ) u_i^{(t)}=\sigma(b_i^u+\sum_jU_{i, j}^ux_j^{(t)}+\sum_jW_{i, j}^uh_j^{(t)}) ui(t)=σ(biu+jUi,juxj(t)+jWi,juhj(t))

r i ( t ) = σ ( b i r + ∑ j U i , j r x j ( t ) + ∑ j W i , j r h j ( t ) ) r_i^{(t)}=\sigma(b_i^r+\sum_jU_{i, j}^rx_j^{(t)}+\sum_jW_{i, j}^rh_j^{(t)}) ri(t)=σ(bir+jUi,jrxj(t)+jWi,jrhj(t))

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值