循环神经网络(recurrent neural network, RNN) 是一类用于处理序列数据的神经网络。
1 计算图
计算图是形式化一组计算结构的方式,它的元素包括节点(node)和边(edge),节点表示变量,可以是标量、矢量、张量等,而边表示的是某个操作,即函数。
用两个计算图来表示一个嵌套函数:
还可以用一个图来表示一个复合函数:
对于计算图的求导可以使用链式法则,有两种情况:
- 情况1:没有分支的,只有一条链
- 情况2:有分支,具有多条链路
例如如下计算图的求导,其中黑色实现代表数据流动方向,红色和黄色代表导数传播方向:
- a = 3 , b = 1 a=3,b=1 a=3,b=1可以得到 c = 4 , d = 2 , e = 6 c=4,d=2,e=6 c=4,d=2,e=6
- 从e到a只有一条链路
∂ e ∂ a = ∂ e ∂ c ∂ c ∂ a = d = b + 1 = 2 \frac{\partial e}{\partial a}=\frac{\partial e}{\partial c}\frac{\partial c}{\partial a}=d=b+1=2 ∂a∂e=∂c∂e∂a∂c=d=b+1=2 - 从e到b有两条链路
∂ e ∂ b = ∂ e ∂ c ∂ c ∂ b + ∂ e ∂ d ∂ d ∂ b = d + c = b + 1 + a + b = 5 \frac{\partial e}{\partial b}=\frac{\partial e}{\partial c}\frac{\partial c}{\partial b}+\frac{\partial e}{\partial d}\frac{\partial d}{\partial b}=d+c=b+1+a+b=5 ∂b∂e=∂c∂e∂b∂c+∂d∂e∂b∂d=d+c=b+1+a+b=5
计算图可以很好的表示导数的前向传递和后向传递的过程
2 RNN基本原理
CNN大量应用于图像处理领域,然而现实生活中还存在很多序列化结构,我们需要建立一种更好的模型来处理序列化数据。这就是RNN发展的初衷。
循环神经网络是一种人工神经网络,它的节点间的连接形成一个遵循时间序列的有向图。它的核心思想是,样本间存在顺序关系,每个样本和它之前的样本存在关联。通过神经网络在时序上的展开,我们能够找到样本之间的序列相关性。RNN的一般结构如下:
其中
x
t
,
s
t
,
o
t
x_t,s_t,o_t
xt,st,ot分别表示
t
t
t时刻的输入、记忆和输出。
U
,
V
,
W
U,V,W
U,V,W分别表示RNN的连接权重,
b
s
,
b
o
b_s,b_o
bs,bo是偏置项,
σ
,
φ
\sigma,\varphi
σ,φ是激活函数,
σ
\sigma
σ常选用tanh或sigmod,
φ
\varphi
φ常选用softmax。
RNN举例:
对“我/n,爱/v购物/n”进行词性标注
将神经元的输出存到memory中,memory中值会作为下一时刻的输入。在最开始时刻,给定 memory初始值,然后逐次更新memory中的值。
常见RNN的一般结构:
- Elman Network
- Jordan Network
- 其他不同RNN的结构
3 RNN训练算法BPTT
CNN中利用BP算法进行模型训练,定义损失函数 Loss 来表示输出
y
^
\hat{y}
y^ 和真实标签
y
y
y 的误差,通过链式法则自顶向下求得Loss对网络权重的偏导。沿梯度的反方向更新权重的值, 直到Loss收敛。而这里的BPTT算法就是加上了时序演化,后面的两个字母TT就是Through Time。
- 定义模型输出为: s t = t a n h ( U x t + W s t − 1 ) y ^ = s o f t m a x ( V s t ) s_t=tanh(Ux_t+Ws_{t-1}) \\ \hat{y}=softmax(Vs_t) st=tanh(Uxt+Wst−1)y^=softmax(Vst)
- 再定义损失函数: E t ( y t , y ^ t ) = − y t l o g y ^ t E ( y , y ^ ) = ∑ t E t ( y t , y ^ t ) = − ∑ t y t l o g y ^ E_t(y_t,\hat{y}_t)=-y_tlog\hat{y}_t \\ E(y,\hat{y})=\sum_tE_t(y_t,\hat{y}_t)=-\sum_ty_tlog\hat{y} Et(yt,y^t)=−ytlogy^tE(y,y^)=t∑Et(yt,y^t)=−t∑ytlogy^
- 分别求损失函数
E
E
E对
U
U
U、
V
V
V、
W
W
W的梯度:
∂ E ∂ V = ∑ t ∂ E t ∂ V ∂ E ∂ W = ∑ t ∂ E t ∂ W ∂ E ∂ U = ∑ t ∂ E t ∂ U \frac{\partial E}{\partial V}=\sum_t\frac{\partial E_t}{\partial V} \\ \frac{\partial E}{\partial W}=\sum_t\frac{\partial E_t}{\partial W} \\ \frac{\partial E}{\partial U}=\sum_t\frac{\partial E_t}{\partial U} ∂V∂E=t∑∂V∂Et∂W∂E=t∑∂W∂Et∂U∂E=t∑∂U∂Et- 求 E E E对 V V V的梯度,先求 E 3 E_3 E3对 V V V的梯度: ∂ E 3 ∂ V = ∂ E 3 ∂ y ^ 3 ∂ y ^ 3 ∂ V = ∂ E 3 ∂ y ^ 3 ∂ y ^ 3 ∂ z 3 ∂ z 3 ∂ V \frac{\partial E_3}{\partial V}=\frac{\partial E_3}{\partial \hat{y}_3} \frac{\partial \hat{y}_3}{\partial V}=\frac{\partial E_3}{\partial \hat{y}_3} \frac{\partial \hat{y}_3}{\partial z_3}\frac{\partial z_3}{\partial V} ∂V∂E3=∂y^3∂E3∂V∂y^3=∂y^3∂E3∂z3∂y^3∂V∂z3其中 z 3 = V s 3 z_3=V_{s_3} z3=Vs3,然后求和即可。
- 求 E E E对 V V V的梯度,先求 E 3 E_3 E3对 W W W的梯度: ∂ E 3 ∂ W = ∂ E 3 ∂ y ^ 3 ∂ y ^ 3 ∂ s 3 ∂ s 3 ∂ W s 3 = t a n h ( U x 3 + W s 2 ) ∂ E 3 ∂ W = ∑ k = 0 3 ∂ E 3 ∂ y ^ 3 ∂ y ^ 3 ∂ s 3 ∂ s 3 ∂ s k ∂ s k ∂ W = ∑ k = 0 3 ∂ E 3 ∂ y ^ 3 ∂ y ^ 3 ∂ s 3 ( ∏ j = k + 1 3 ∂ s j ∂ s j − 1 ) ∂ s k ∂ W \frac{\partial E_3}{\partial W}=\frac{\partial E_3}{\partial \hat{y}_3} \frac{\partial \hat{y}_3}{\partial s_3}\frac{\partial s_3}{\partial W} \\ s_3=tanh(Ux_3+Ws_2) \\ \frac{\partial E_3}{\partial W}=\sum_{k=0}^3\frac{\partial E_3}{\partial \hat{y}_3} \frac{\partial \hat{y}_3}{\partial s_3}\frac{\partial s_3}{\partial s_k}\frac{\partial s_k}{\partial W} \\ =\sum_{k=0}^3\frac{\partial E_3}{\partial \hat{y}_3} \frac{\partial \hat{y}_3}{\partial s_3}(\prod_{j=k+1}^3\frac{\partial s_j}{\partial s_{j-1}})\frac{\partial s_k}{\partial W} ∂W∂E3=∂y^3∂E3∂s3∂y^3∂W∂s3s3=tanh(Ux3+Ws2)∂W∂E3=k=0∑3∂y^3∂E3∂s3∂y^3∂sk∂s3∂W∂sk=k=0∑3∂y^3∂E3∂s3∂y^3(j=k+1∏3∂sj−1∂sj)∂W∂sk其中 s 3 s_3 s3依赖于 s 2 s_2 s2,而 s 2 s_2 s2又依赖于 s 1 s_1 s1和 W W W,依赖关系一直传递到 t = 0 t=0 t=0时刻。因此,当计算对 W W W的偏导时,不能把 s 2 s_2 s2看作常数项
- 求 E E E对 V V V的梯度,先求 E 3 E_3 E3对 U U U的梯度: ∂ E 3 ∂ U = ∂ E 3 ∂ y ^ 3 ∂ y ^ 3 ∂ s 3 ∂ s 3 ∂ U = ∑ k = 0 3 ∂ E 3 ∂ y ^ 3 ∂ y ^ 3 ∂ s 3 ∂ s 3 ∂ s k ∂ s k ∂ U \frac{\partial E_3}{\partial U}=\frac{\partial E_3}{\partial \hat{y}_3} \frac{\partial \hat{y}_3}{\partial s_3}\frac{\partial s_3}{\partial U} \\ = \sum_{k=0}^3\frac{\partial E_3}{\partial \hat{y}_3} \frac{\partial \hat{y}_3}{\partial s_3}\frac{\partial s_3}{\partial s_k}\frac{\partial s_k}{\partial U} ∂U∂E3=∂y^3∂E3∂s3∂y^3∂U∂s3=k=0∑3∂y^3∂E3∂s3∂y^3∂sk∂s3∂U∂sk
4 LSTM基本原理
LSTM,即长短时记忆网络,于1997年被Sepp Hochreiter 和Jürgen Schmidhuber提出来,LSTM是一种用于深度学习领域的人工循环神经网络(RNN)结构。一个LSTM单元由输入门、输出门和遗忘门组成,三个门控制信息进出单元。
- LSTM依靠贯穿隐藏层的细胞状态实现隐藏单元之间的信息传递,其中只有少量的线性操作
- LSTM引入了“门”机制对细胞状态信息进行添加或删除,由此实现长程记忆
- “门”机制由一个Sigmoid激活函数层和一个向量点乘操作组成,Sigmoid层的输出控制了信息传递的比例
-
遗忘门: LSTM通过遗忘门(forget gate)实现对细胞状态信息遗忘程度的控制,输出当前状态的遗忘权重,取决于 h t − 1 h_{t-1} ht−1和 x t x_t xt
f t = σ ( W f ⋅ [ h t − 1 , x t ] + b f ) f_t=\sigma(W_f \cdot [h_{t-1},x_t]+b_f) ft=σ(Wf⋅[ht−1,xt]+bf)
-
输入门: LSTM通过输入门(input gate)实现对细胞状态输入接收程度的控制,输出当前输入信息的接受权重,取决于 h t − 1 h_{t-1} ht−1和 x t x_t xt
i ˙ t = σ ( W i ˙ ⋅ [ h t − 1 , x t ] + b i ˙ ) C ~ t = t a n h ( W C ⋅ [ h t − 1 , x t ] + b C ) \dot{i}_t=\sigma(W_{\dot{i}} \cdot [h_{t-1},x_t]+b_{\dot{i}}) \\ \tilde{C}_t=tanh(W_C \cdot [h_{t-1},x_t]+b_C) i˙t=σ(Wi˙⋅[ht−1,xt]+bi˙)C~t=tanh(WC⋅[ht−1,xt]+bC)
-
输出门: LSTM通过输出门(output gate)实现对细胞状态输出认可程度的控制,输出当前输出信息的认可权重,取决于 h t − 1 h_{t-1} ht−1和 x t x_t xt
o t = σ ( W σ ⋅ [ h t − 1 , x t ] + b σ ) o_t=\sigma(W_{\sigma}\cdot [h_{t-1},x_t]+b_{\sigma}) ot=σ(Wσ⋅[ht−1,xt]+bσ)
-
状态更新: “门”机制对细胞状态信息进行添加或删除,由此实现长程记忆。
C t = f t ∗ C t − 1 + i t ∗ C t h t = o t ∗ t a n h ( C t ) C_t=f_t \ast C_{t-1}+i_t\ast C_t \\ h_t=o_t\ast tanh(C_t) Ct=ft∗Ct−1+it∗Ctht=ot∗tanh(Ct)
5 其他RNN网络
-
Gated Recurrent Unit(GRU)
Gated Recurrent Unit (GRU),是在2014年提出的,可认为是LSTM 的变种,它的细胞状态与隐状态合并,在计算当前时刻新信息的方法和LSTM有 所不同;GRU只包含重置门和更新门;在音乐建模与语音信号建模领域与LSTM具有相似的性能,但是参数更少,只有两个门控。
-
Peephole LSTM
让门层也接受细胞状态的输入,同时考虑隐层信息的输入。
-
Bi-directional RNN(双向RNN)
Bi-directional RNN(双向RNN)假设当前t的输出不仅仅和之前的序列有关,并且还与之后的序列有关,例如:完形填空,它由两个RNNs上下叠加在一起组成,输出由这两个RNNs的隐藏层的状态决定。
-
Continuous time RNN(CTRNN)
CTRNN利用常微分方程系统对输入脉冲序列神经元的影响 进行建模。CTRNN被应用到进化机器人中,用于解决视觉、协作和最 小认知行为等问题。
6 RNN主要应用
-
语言模型
问答系统 -
自动作曲
-
机器翻译
-
自动写作
根据现有资料自动写作,当前主要包括新闻写作和诗歌创作。主要是基于RNN&LSTM的文本生成技术来实现,需要训练大量同 类文本,结合模板技术。
目前主要产品有:腾讯Dreamwriter写稿机器人、今日头条xiaomingbot、第一财经DT稿王(背后是阿里巴巴) 、百度Writing-bots… -
图像描述