循环体现在哪里?
体现在隐藏层之间的连接中。普通神经网络的隐藏层没有连接。RNN为了提取时序数据之间的关系,让
t
t
t 时刻的隐藏层状态受到上一时刻
h
t
?
1
h_{t-1}
ht?1? 的影响。
在时间上展开:
h
t
=
f
(
U
h
t
?
1
+
W
x
t
+
b
)
h_t = f(Uh_{t-1}+Wx_{t}+b)
ht?=f(Uht?1?+Wxt?+b)
可以看出公式中蕴含的递归关系。
h
0
h_0
h0? 需要初始化。
RNN的几种应用
RNN输出什么?
以
p
y
t
o
r
c
h
pytorch
pytorch 为例,输出两个值。
-
t
t
t 个时刻的最后一层隐藏层状态。
- 最后一个时刻的各个循环层的状态。
用这些输出可以做什么?
序列到类别
每个
h
t
h_t
ht? 代表着该时刻的信息和历史信息。
可以认为
h
T
h_T
hT? 蕴藏着整个序列的信息。将它作为一个分类器的输入,可以输出标签。(也可以同时应用
h
1
h_1
h1?~
h
T
h_T
hT? )
序列到序列
输入序列和输出序列长度相同,如文本标注。利用每个
h
t
h_t
ht?。
输入和输出长度不同,如翻译。利用
h
T
h_T
hT?。
编码:得到
h
T
h_T
hT?
解码:输出各个
y
y
y
参数学习问题
需要学习的参数:
输入层到隐藏层的权重
W
W
W、偏置
b
b
b;
隐藏层之间的权重
U
U
U、偏置
b
b
b
时间间隔较长时,容易出现梯度爆炸或梯度消失。
简单解决方法:当梯度超过某个阈值时就截断。
门控循环神经网络
目的:控制信息积累速度,解决长程依赖。
LSTM
遗忘门、输入门、输出门
普通RNN中
f
(
U
h
t
?
1
+
w
t
x
t
+
b
)
f(Uh_{t-1}+w_tx_t+b)
f(Uht?1?+wt?xt?+b) 直接输出下一刻的隐藏层。LSTM中输出的只能算候选状态。候选状态通过输入门,上一时刻
c
e
l
l
cell
cell 通过遗忘门,共同构成此刻
c
e
l
l
cell
cell。之后生成隐藏状态。
“门”的参数也需要训练,是
U
h
t
?
1
+
w
t
x
t
+
b
Uh_{t-1}+w_tx_t+b
Uht?1?+wt?xt?+b 通过
L
o
g
i
s
t
i
c
Logistic
Logistic 变换得到。
对比简单RNN
与简单的RNN网络模型比,LSTM不是仅仅依靠快速变化的hidden state的信息去产生预测,而是还利用了记忆细胞 cell 进行长程记忆。
关键就是最上层的记忆细胞,是一个近似线性流,信息衰减很弱
比如有一个有长程依赖的待预测数据:
I grew up in France… I speak fluent ().
当LSTM读到 ‘France’ 后,就把 ‘France’ 的信息存在记忆细胞特定的位置上,再经过后面的时间步时,这个France的信息会因为遗忘门的乘法而冲淡,但是要注意,这个冲淡的效果很弱,如果冲刷记忆的效果太强那就和简单的RNN类似了(可能有人要问,要把这个冲刷的强度置为多少呢?答:这是LSTM自己学出来的),当LSTM读到fluent时,结合记忆细胞中France的信息,就预测出French的答案。
GRU网络
与 LSTM 的区别:
- 只有两个门:update gate 和 reset gate
- 直接传递隐藏状态
h
h
h,
h
t
?
1
h_{t-1}
ht?1? 与
r
t
r_t
rt? 相乘得到new memory。(LSTM用记忆细胞 cell 将
h
h
h 其包装)
GRU的参数更少。
拓展
多层RNN
双向RNN
第一层按时间顺序,第二层按时间逆序,最后拼接。
h
t
h_{t}
ht? 中含有双向信息。
|