1 RNNs
1.1 优点
- 能够学习序列信息,比如:文本,视频等这些有序列信息的数据
- 降低了整体的模型参数,因为所有steps都共享相同的参数
- 在NLP领域有着很广泛的应用
1.2 模型结构
将RNN模型展开形式类似于DNN模型,只是在每个输入step都共享相同的参数变量,如下图所示:
1.2.1 Elman和Jordan网络
在1990年,由Jefrey Elman提出的网络是最早的简单的循环神经网络,以及后面Jordan提出的循环网络。
Elman网络计算公式如下:
h
t
=
σ
h
(
W
h
x
t
+
U
h
h
t
−
1
+
b
h
)
h_t = \sigma_h(W_hx_t + U_hh_{t-1} + b_h)
ht=σh(Whxt+Uhht−1+bh)
y
t
=
σ
y
(
W
y
h
t
+
b
y
)
y_t = \sigma_y(W_yh_t + b_y)
yt=σy(Wyht+by)
Jordan网络计算公式如下:
h
t
=
σ
h
(
W
h
x
t
+
U
h
y
t
−
1
+
b
h
)
h_t = \sigma_h(W_hx_t + U_hy_{t-1} + b_h)
ht=σh(Whxt+Uhyt−1+bh)
y
t
=
σ
y
(
W
y
h
t
+
b
y
)
y_t = \sigma_y(W_yh_t+b_y)
yt=σy(Wyht+by)
其中
x
t
x_t
xt是输入向量,
h
t
h_t
ht是hidden layer向量,
y
t
y_t
yt是输出向量,
W
,
U
,
b
W, U, b
W,U,b是模型参数,
σ
h
\sigma_h
σh和
σ
y
\sigma_y
σy是激活函数。在step
t
t
t的
h
t
h_t
ht计算包含两个输入,一个是
t
t
t步的
x
t
x_t
xt,一个就是上一时刻的隐层状态
h
t
−
1
h_{t-1}
ht−1。
1.2.2 LSTMs
通过门机制去控制信息的接收和释放,和上面提到的普通的RNN模型结构的主要区别是加了几个门机制用来控制 x x x的输入和上一时刻hidden状态的输入。计算步骤如下:
- step 1: 计算输入门,用来控制当前
x
t
x_t
xt的输入信息量
i ( t ) = σ ( W ( i ) x ( t ) + U ( i ) h ( t − 1 ) + b i ) i^{(t)}=\sigma(W^{(i)}x^{(t)} + U^{(i)}h^{(t-1)}+b_i) i(t)=σ(W(i)x(t)+U(i)h(t−1)+bi) - step 2: 计算遗忘门,用来控制上一时刻
h
t
−
1
h_{t-1}
ht−1输入信息量
f ( t ) = σ ( W ( f ) x ( t ) + U ( f ) h ( t − 1 ) + b f ) f^{(t)}=\sigma(W^{(f)}x^{(t)} + U^{(f)}h^{(t-1)}+b_f) f(t)=σ(W(f)x(t)+U(f)h(t−1)+bf) - step 3: 计算输出门,用来控制当前时刻的输出信息量
o ( t ) = σ ( W ( o ) x ( t ) + U ( o ) h ( t − 1 ) + b o ) o^{(t)}=\sigma(W^{(o)}x^{(t)} + U^{(o)}h^{(t-1)}+b_o) o(t)=σ(W(o)x(t)+U(o)h(t−1)+bo) - step 4: 计算memory cell状态值
c ^ ( t ) = t a n h ( W ( c ) x ( t ) + U ( c ) h ( t − 1 ) + b c ) \hat{c}^{(t)} = tanh(W^{(c)}x^{(t)} + U^{(c)}h^{(t-1)}+b_c) c^(t)=tanh(W(c)x(t)+U(c)h(t−1)+bc) - step 5: 用遗忘门和输入门更新最终的memory cell状态
c ( t ) = f ( t ) ⋅ c ( t − 1 ) + i ( t ) ⋅ c ^ ( t ) c^{(t)} = f^{(t)} \cdot {c}^{(t-1)} + i^{(t)} \cdot \hat{c}^{(t)} c(t)=f(t)⋅c(t−1)+i(t)⋅c^(t) - step 6: 用输出门控制最终的hidden state状态值
h ( t ) = o ( t ) ⋅ t a n h ( c ( t ) ) h^{(t)} = o^{(t)} \cdot tanh(c^{(t)}) h(t)=o(t)⋅tanh(c(t))
图形表示如下:
在计算输入门,遗忘门,输出门,cell状态时,输入都是
x
(
t
)
x^{(t)}
x(t)和
h
(
t
−
1
)
h^{(t-1)}
h(t−1),各自有对应的参数矩阵是
U
U
U和
W
W
W,其中
U
U
U和
W
W
W可以合并为一个大的矩阵参数,所以整体来说,模型需要学习的参数就是在计算输入门,遗忘门,输出门,cell状态时总共需要学习更新的的4个大的矩阵参数。
1.2.3 GRUs
LSTM确实有效,但是感觉有点复杂,所以后来又发明了GRU结构。LSTM和GRU是目前为止用的最广泛的两种门机制RNN结构。而GRU的计算公式如下:
- step 1: 计算重置门
r t = σ ( W r x t + U r h t − 1 + b r ) r_t = \sigma(W_rx_t+U_rh_{t-1} + b_r) rt=σ(Wrxt+Urht−1+br) - step 2: 计算更新门
u t = σ ( W u x t + U u h t − 1 + b u ) u_t = \sigma(W_ux_t + U_uh_{t-1} +b_u) ut=σ(Wuxt+Uuht−1+bu) - step 3: 更新中间状态
h t ^ = t a n h ( W x t + U ( r t ⋅ h t − 1 ) + b ) \hat{h_t} = tanh(Wx_t+U(r_t \cdot h_{t-1}) + b) ht^=tanh(Wxt+U(rt⋅ht−1)+b) - step 4: 计算最终hidden state状态计算
h t = u t ⋅ h t ^ + ( 1 − u t ) ⋅ h t − 1 h_t = u_t \cdot \hat{h_t} + (1-u_t) \cdot h_{t-1} ht=ut⋅ht^+(1−ut)⋅ht−1
从上面公式我们可以看出,GRU结构相比LSTM,由三个门合并到了两个门:重置门 r r r,更新门 u u u,相对应的也减少了一个矩阵参数。再加上还有一个矩阵参数更新 h ^ \hat{h} h^,所以由LSTM的4个矩阵参数降低到了三个矩阵参数,计算量比LSTM降低,而相关的试验和研究证明其中的效果整体和LSTM持平。