CS231n-2017 第10讲 循环神经网络

一、循环神经网络与应用场景

考察一个输入序列 x 1 , x 2 ,   , x n x_1, x_2, \cdots, x_n ,循环神经网络每次会结合上一次的网络状态 h t 1 h_{t-1} 和本次输入 x t x_t ,更新网络状态为 h t h_t ,并根据需要输出结果 y t y_t 。循环神经网络的前向传播的数学表达如下:

h t = f W ( h t 1 , x t ) = t a n h ( W h h h t 1 + W x h x t ) , y t = W h y h t h_t = f_W(h_{t-1}, x_t) = \mathrm{tanh}(W_{hh}h_{t-1}+W_{xh}x_t), \quad y_t = W_{hy}h_t

其结构和应用情形如下。

1. 一(输入)对多(输出):图像标注,即输入一幅图像,输出关于这幅图像的描述。
图 1. 循环神经网络之一对多
2. 多对一:情感分析。
图 2. 循环神经网络之多对一
###### 3. 多对多:机器翻译。
图 3. 循环神经网络之多对多
###### 4. 多对多:视频分类。
图 4. 循环神经网络之多对多

二、循环神经网络的反向传播

循环神经网络的反向传播过程有几种不同的方式,视输入序列的长度而定。

  1. 利用全序列计算损失函数,计算梯度,然后进行反向传播。
  2. 将整个序列划分为小段,对每一小段计算前向与反向传播的结果。每小段输入时都重置网络状态。
  3. 将整个序列划分为小段,但针对每小段处理时,不重置网络状态,而沿用上一小段产生的状态。

三、图像标注

  1. 由卷积网络生成图像特征向量,用作循环卷积网络的状态初始值。然后使用起始标识符<START>作为第一个字词,启动网络,每次生成一个用于描述图像的词(从事先给定的图库中选取),并将该词替代起始标识符,作为循环网络层的输入。

  2. 使用注意力模型的图像标注:使用卷积神经网络产生一组与图像相关的特征向量,每一个可能与图像的某部分相关。循环神经网络每一次输出,除了输出用于描述图像的单词外,还会输出在那组特征向量上的概率分布,依据概率分布对图像的那组特征进行加权,所得结果作为下一步的输入。

四、循环神经网络的改进:长短时记忆网络

考虑循环神经网络的反向传播过程。对于隐藏状态求导,由于每一层的梯度流都会引入一个系数矩阵 W W 的相乘操作,因此很容易出现梯度爆炸或梯度消失的现象。

  • 对于梯度爆炸,可采用梯度截断方法,即当梯度超过一定门限后,强制使得梯度不在增大。
  • 对于梯度消失,则需要改进循环神经网络的结构——即引入门控制单元的长短时记忆网络。
图 5. 对隐藏状态求导会引入系数矩阵的相乘

长短时记忆网络的一个单元模块中包含四个控制门,由之来控制单元状态 c t c_t 和网络状态 h t h_t

  • f(oget)-gate: 遗忘门,控制着是否消除本次单元状态 c t c_t 的影响。
  • i(nput)-gate: 输入门,标识着本次输入。
  • g(ate)-gate: 门(原谅这个奇怪的命名,课程的讲授者也不清楚这个字符具体的指代),控制着本次输入的影响程度。
  • o(utput)-gate: 输出门,标识着输出。

该网络前向传播的数学表达为:

[ i f o g ] = [ σ σ σ tanh ] W [ h t 1 x t ] c t = f c t 1 + i g h t = o tanh ( c t ) \begin{array}{lll} \left[ \begin{array}{c} i \\ f \\ o \\ g \end{array} \right] &amp; = &amp; \left[ \begin{array}{c} \sigma \\ \sigma \\\sigma \\ \tanh \end{array} \right]W\left[ \begin{array}{c} h_{t-1} \\x_t \end{array} \right]\\ \\ c_t &amp;=&amp; f\odot c_{t-1}+i\odot g\\ \\ h_t &amp;=&amp; o\odot \tanh(c_t) \end{array}

对单元状态求导时,只会包含一个与f-gate的输出的逐元素的相乘操作,不会引入矩阵相乘操作,会极大缓解梯度消失的现象。

图 6. 对单元状态求导的梯度流图示

猜你喜欢

转载自blog.csdn.net/suredied/article/details/83795648
今日推荐