RNN
- 一到多:图像描述:图像---->词语序列
- 多到一:情感分类:词语序列---->情感
- 多到多:机器翻译:词语序列---->词语序列
- 多到多:帧级视频分类
RNN包含如下单元:
h t = f W ( h t − 1 , x t ) h_t=f_W(h_{t-1},x_t) ht=fW(ht−1,xt),在每一步都是用相同的函数和参数。
最简单的例子:
h
t
=
tanh
(
W
h
h
h
t
−
1
+
W
x
h
x
t
)
y
t
=
W
h
y
h
t
\begin{aligned} h_t&=\tanh(W_{hh}h_{t-1}+W_{xh}x_t)\\ y_t&=W_{hy}h_t \end{aligned}
htyt=tanh(Whhht−1+Wxhxt)=Whyht
h
t
=
tanh
(
W
h
h
h
t
−
1
+
W
x
h
x
t
)
=
tanh
(
(
W
h
h
W
x
h
)
(
h
t
−
1
x
t
)
T
)
=
tanh
(
W
(
h
t
−
1
x
t
)
T
)
\begin{aligned} h_t&=\tanh(W_{hh}h_{t-1}+W_{xh}x_t)\\ &=\tanh((W_{hh}\quad W_{xh})(h_{t-1}\quad x_t)^T)\\ &=\tanh(W(h_{t-1}\quad x_t)^T) \end{aligned}
ht=tanh(Whhht−1+Wxhxt)=tanh((WhhWxh)(ht−1xt)T)=tanh(W(ht−1xt)T)
当
W
W
W的最大特征值大于1时,会发生梯度爆炸,此时需要梯度截断
grad_norm = np.sum(grad * grad)
if grad_norm > threshold:
grad *= (threshold / grad_norm)
当 W W W的最大特征值小于1时,会发生梯度消失,此时需要换一个更复杂的RNN结构。
LSTM(长短期记忆网络)
可以解决梯度消失或爆炸的情况,使用两个隐藏状态,四个门都是上层隐藏状态和当前输入计算得到
i:输入门 表示要接受多少输入
f:遗忘门 表示要遗忘多少之前的单元记忆
o:输出门 表示要展示多少内容信息给外部
g:门之门 表示有多少信息要写入输入单元中
红色箭头表示梯度反向传播