目录

  • 一、RNN算法
  • 1.1、什么是RNN?
  • 1.2、为什么要发明RNN?
  • 1.3、RNN的结构和原理?
  • 1.4、RNN的特性?
  • 1.5、前向传播和反向传播?梯度消失问题?
  • 二、 LSTM算法
  • 2.1、什么是LSTM?
  • 2.2、LSTM原理
  • 2.3、LSTM如何解决梯度消失问题?
  • 2.4、双向LSTM
  • Reference


一、RNN算法

1.1、什么是RNN?

RNN是一种神经网络,类似CNN、DNN等,RNN对具有序列特征的数据(文本、语音等)非常有效,它能挖掘出数据中的时序信息和语义信息。

序列特性:符合时间顺序、逻辑顺序或者其他顺序。

1.2、为什么要发明RNN?

例子:

RNN时序算法案例 Keras rnn时间序列_公式推导


一般的神经网络,识别文本信息时不会考虑上下文信息,只是单独的在训练Apple这个单词,哪种意思在train当作出现次数更多,预测得到的Apple信息自然就偏向它。但是在真实语义当中,Apple单词有多种意思,如何根据每句话的具体含义去预测对应的意思,这就需要用到上下文信息(时序特征),于是就有了RNN。

1.3、RNN的结构和原理?

RNN的结构如下图,输入输出层都是全连接层,中间的隐藏层是循环结构,

RNN时序算法案例 Keras rnn时间序列_深度学习_02

1.4、RNN的特性?

  1. 串联的,可以有效处理序列数据。如何处理:每个时刻都会把当前时刻的隐藏层信息保存下来,传给下一时刻用,这就保证了每个时刻前面所有时刻的隐藏层信息。
    注意:这里的说的时刻,不是训练时间啊,是针对序列前后顺序而言的。比如我有一个词向量序列 I Love You,那么Love就是 I 的下一个时刻。通过RNN,我Love就有了I的信息和我本身的信息,而You就有了I、Love的信息以及本身的信息。
  2. 所有特征共享同一套参数,极大的减少参数量。

1.5、前向传播和反向传播?梯度消失问题?

【重温系列】RNN循环神经网络及其梯度消失 手把手公式推导+大白话讲解

RNN时序算法案例 Keras rnn时间序列_公式推导_03


在简单RNN的前向传播过程中,输入的数据循环地与隐藏层里的权重W(都是很小的数)做乘法运算,那么损失函数对较长时间步前的W的梯度就会很小(因为W会累乘),即简单RNN越早的时间步梯度消失的问题越严重。

二、 LSTM算法

2.1、什么是LSTM?

LSTM(Long short-term memory,长短期记忆),是RNN的一种,比RNN高级,现在用RNN基本上都是用LSTM,很少人会使用上节的原版RNN。

2.2、LSTM原理

LSTM是RNN的升级版,更高级。LSTM也可以有效处理序列信息,也可以将每个时刻的隐藏层的值村下来,到下个时刻拿出来用,保证每个时刻都含有上一时刻的信息。不同的是,RNN是把所以信息保存下来,而LSTM是有选择性的保存,它有门控装置,他会有选择性的存储信息。

打个比方:普通RNN就像一个乞丐,路边捡的,别人丢的,什么东西他都想要,什么东西他都不嫌弃,LSTM就像一个贵族,没有身份的东西他不要,他会精心挑选符合自己身份的物品。

直观理解:

RNN时序算法案例 Keras rnn时间序列_rnn_04


RNN时序算法案例 Keras rnn时间序列_RNN时序算法案例 Keras_05是当前阶段我们将要考高数;

RNN时序算法案例 Keras rnn时间序列_lstm_06是上一阶段段考完现代后脑海中所有的知识点(现代和其他知识);

RNN时序算法案例 Keras rnn时间序列_lstm_07是上一阶段考完现代后的成绩;

RNN时序算法案例 Keras rnn时间序列_公式推导_08是这一阶段考完高数后脑海中的所有知识点(高数、现代及其他知识)

RNN时序算法案例 Keras rnn时间序列_公式推导_09是考完高数的成绩;

前提:我们的脑容量有限,脑海中的知识点总会慢慢遗忘;

目标:希望每个阶段学的每门课最后的分数都可能的高(即RNN时序算法案例 Keras rnn时间序列_RNN时序算法案例 Keras_10尽可能高)

RNN时序算法案例 Keras rnn时间序列_公式推导_11:遗忘门,遗忘掉上一阶段学习后脑中的部分知识RNN时序算法案例 Keras rnn时间序列_lstm_06,sigmoid函数后输出0~1,再和RNN时序算法案例 Keras rnn时间序列_lstm_06对应元素相乘,把RNN时序算法案例 Keras rnn时间序列_lstm_06中部分记忆遗忘;
RNN时序算法案例 Keras rnn时间序列_RNN时序算法案例 Keras_15:当前阶段新学到的知识
RNN时序算法案例 Keras rnn时间序列_深度学习_16:更新门,把新学到的知识中无用的知识过滤掉,再结合上一阶段的知识RNN时序算法案例 Keras rnn时间序列_lstm_06,生成这一阶段的学习后脑海中所有的知识RNN时序算法案例 Keras rnn时间序列_公式推导_08
RNN时序算法案例 Keras rnn时间序列_深度学习_19:输出门,带着这阶段脑学习后脑海中的所有知识去考试,可能有些知识是无用的,对其进行过滤,再去考试得到当前阶段的成绩RNN时序算法案例 Keras rnn时间序列_公式推导_09

总结一下:首先进入当前时刻,先用遗忘门将上一阶段所有的无用记忆清除掉,再学习当前新输入的知识RNN时序算法案例 Keras rnn时间序列_RNN时序算法案例 Keras_05得到当前阶段学到的记忆RNN时序算法案例 Keras rnn时间序列_RNN时序算法案例 Keras_15,再通过更新门,删除掉当前阶段学习到的无用知识。再将当前阶段学到的有用记忆和前一阶段脑海中的所有有用知识结合,得到当前阶段脑海中的所有有用记忆。用当前的记忆进行考试,使用输出门对当前记忆进行筛选(考当前这门课并不需要当前所有记忆),再去考试得到当前阶段这门课的成绩RNN时序算法案例 Keras rnn时间序列_公式推导_09

2.3、LSTM如何解决梯度消失问题?

这部分公式推导也太难了~~

2.4、双向LSTM

我的手机坏了,我想要____新手机。

比如现在要预测___中的字符,如果只是单项的LSTM,那我只能得到_前面所有字符的信息,所以我是想要买手机呢还是租借手机呢?

但是如果是双向LSTM,不仅可以得到前面所有字符的信息,还能得到后面所有字符的信息,看到新手机,那就知道这里用过是买新手机。