循环神经网络(RNN)简介

循环神经网络

1. 基本定义

1.1 什么是循环神经网络

循环神经网络英文名称为 (Recurrent Neural Network, RNN),其通过使用带自反馈的神经元,能够处理任意长度的时序数据。

给定输入时序序列
X=(x_1,x_2,...x_t,...x_T)
式中,X表示一段时序数据,T为时间长度

以一段英文段落为例,其时序数据可以表示为:

I love deep learning

[1 0 0 0]', [0 1 0 0]', [0 0 1 0]', [0 0 0 1]'

若是一段视频,将其每一帧通过CNN网络处理得到相应的编码向量

循环神经网络通过以下公式更新隐藏层的活性值h_{t}
h_{t}=f(h_{t-1},x_{t})

01循环神经网络.png

循环神经网络图示

1.2 循环神经网络的常用应用场景

  • 机器翻译
  • 语言生成
  • 图像描述及理解
  • 视频理解

2.RNN

2.1RNN的基本模型

RNN的基本模型如下图所示,为便于理解,图中将RNN的模型展开,按照时序方向对其前向传播流程进行介绍

02RNN的前向传播过程.png

RNN的基本模型

  1. 在网络的初始阶段,输入零向量a_{0}作为初始隐藏层的激活值
  2. 基于a^{<0>}x^{<1>}计算下一时序的隐藏层的激活值a^{<1>}
  3. 利用a^{<1>}计算预测值y^{<1>}
  4. 在剩下的时序内循环计算隐藏层的激活值及相应的预测值

利用数学表达式整个过程可以变得更加清晰,RNN的前向传播公式如下:
a^{<1>}=tanh(w_{aa}a^{0}+w_{ax}x^{0}+b_a)

y^{1}=softmax(w_{ya}a^{1}+b_y)

a^{<t>}=tanh(w_{aa}a^{t-1}+w_{ax}x^{t}+b_a)

y^{t}=softmax(w_{ya}a^{t}+b_y)

将上述过程整合到一个RNN cell中,可以表示为如下图所示的过程:

03RNN的前向传播示意图.png

RNN的前向传播示意图

缺陷:

没有利用到模型后续的信息,可以通过双向RNN网络进行优化

2.2RNN的反向传播算法

RNN主要有两种计算梯度的方式:随时间反向传播(BPTT)和实时循环学习法(RTRL)算法

