RNN,LSTM,GRU基本原理的个人理解

记录一下对RNN,LSTM,GRU基本原理(正向过程以及简单的反向过程)的个人理解


RNN

Recurrent Neural Networks,循环神经网络
(注意区别于recursive neural network,递归神经网络)

为了解决DNN存在着无法对时间序列上的变化进行建模的问题(如自然语言处理、语音识别、手写体识别),出现的另一种神经网络结构——循环神经网络RNN。

RNN结构

这里写图片描述

  • t 层神经元的输入,除了其自身的输入 x t ,还包括上一层神经元的隐含层输出 s t 1
  • 每一层的参数U,W,V都是共享的
    这里写图片描述
    这里写图片描述
  • 每一层并不一定都得有输入和输出,如对句子进行情感分析是多到一,文本翻译多到多,图片描述一到多

数学描述

(以下开始符号统一)
回忆一下单隐含层的前馈神经网络
输入为 X R n × x (n个维度为x的向量)
隐含层输出为

H = ϕ ( X W x h + b h )

输出层输入 H R n × h
输出为
Y ^ = softmax ( H W h y + b y )

现在对 X H Y 都加上时序下标
同时引入一个新权重 W h h R h × h
得到RNN表达式
H t = ϕ ( X t W x h + H t 1 W h h + b h )
Y ^ t = softmax ( H t W h y + b y )

H 0 通常置零

深层RNN和双向RNN

这里写图片描述
这里写图片描述

通过时间反向传播和随之带来的问题

输入为 x t R x
不考虑偏置
隐含层变量为

h t = ϕ ( W h x x t + W h h h t 1 )

输出层变量为
o t = W y h h t

则损失函数为
L = 1 T t = 1 T ( o t , y t )

以一个三层为例
这里写图片描述
三个参数更新公式为

W h x = W h x η L W h x

W h h = W h h η L W h h

W y h = W y h η L W y h

明显的
L o t = ( o t , y t ) T o t

根据链式法则
L W y h = t = 1 T prod ( L o t , o t W y h ) = t = 1 T L o t h t

先计算目标函数有关最终时刻隐含层变量的梯度
L h T = prod ( L o T , o T h T ) = W y h L o T

假设 ϕ ( x ) = x (RNN中用激活函数relu还是tanh众说纷纭,有点玄学)

L h t = prod ( L h t + 1 , h t + 1 h t ) + prod ( L o t , o t h t ) = W h h L h t + 1 + W y h L o t

通项为
L h t = i = t T ( W h h ) T i W y h L o T + t i

注意上式,当每个时序训练数据样本的时序长度T较大或者时刻t较小,目标函数有关隐含层变量梯度较容易出现衰减和爆炸

L W h x = t = 1 T prod ( L h t , h t W h x ) = t = 1 T L h t x t

L W h h = t = 1 T prod ( L h t , h t W h h ) = t = 1 T L h t h t 1

梯度裁剪

为了应对梯度爆炸,一个常用的做法是如果梯度特别大,那么就投影到一个比较小的尺度上。 θ 为设定的裁剪“阈值”,为标量,若梯度的范数大于此阈值,将梯度缩小,若梯度的范数小于此阈值,梯度不变

g = min ( θ g , 1 ) g


LSTM

RNN的隐含层变量梯度可能会出现衰减或爆炸。虽然梯度裁剪可以应对梯度爆炸,但无法解决梯度衰减。因此,给定一个时间序列,例如文本序列,循环神经网络在实际中其实较难捕捉两个时刻距离较大的文本元素(字或词)之间的依赖关系。
LSTM(long short-term memory)由Hochreiter和Schmidhuber在1997年被提出。

LSTM结构

这里两张图先不用细看,先着重记住公式后再回来看

这里写图片描述
这里写图片描述

数学描述

(同上,符号统一)
设隐含状态长度 h ,h h , t 时刻输入 X t R n × x x 维)及 t 1 时刻隐含状态

相关文章
相关标签/搜索