RNN、LSTM、梯度消失基本概念

序列数据及能做的事

【deeplearning.ai】循环神经网络

  • 语音识别:一维时间序列 文本序列
  • 音乐生成器:输入为空 音乐
  • 情感分类器:文本序列星级评分(0~5)/正负类(0/1)
  • DNA序列分析:字符序列字符序列
  • 翻译系统:文本序列文本序列
  • 视频标识(视频活动识别):视频类别
  • (名字)身份识别:文本序列文本序列

  如果输入是文本序列,则处理数据的方式是对单词建立词典并向量化每个单词(one-hot编码)。若单词在词库中不存在,则可用表示。

为什么不用传统网络处理序列数据?
  1. 输入输出长度不固定(及时可用填充成一样的,那也表现的不是很好)【参数共享可用解决】
  2. 第一层参数过大(输入为字典向量,假设词库有1W个单词,那也有成百上千万个参数)
梯度爆炸和梯度消失

  梯度爆炸可通过梯度修剪解决,就是如果数值过大,则缩小,实验表明该操作具有一定鲁棒性;而梯度消失相对难解决的多,所以很多策略都是用于解决梯度消失的。

RNN

【deeplearning.ai】循环神经网络

  更新公式:

a(0)=0^

a<t>=g(waa<t1>+wxx<t>+ba)

y^<t>=g(wya<t>+by)

  为了书写方便,有以下定义:

[a<t>,x<t>]=[a<t>x<t>]

a<t>=g(wa[a<t>,x<t>]+ba)

RNN结构类型

【deeplearning.ai】循环神经网络

单向RNN的一个缺点:

  网络只使用了序列之前的信息,没综合后面的信息(如只使用单向网络,不能确定一个单词是人名的一部分还是地名的一部分)

双向RNN(BRNN)

  双向RNN可以获取双向的信息,即过去和未来的信息。

【deeplearning.ai】循环神经网络

  就是输出的时候,综合了前向传播网络的输出和后向传播网络的输出。
  BRNN的缺点是需要完整的数据的序列,才能预测任意位置(相较之前只需要前面信息)。例如,语音系统需要你说完话才能工作。

GRU(Gate Recurrent Unit)

  GRU(门循环单元)改变了RNN的隐藏单元,使其可以更好地捕捉深层连接,并改善了梯度消失问题(通过改变更新的力度,相当于可以更好地丢掉无用的)。以下展示了门的作用:控制细胞状态更新与否,更新力度。
  变量c代表细胞,即记忆细胞,c=memory cell。记忆细胞的作用是提供了记忆的功能(比如猫是单数还是双数)。细胞想要更新的值(候选值)为【需要理解的是,这个单元的c^<t>=a^<t>】:

c^<t>=tanh(wc[c<t1>,x<t>]+bc)

  以及一个门Γy来判断是否更新细胞记忆。

Γy=σ(wy[c<t1>,x<t>]+by)

  更新后的细胞状态为:

c<t>=Γyc^<t>+(1Γy)c<t1>

  这里的Γu控制更新,(1Γu)控制遗忘(对应后面的忘记门)

LSTM(long-short time memory,长短时记忆)

【deeplearning.ai】循环神经网络

  其中,Γu是控制更新的门,Γf是控制忘记的门,Γo是控制遗忘的门,c^<t>是细胞状态更新的候选值,c<t>是细胞状态,a<t>是前后信息的**值。大概a<t>用于保存前后记忆(短时记忆),便于“联想”,c<t>用于保存历史记忆的重要信息(长时记忆