本文中主要介绍随时间反向传播的方法 (BackPropagation Through Time

RNN的损失函数与任务有关,对于同步的序列对序列任务,其loss可以用交叉熵公式表示
L^{t}(\widehat y^{<t>},y^{t})=-y^{<t>}log(\widehat y^{<t>})-(1-y^{<t>})log(1-\widehat y^{<t>})

L(\widehat y,y)=\sum_{t=1}^{T_y}L^{t}(\widehat y^{<t>},y^{t})

然后通过BPTT算法便可以进行梯度的反向传播计算

2.3RNN的梯度消失与爆炸

梯度爆炸的解决方法:梯度修剪

梯度消失的解决方法:增加长程依赖 LSTM,GRU

3.GRU

GRU的基本思路:增加相关门(Relate Gate)和更新门(Update Gate),进而使得RNN单元具有记忆能力

首先从数学角度对GRU的前向传播过程进行介绍,具体公式如下:
\tilde C^{<t>}=tanh(W_{c}[\Gamma_{r}*C^{<t-1>},x^{<t>}]+b_c)

\Gamma_u=\delta(W_u[C^{<t-1>},x^{<t>}]+b_u)

\Gamma_r=\delta(W_r[C^{<t-1>},x^{<t>}]+b_r)

C^{<t>}=\Gamma_u*\tilde C^{<t>}+(1-\Gamma_u) C^{<t-1>}

a^{<t>}=c^{<t>}

y^{<t>}=softmax(a^{<t>})

公式中各变量的含义:

\tilde C^{<t>} 重写记忆细胞的候选值

C^{<t>} 记忆细胞在t时间步的取值

\Gamma_r 相关门

\Gamma_u 更新门

将上述数学公式转化为图像,可得

04GRU的前向传播示意图.png

GRU Cell的前向传播流程

4.LSTM

4.1LSTM的基本原理

LSTM意为长短时记忆网络(Long Short-Term Memory Network,LSTM),可以有效地解决简单神经网络的梯度消失和爆炸问题

在LSTM中,与GRU主要有两点不同

  1. LSTM中有三个门:更新门,遗忘门,输出门

    其中三个门的作用分别为:

    更新门\Gamma_u:控制当前时刻的候选状态\tilde c^{<t>}有多少信息需要保存

    遗忘门\Gamma_f:控制上一时刻内部状态c^{<t-1>}有多少信息需要遗忘

    输出门\Gamma_o:控制当前时刻的内部状态c^{<t>}有多少信息需要被输出给外部状态a^{<t>}

  2. LSTM中a^{<t>}c^{<t>}不再相等

同样,先从数学公式入手,对LSTM的前向传播过程进行了解
\tilde c^{<t>}=tanh(W_{c}[a^{<t-1>},x^{<t>}]+b_c)

\Gamma_u=\delta (W_u[a^{<t-1>},x^{<t>}]+b_u)

\Gamma_f=\delta(W_f[a^{<t-1>},x^{<t>}]+b_f)

\Gamma_o=\delta(W_o[a^{<t-1>},x^{<t>}]+b_o)

c^{<t>}=\Gamma_u*\tilde C^{<t>}+\Gamma_f*c^{<t-1>}

a^{<t>}=\Gamma_o*tanh(c^{<t>})

基于数学公式的过程,可将LSTM CELL的前向传播过程总结为(图片借用于nndl):

05LSTM的前向传播示意图.png

LSTM Cell的前向传播示意图

4.2如何理解长短时记忆

从上图中可以看出,LSTM在前向传播的过程中传输了两个状态:内部状态c以及外部状态h,在整个传播过程中外部状态(隐状态)h每个时刻都会被重写,因此可以看作一种短时记忆,而内部状态c可以在某个时刻捕捉一些关键信息,并将此信息保存一段时间间隔,可以看作一种长时记忆(长的短时记忆)

此外,在LSTM网络初始化训练的时候,需要手动将遗忘门的数值设置的大一些,否则在参数初始化的时候,遗忘门的数据会被初始化为一个很小的值,前一时刻的内部状态c^{<t-1>}大部分都会丢失,这样网络很难获取到长距离的依赖信息,并且相邻时间间隔的梯度会非常小,导致梯度弥散问题,因此遗忘门的偏置变量b_f的初始值一般很大,取1或2

4.3LSTM网络的各种变体

无遗忘门的LSTM网络

\Gamma_f设置为1即可,但是长度非常的大的时候会造成记忆单元的饱和,降低性能

peephole链接

三个门不仅依赖于x^{<t>}a^{<t-1>},也依赖于c^{t-1}

耦合更新门和遗忘门

将两者合并为一个门,即:
\Gamma_f=1-\Gamma_u

5.深层循环神经网络

首先,我们要理解什么是深层的RNN,对于单个的RNN cell,若将其在时间维度上展开,其深度与时间维度的长度成正比,但若将一个RNN cell看作为单个从x->y的映射函数,则单个cell实际上是很浅显的一层,因此深层循环神经网络要做的就是把多个RNN cell组合起来,换句话说,就是增加从输入x^{<t>}到输出y^{<t>}的路径,使得网络的深度更深。

如何增加从输入x^{<t>}到输出y^{<t>}的路径呢?两种途径:

  1. 增加输入x^{<t>}到隐状态a^{<t>}的路径深度
  2. 增加隐状态a^{<t>}到输出y^{<t>}的路径深度

5.1堆叠神经网络

06堆叠循环神经网络.png

堆叠循环神经网络示意图

将网络带入到实际应用场景中:假如我们要翻译一段句子

What is Lucy doing

What are they doing

在这里,is和are实际上是由后面的Lucy和they所决定的,而这种单向的按照时序进行传播的方式没有利用到后面的信息。因此诞生了双向循环网络

5.2双向循环神经网络

07双向循环神经网络.png

双向循环神经网络示意图

双向循环神经网络实际上就是简单的双层循环神经网络,只不过第二层网络的传播方式为按时序的逆向传播,其传播公式为:
a_t^{(1)}=f(W_{ax}*x^{t}+W_{aa}*a_{t-1}^{(1)}+b^{(1)})

a_t^{(2)}=f(W_{ax}*x^{t}+W_{aa}*a_{t+1}^{(1)}+b^{(2)})

a_t=a_t^{(1)}\oplus a_t^{(2)}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 219,427评论 6 508
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 93,551评论 3 395
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 165,747评论 0 356
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,939评论 1 295
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,955评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,737评论 1 305
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,448评论 3 420
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,352评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,834评论 1 317
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,992评论 3 338
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 40,133评论 1 351
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,815评论 5 346
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,477评论 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 32,022评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 33,147评论 1 272
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,398评论 3 373
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 45,077评论 2 355