前馈神经网络和LSTM有什么区别?它们的架构有何不同?
前馈神经网络和 LSTM 有什么区别?
前馈神经网络如下所示:
输入 -> 隐藏层 1 -> 隐藏层 2 -> ... -> 隐藏层 k -> 输出。
每一层可能有不同数量的神经元,但这就是架构。
LSTM(长短期记忆单元)是神经网络中的一种特殊节点。它可以放入前馈神经网络中,通常是这样。当这种情况发生时,前馈神经网络被称为 LSTM(令人困惑!)。
那么 LSTM 是如何工作的呢?看看我的答案:Forget Layer in a Recurrent Neural Network (RNN) -
tl;dr:一个 LSTM 单元具有三个门,每个门都用于以某种方式调制其输入:一个输入门、一个遗忘门和一个输出门。它有一个“记忆”和一个被门修改的输出。也就是说,在单个 LSTM 单元中:
(输入和先前的单元状态)->(输入和忘记门)->(更新单元状态)
(输入和先前的细胞状态和更新的细胞状态)->(输出门)
您可以将这些电池堆叠成许多不同的配置。因此,没有单一的“LSTM 网络”——而是可以从这些基本节点构建的一组许多可能的架构。
希望这能让你开始!
正如 Philipp 所提到的,具有反馈回路的网络有助于对数据中的时间进行建模。
您可能想查看各种 NN 架构的概述: https ://i.stack.imgur.com/LgmYv.png
前馈网络是每个节点仅与下一层节点连接的网络。他们没有“圈子”联系。数据只能在没有循环的情况下从输入传输到输出。示例是简单层感知器或多层感知器。卷积神经网络也是纯粹的前馈网络
与之相反的是循环神经网络。LSTM 就是其中之一。这些 RNN 也可以“横向”连接。这意味着您的数据不仅可以向前传输到下一层,还可以传输到同一层中的其他节点或向后传输。从架构的角度来看,这意味着尽管您的网络可能只有一个隐藏层,但您可以通过向该层中的节点添加循环来获得“深度”。通常这些代表数据中的“时间”。
这张图片通过反馈循环显示了我所说的“深度”:https ://en.wikipedia.org/wiki/Recurrent_neural_network#/media/File:Recurrent_neural_network_unfold.svg
尽管从技术上讲它是您的层架构中的一个节点,但您添加的循环越多,它就越深
我想讨论 LSTM 网络背后的一些高级直觉。以下是一些有助于探索原因方面的问题:
- 为什么/何时我们会在前馈神经网络 (FFNN) 上使用 LSTM?
- LSTM 的优缺点是什么,它们与 FFNN 相比如何?
- 它们与传统的递归神经网络 (RNN) 有何不同?
前馈神经网络 (FFNN)
您可能知道,这个 FFNN 接受三个输入,使用隐藏层处理它们,并产生两个输出。我们可以扩展这个架构以包含更多的隐藏层,但基本概念仍然成立:输入进来,它们在一个方向上处理,最后输出。
这个概念在其他文章中已经很好地解释了,所以我不再赘述。关键要点是:
将 FFNN 与循环架构分开的主要条件是神经元的输入必须来自该神经元之前的层。
递归神经网络 (RNN)
循环神经网络在数学上与 FFNN 模型非常相似。它们的主要区别在于不再应用对 FFNN 的限制:
神经元的输入可以来自任何其他层。
你会经常看到这种架构经常被“滚动”成一个循环单元,如下所示:
因此,您可能在架构图中看到的“滚动”单元可能看起来很小。当您展开它们时,网络通常会很深!
长短期记忆(LSTM)
LSTM 是一种特殊类型的 RNN,旨在解决梯度消失/爆炸问题。
当你训练一个传统的 RNN 时,网络经常会遇到梯度消失/爆炸的问题:展开一个循环单元会导致一个非常深的网络!如果你通过使用传统 RNN 架构的反向传播算法,随着我们通过网络传播,早期的层将变得越来越不重要。这使得传统的 RNN 容易忘记信息,尤其是在当前时间之前出现很多时间步长的数据。
一个示例 LSTM 单元如下所示:
这种结构类似于传统的 RNN 展开单元,但与 LSTM 的关键区别在于门:输入门、输出门和遗忘门。这些门的功能很好地描述了它们的名字:
- 输入门控制进入单元格的数据
- 遗忘门控制数据在单元格内的保留程度
- 输出门通过激活函数控制单元的输出
这篇 github IO 帖子很好地介绍了 LSTM 的基础知识。它还出色地解释了 LSTM 数学背后的直觉。
RNN 的属性和示例用例
反馈循环使循环神经网络更好地应对时间挑战。时间被纳入他们的架构!
让我们探索一个例子:
也许您正在使用网络来预测句子中的下一个单词。假设你得到了输入:
饿了,爱丽丝开车到最近的商店购买[预测]
循环神经网络可能会忘记第一个词“饥饿”,而 LSTM 会理想地传播它。因此,LSTM 将使用它之前在句子中听到的上下文来猜测“食物”,而 RNN 可能会猜测在商店购买的任何东西,特别是在给出长句子或多个句子的情况下。
@StatsSorceress 在这里很好地解释了允许这种类型内存的门控机制:Forget Layer in a Recurrent Neural Network (RNN) -
RNN 旨在处理序列。这可用于分析视频(图像序列)、写作/语音(单词序列)等。
LSTM 旨在让重要信息随着时间的推移而持续存在。随着时间的推移,RNN 通常会“忘记”。
FFNN 是无记忆系统;在处理了一些输入之后,他们忘记了关于该输入的所有内容。例如,我们训练一个 FFNN,它以 5 个单词作为输入并预测下一个输出。然后,该模型将接收来自上述示例的输入:
最近的商店购买[预测]。
这显然失去了背景,我们会得到一个糟糕的结果。
现在,您可能会问,如果我们制作一个接受许多输入的 FFNN,以便在其输入中包含“饥饿”一词,会怎样?换句话说,我们不能增加 FFNN 的输入数量以充分表示先前的数据吗?
答案是肯定的,但这种方法既低效又常常不切实际。比如说,我们需要记住整个段落的上下文。我们需要一个非常大的 FFNN!此外,我们如何知道我们想要返回多少个单词作为上下文?20个就够了吗?30?100?LSTM 架构通过让网络管理瞬态内存来完全消除这些问题。视频处理挑战加剧了这个问题,因为每一帧都需要比 NLP 任务更多的输入。
但是请注意,LSTM 单元本质上比 FFNN 的单元在计算上更复杂,因此训练它们通常更困难并且需要更多时间。尽管存在这些缺点,但它们在时间数据挑战中的成功显然证明了它们在 FFNN 上的使用。



