深度学习(八)循环神经网络RNN

之前所提到的神经网络,处理的都是一个输入对应一个输出的情况,比如一张图片有一种分类,但是还存着一些与时间相关的信号,比如音乐、视频、传感器数据等。对于这样的输入,时间上的顺序十分重要。我们可以选择把整个时序塞进一个大的神经网络作为输入,但是这样的处理会导致网络很难训练,而且不能做到实时输出(比如说翻译),而循环神经网络就很好的解决了这个问题。

  1. 简单的循环神经网络

在这篇利用Keras搭建LSTM循环神经网络里介绍了简单的循环神经网络的结构。
循环神经网络通过 hidden state来储存上一个输入对当前输出的影响,从而有了处理时序关系的能力。

隐藏状态: h_t = tanh(W_hh * h_{t-1} + W_xh *x_t+b_h)
输出: y_t = \sigma(o_t)=\sigma(W_hy *h_t + b_y)

Basic RNN unfolded

反向传播 Backpropagation through Time (BPTT)
训练RNN的过程包括在前向中计算整个序列并得到loss,在反向中计算整个序列的梯度并更新权重值。
需要计算的梯度值如下:
\nabla o_t = \sigma'(o_t) \cdot \frac{\partial L}{\partial \hat{y_t} }(\hat{y_t}, y_t)
\nabla W_{hy,t}= \nabla o_t h_t^T
\nabla b_{y,t}=\nabla o_t
\nabla h_t = (\frac{\partial h_{t+1}}{\partial h_t})^T \nabla h_{t+1}+(\frac{\partial o_t}{\partial h_t})^T \nabla o_t
=W_{hh}^T \cdot tanh'(W_{hh}h_t+W_{xh}X_{t+1}+b_h) \cdot \nabla h_{t+1} + W_{hy}^T \nabla o_t
\nabla W_{hh,t} = \nabla h_t \cdot tanh'(\mu_{t}) \cdot h_{t-1}^T
\nabla W_{xh,t} = \nabla h_t \cdot tanh'(u_t) \cdot x_t^T
\nabla b_{h,t} = \nabla h_t \cdot tanh'(u_t)
可以看到梯度都与时间t有关,对于每个梯度,需要把所有时间上的值加起来。
RNN存在的问题是不能很好地处理长时间的依赖关系,在每一个时间点上隐藏状态都会被覆盖;并且容易出现梯度爆炸和梯度消失(因为累乘)。

  1. LSTM, Long Short-Term Memory Units

LSTM解决了梯度消失的问题以及学会了长时程的依赖,主要思想是使用门来控制记忆的读写。
LSTM的单元包括:

  • 输入x
  • 隐藏状态 hidden stateh_{t_1} / h_t
  • 单元状态 cell stateC_{t-1}/C_t
  • 输出 y_t

需要迭代的状态有:

  • 遗忘门:忘记单元状态里的旧信息
  • 输入门:决定单元信息的输入
  • 计算更新单元信息
  • 计算隐藏状态

单元状态 C_t是时间点t的单元状态, 只会发生线性变换,没有激活函数,可以在多个时间点之后保持不变。

cell state

遗忘门:忘记旧信息。主要思想是在不同的步骤里忘记和记忆信息。f_t控制前一个单元状态是否被遗忘:f_t = \sigma(W_f \cdot [h_{t-1}, x_t]+b_f)

forget gate

输入门:决定新的输入。
i_t = \sigma(W_i \cdot [h_{t-1}, x_t]+b_i)
\tilde{C}_t = tanh(W_c \cdot [h_{t-1}, x_t]+b_C)

input gate

更新单元状态:新的单元状态C_{t-1} 是前一个时间剩下的单元状态,隐藏状态与新输入的信息之和。
C_t = f_t \cdot C_{t-1}+i_t \cdot \tilde{C}_t
这里是线性的关系,单元状态是可以保持不变的,f_t如果取值为1, i_t为0

update unit state

更新隐藏状态与输出:从结构图中可以看到隐藏状态和单元状态是两条不同的通路,而输出与隐藏状态有关。
o_t = \sigma(W_{\sigma}[h_{t-1}, x_t]+b_o)
h_t = o_t \cdot tanh(C_t)
y_t = \sigma(h_t)

hidden state and output

  1. GRU, Gated Recurrent Units

LSTM的缺点是参数太多,很难训练,GRU作为LSTM的变体,结构更加简单,参数数量更少。


GRU

最主要的区别是没有多余的单元状态,记忆的操作只通过隐藏状态实现。
隐藏状态的更新包括:

  • 重置门:上一个时间的隐藏状态的影响
  • 更新门:新算出来的更新的影响
  • 建议更新隐藏状态
  • 计算更新的隐藏状态

重置门:r_t = \sigma(W_r \cdot [h_{t-1},x_t]+b_r)

reset gate

更新门:z_t = \sigma(W_z \cdot [h_{t-1}, x_t]+b_z)

update gate

隐藏状态更新:把输入和重置的隐藏状态结合在一起,r_t如果接近0,说明以前的隐藏状态影响很小。
\tilde{h}_t = tanh(W_h \cdot [r_t \cdot h_{t-1}, x_t] + b_n)

proposing an update

更新的隐藏状态是旧状态与建议更新的结合,h_t = (1-z_t) \cdot h_{t-1}+z_t \cdot \tilde{h}^T
\hat{y}_t = \sigma(h_t)

update hidden state

学习短期的关系时限制重置门, r_t接近0,忽略以前的隐藏状态;学习长期的关系时限制更新门,z_t接近0,忽略输入。

  1. 简单RNN, LSTM 与GRU的比较

简单RNN在训练中会遇到梯度爆炸/消失的问题,由于指数减小的梯度短期依赖关系隐藏了长期依赖关系,隐藏状态在每个时间步中都被覆盖。对此LSTM和改进版的GRU被提了出来。

LSTM和GRU的相似之处在于都使用了门来控制信息流,能够得到不同时间尺度上的依赖关系,反向传播过程中都有加法计算保持误差。

不同之处在于LSTM将隐藏状态和单元状态分开处理,而GRU将二者合在了一起。LSTM通过输出门控制记忆内容,新的记忆内容独立于当前存储的记忆;而GRU存内容的完全无需控制,新的记忆内容取决于当前记忆。

参考:
[1] Long short-term memory
[2] Learning the Long-Term Structure of the Blues
[3] Learning phrase representations using RNN encoder-decoder for statistical machine translation

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