背景--传统前馈网络的短板
1.层与层之间连接, 每层之间无连接. 每层输入输出维数是固定的, 不能任意改变. 无法处理变长序列数据 |
2.假设每次输入都是独立的, 也就是说每次网络的输出只依赖于当前的输入 |
RNN的结构
各种类型的网络 | ![]()
| ||
更新状态 | ![]() ![]()
|
| ![]()
|
按时间展开 | ![]()
|
随时间的反向传播算法
向前传播, 反向传播 | ![]()
|
向前传播 | ![]()
|
反向传播 | 1.L对V的梯度: 2.L对W的梯度: 3.L对U的梯度: |
应对梯度消失, 梯度爆炸
背景 | 在时间维度上, RNN很深, 必须直面, 梯度消失(尤其), 梯度爆炸 | |
应对 | 梯度消失 | 梯度截断: 在梯度到达一定阈值之后, 将梯度进行缩减 |
梯度爆炸 | 1.采用其他的激活函数 2.权重初始化采用一些限制 3.设计改进不同的网络结构 | |
采用其他激活函数 |
采用ReLU函数防止激活函数将梯度快速收缩 | |
权重初始化限制 |
将权重初始化为单位矩阵, 有助于防止权重缩减到0 | |
设计不同的网络结构 | 回声状态网络ESN, 只学习输出权重 |
LSTM
核心 | 依靠一个门控单元追踪时间步中的信息 | |
门控机制 | ![]()
| |
遗忘 | ![]()
| 即决定哪些信息要从历史状态单元中遗忘,
|
留下 | ![]()
| 即决定在细胞单元状态中存储哪些信息
Sigmoid层: 决定更新哪些值 Tanh层:生成新的可以添加到细胞单元状态的”候选值”向量 |
更新 | ![]()
| 即更新旧的细胞状态
即: 遗忘门+添加新信息 |
输出 | ![]()
| 即决定需要输出的值
Sigmiod层: 决定输出细胞单元状态中的哪部分 Tanh层: 将细胞单元状态从挤压到(-1,1) 乘积: 输出过滤后版本的细胞单元状态 |
较标准RNN | 相同点: 接受两个输入, 得到一个输出. 使用两个参数矩阵W_(xc), W_(hc), 以及tanh函数 不同点: LSTM通过三个门控单元, 对信息进行控制 缓解梯度消失: f_t闭合时, 梯度可以直接传递到C_(t-1), 从而缓解梯度消失的问题 |
GRU
门 | LSTM有三个门, 遗忘门, 输入门与输出门, GRU有两个门: 重置门与更新门
|
GRU与LSTM区别 |
GRU则通过重置门控制是否保留原来隐藏状态信息, 不再限制当前信息传入
GRU输出隐藏状态: |
重置门r_t | 用于控制h_(t-1)对当前x_t的影响 |
更新门z_t | 用于决定是否忽略当前x_t, 类似于LSTM中的输入门 |
总结
|
|
|
|
|
|