文章目录
  1. 1. RNN
    1. 1.1. 简介
    2. 1.2. 长依赖
  2. 2. LSTM
    1. 2.1. 简介
    2. 2.2. 结构
      1. 2.2.1. 细胞状态
      2. 2.2.2. 忘记门
      3. 2.2.3. 更新门
      4. 2.2.4. 细胞状态更新
      5. 2.2.5. 输出门

RNN

在生活中经常会看到通过前一段信息来预测后面会发生什么,这一类的问题,比如:说话时,听完前半句,预测后半句。遇到这一类问题时,在神经网络中循环神经网络(RNN)就是来处理这一类问题的。而这种按时间排列的数据,我们称为时间序列数据。

简介

普通rnn的结构如下:
rnn结构
如图所示,普通的RNN在内部结构比较单一,就一个激活函数,但是是共享权重的。这样的单一的结构就带了一些问题,长依赖就是比较明显的一个问题。

长依赖

长依赖是指当前系统的状态,可能受很长时间之前系统状态的影响,是RNN中无法解决的一个问题。例如从“这块糖真?”可以很容易的预测出甜,但是如果遇到这种长句“小明吃了一口菜,被咸的直接把菜吐掉了,然后他跑进厨房喝水,喝完之后,说了句:这菜真?”从这句话中,机器是很难预测出下一个词的,因为出现了长依赖问题,预测结果需要依赖很长时间之前的信息。
为什么会出现长依赖问题,出现长依赖问题的根本原因就是,RNN在经过许多阶段传播后的梯度倾向于消失或者爆炸,所以无法根据很久之前的信息来推断出当前的输出。解决长期依赖问题有很多方法的,其中长短时记忆网络(LSTM)是比较常用的一个

LSTM

简介

LSTM 是循环神经网络RNN的变形,相对与传统的RNN,LSTM解决了传统RNN长依赖、梯度消失和爆炸的问题。

结构

lstm结构图
这儿的$C_{t}$表示的memory,$h_{t}$表示output,$X_{t}$ 表示在t时刻的输入。

细胞状态

LSTM的关键:“细胞状态”。细胞状态类似于传送带。直接在整个链上运行,只有少量的线性交互(只有一个乘操作和拼接操作),信息在上面流传保持不变会容易些。如图

忘记门

lstm忘记门

这一块的作用主要是决定从$C_{t-1}$中丢弃什么信息,这一块称为“忘记门”。回到图中,我们可以看到t-1时刻的输出$h_{t-1}$和t时刻的输入$x_{t}$做一个拼接,经过$W_{f}$和$b_{f}$后,用sigmod处理,使值处于0-1之间,再和$C_{t-1}$做计算就能让$C_{t-1}$遗忘部分信息。

更新门

lstm更新门
这一步决定了什么信息将会放到“细胞状态”中,从图中可以看到这儿有一个simgod层和tanh层。sigmod层决定什么值需要更新,tanh层创建一个新的候选值向量$\widetilde{C_{t}}$,$\widetilde{C_{t}}$代表全部的新信息。

细胞状态更新


这一步就是更新细胞状态,从图我们可看到经过忘记门的$f_{t}$和$C_{t-1}$相乘,丢弃我们不想要的信息,然后加上$i_{t}*\widetilde{C_{t}}$(新的候选值),根据我们决定更新每个状态的程度进行变化。

输出门

lstm输出门
在这一步中,会基于“细胞状态”得到输出。从图中可以看到,首先是一个sigmod层确定细胞状态的哪个信息将会输出。然后将$\widetilde{C_{t}}$用tanh处理的到一个在-1-1之间的值,再将它和sigmod层的输出相乘,输出我们确定输出的那部分。
注意:在这些公式中的W和b都带有不同的下标,表示不同的权重值。

文章目录
  1. 1. RNN
    1. 1.1. 简介
    2. 1.2. 长依赖
  2. 2. LSTM
    1. 2.1. 简介
    2. 2.2. 结构
      1. 2.2.1. 细胞状态
      2. 2.2.2. 忘记门
      3. 2.2.3. 更新门
      4. 2.2.4. 细胞状态更新
      5. 2.2.5. 输出门