前言:
大部分模型都只能处理单独的输入,然而,当某些任务需要提取各个输入之间的时序信息时,只对每个输入进行单独的处理是不够的,需要处理的是将各个输入连成的整个序列,基于此RNN诞生了!
循环神经网络(Recurrent Neural Network,RNN)是一类以序列数据为输入,在序列的演进方向进行递归(RNN 之所以被称为递归,是因为它们对序列的每个元素执行相同的任务,输出依赖于先前的计算)且所有节点(循环单元)按链式连接的递归神经网络。
RNN结构:
RNN与传统NN模型最大的区别在于:隐藏层的输入不仅包括输入层的输出,还包括上一时刻隐藏层的输出。
f1,f2为激活函数。
RNN的沿时间反向传播”(Back-Propagation Through Time,BPTT):
由前向传播得到预测值与真实值构建损失函数,记为L,使用梯度下降最小化损失函数(以U为例):
从上述过程中我们不难发现:对权重矩阵求偏导时会出现激活函数的导数的累乘,因此当t较长时会出现“梯度爆炸”或者“梯度消失”的现象。
LSTM:
传统的RNN结构能够在序列数据上学习短时依赖关系,但是由于“梯度消失”和“梯度爆炸”问题,RNN在处理长序列时难以达到很好的性能。为了克服这种缺陷,LSTM应运而生!
LSTM通过引入记忆细胞、输入门、输出门和遗忘门的概念,能够有效地解决长序列问题。
- 记忆细胞(memory cell): 它是 LSTM 的核心,负责保存重要的信息,并将这些信息传递给后面的网络层。
- 遗忘门(forget gate): 决定了记忆细胞中的信息是否被遗忘,能够控制记忆细胞中保存的信息会不会消失。
- 输入门(input gate):决定了当前输入信息是否写入记忆细胞,能够控制输入信息对记忆细胞的影响。
- 输出门(output gate):决定了记忆细胞中的信息是否输出,能够控制记忆细胞中保存的信息会不会对后面的网络层造成影响。
与RNN相比,LSTM增加了一条时间链(c,细胞状态),同时增加了两条链之间的关联,以t时刻为例,计算隐藏层状态时,不仅需要输入
和前一时刻
还要包含当前的细胞状态
。
“门”的结构:门是一种让信息选择式通过的方法。他们包含一个 sigmoid 神经网络层和一个按位的乘法操作。Sigmoid 层输出0到1 之间的数值,描述每个每个部分有多少量可以通过。0 代表“不许任何量通过”,1 指“允许全部量通过”!(图中的每个 都表示sigmoid函数)
LSTM中信息流动
第一步:通过遗忘门决定从细胞状态中丢弃什么信息,该门会读取 和
,输出一个在 0 到 1 之间的数值给每个在细胞状态
中的数字。1 表示“完全保留”,0 表示“完全舍弃”。
第二步:确定什么样的新信息被存放在细胞状态中。包含两个部分。第一,sigmoid 层称 “输入门层” 决定什么值我们将要更新。然后,一个 tanh 层创建一个新的候选值向量,会被加入到状态中。
第三步:更新旧细胞状态,更新为
。把旧状态与
相乘,丢弃掉我们确定需要丢弃的信息,接着加上
。这就是新的候选值,根据我们决定更新每个状态的程度进行变化。
第四步:确定输出值。首先,运行一个 sigmoid 层来确定细胞状态的哪个部分将输出出去。接着,把细胞状态通过 tanh 进行处理(得到一个在-1到1之间的值)并将它和 sigmoid 门的输出相乘,最终仅仅会输出我们确定要输出的那部分。
参考文献:
- 循环神经网络 - 知乎 (zhihu.com)循环神经网络 - 知乎
- RNN的梯度消失_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1e5411K7oW?p=3&spm_id_from=pageDriver&vd_source=da6dc6044cb00c195c05c3e837cbc77d
- 递归神经网络教程,第 1 部分 – RNN 简介 ·Denny的博客 (dennybritz.com)https://dennybritz.com/posts/wildml/recurrent-neural-networks-tutorial-part-1/
- 【LSTM长短期记忆网络】3D模型一目了然,带你领略算法背后的逻辑_哔哩哔哩_bilibilihttps://www.bilibili.com/video/BV1Z34y1k7mc/?spm_id_from=333.337.search-card.all.click&vd_source=da6dc6044cb00c195c05c3e837cbc77d
- 理解 LSTM 网络 - 简书 (jianshu.com)https://www.jianshu.com/p/9dc9f41f0b29