【deeplearning.ai】循环神经网络

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

序列数据及能做的事

这里写图片描述

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

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

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

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

RNN

前向传播1

  更新公式:
a ( 0 ) = 0 ^
a < t > = g ( w a a < t 1 > + w x x < t > + b a )
y ^ < t > = g ( w y a < t > + b y )

  为了书写方便,有以下定义:
[ a < t > , x < t > ] = [ a < t > x < t > ]
a < t > = g ( w a [ a < t > , x < t > ] + b a )

RNN结构类型

RNN结构类型

单向RNN的一个缺点:

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

双向RNN(BRNN)

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

BRNN

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

GRU(Gate Recurrent Unit)

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

c ^ < t > = t a n h ( w c [ c < t 1 > , x < t > ] + b c )
  以及一个门 Γ y 来判断是否更新细胞记忆。
Γ y = σ ( w y [ c < t 1 > , x < t > ] + b y )
  更新后的细胞状态为:
c < t > = Γ y c ^ < t > + ( 1 Γ y ) c < t 1 >
   这里的 Γ u 控制更新, ( 1 Γ u ) 控制遗忘(对应后面的忘记门)

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

LSTM公式及结构图

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

猜你喜欢

转载自blog.csdn.net/qq_19784349/article/details/80901383