详解:递归神经网络和LSTM网络那些事儿
递归神经网络是最先进的顺序数据算法之一,在苹果Siri和Google语音搜索中都使用到的算法。这是因为它是第一个记忆它的输入的算法,由于内部存储器,这使得它非常适合涉及顺序数据的机器学习问题。它是过去几年Deep Learning的惊人成就背后的算法之一。在这篇文章中,你将学习递归神经网络如何工作的基本概念,最大的问题是什么以及如何解决它们。
介绍
递归神经网络(RNN)是一种功能强大的神经网络类型,属于目前最有前途的算法,因为它们是唯一具有内部存储器的算法。
与许多其他深度学习算法一样,RNN也相对较旧。它们最初是在20世纪80年代创建的,但是由于可用计算能力的增加,现在我们拥有的大量数据以及20世纪90年代的LSTM的发明,这些数据的真正潜力逐渐发挥出来。
由于内部记忆,RNN能够记住他们收到的输入的重要信息,这使得他们能够非常精确地预测接下来会发生什么。
这就是为什么它们是像时间序列、语音、文本、财务数据、音频、视频、天气等时序数据的首选算法,因为它们可以形成对序列及其上下文的深入理解的算法。
递归神经网络在连续数据中产生预测结果,而其他算法则不能。
但是,你何时需要使用循环神经网络?
“每当有数据序列时,连接数据的时间动态都比每个帧的空间内容更重要。”
- Lex弗里德曼(麻省理工学院)
由于它们正在苹果和谷歌翻译的Siri软件中使用,神经网络正在各地出现。
他们如何工作?
我们将首先讨论一些关于“正常”前馈神经网络的重要事实,你需要知道,以正确理解递归神经网络。
但是了解什么是顺序数据也很重要。它基本上只是有序的数据,其中相关的东西彼此相关。最流行的连续数据类型可能是时间序列数据,它只是按时间顺序列出的一系列数据点。
前馈神经网络
RNN和前馈神经网络都是以它们传递信息的方式命名的。
在前馈神经网络中,信息只从一个方向移动,从输入层,通过隐藏层到输出层。信息直接通过网络。因为这个原因,信息从来不会触及一个节点两次。
前馈神经网络,对他们以前收到的输入是没有记忆的,因此不大好预测接下来会发生什么。由于前馈网络只考虑当前的输入,因此没有时间顺序的概念,除了训练,他们根本不记得过去发生的事情。
递归神经网络
在RNN中,信息只在一个方向上移动。当它作出决定时,会考虑当前的输入以及它从之前收到的输入中学到的内容。
下面的两张图片说明了RNN和前馈神经网络之间的信息流的差异。
通常RNN是具有短期记忆的,结合LSTM,他们也有长期记忆,这一点,我们将在下面进一步讨论。
说明RNN记忆概念的另一个好方法是用一个例子来解释它:
假设你有一个正常的前馈神经网络,并给它一个单词“neuron(神经元)”作为输入,并逐字处理这个单词。当它到达字符“r”时,它已经忘记了“n”,“e”和“u”,这使得这种类型的神经网络几乎不可能预测接下来会出现什么字符。
而经常性的神经网络则能够准确记住,因为它是内部记忆。它产生输出,复制输出并将其循环回网络。
递归神经网络有两个输入,现在和最近的过去。这很重要,因为数据序列包含关于接下来会发生什么的重要信息,这就是为什么RNN可以做其他算法无法做的事情。
与所有其他深度学习算法一样,前馈神经网络将权重矩阵分配给其输入,然后生成输出。请注意,RNN将权重应用于当前以及之前的输入。此外,他们还通过梯度下降和反向传播时间调整权重,我们将在下面的部分讨论。
还要注意,尽管前馈神经网络将一个输入映射到一个输出,但RNN可以映射一对多,多对多(翻译)和多对一(分类语音)。
反向传播时间
要理解反向传播时间的概念,你必须首先理解前向传播和后向传播的概念。这里不会详细讨论这些细节,只是会有尽可能简单的一个概念定义,但是可以让你理解反向传播的整体概念。
在神经网络中,你基本上会进行前向传播以获取模型的输出,并检查此输出是正确还是错误,从而弄清楚错误的地方。
现在你做了向后传播,这只不过是通过你的神经网络向后退出来找到相对于权重的误差的偏导数,这使得你可以从权重中减去这个值。
这些衍生物然后被渐变下降使用,这是一种用于迭代最小化给定函数的算法。然后根据减少误差的大小来调整权重。这正是神经网络在训练过程中学习的方式。
通过反向传播,你基本上可以在训练时调整模型的权重。
下图以前馈神经网络为例,对前向传播和后向传播的概念进行了完美的阐述:
随时间反向传播(BPTT)基本上只是一个在展开的递归神经网络上进行反向传播的流行词汇。展开是一种可视化的概念工具,可帮助你了解网络内正在发生的事情。大多数情况下,当你在通用编程框架中实施循环神经网络时,他们会自动处理反向传播,但你需要了解它是如何工作的,这使你能够解决开发过程中出现的问题。
你可以将RNN视为一系列神经网络,并通过反向传播逐个训练。
下图展示了一个展开的RNN。在左侧,你可以看到等号后展开的RNN。请注意,等号后面没有循环,因为不同的时间步可视化,信息从一个时间步传递到下一个时间步。这个例子也说明了为什么RNN可以被看作是神经网络的一个序列。
如果随时间反向传播,则需要进行展开的概念化,因为给定时间步的误差取决于先前的时间步。
在BPTT中,错误从最后一步反向传播到第一步,同时展开所有时间步。这允许计算每个时间步的误差,允许更新权重。请注意,当拥有大量时间步时,BPTT可能在计算上很昂贵。
标准RNN的两个问题
RNN存在或不得不处理两大障碍。但要理解它们,你首先需要知道什么是渐变。
梯度是相对于其输入的偏导数。如果你不知道这意味着什么,只要想一想就可以了:如果你稍微改变一下输入,梯度就会测量一个函数输出的变化。
你也可以将梯度看作函数的斜率。坡度越高,坡度越陡,模型可以学习得越快。但如果斜率为零,模型停止学习。梯度简单地衡量所有权重的变化与错误的变化有关。
梯度爆炸
当算法赋予权重非常重要时,我们会谈到“梯度爆炸”,没有太多理由。但幸运的是,如果你截断或挤压渐变,则可以轻松解决此问题。
消失的梯度
当梯度的值太小并且模型停止学习或因此而过长时,我们会谈到“消失梯度”。这是20世纪90年代的一个主要问题,比梯度爆炸更难以解决。幸运的是,它是通过Sepp Hochreiter和Juergen Schmidhuber提出的LSTM概念解决的,我们现在将讨论这个问题。
长短期记忆网络
长期短期记忆网络(LSTM)是递归神经网络的延伸,其基本上扩展了它们的记忆。因此,它非常适合从中间有很长时间滞后的重要经历中学习。
LSTM的单元被用作一个RNN层的构建单元,该RNN层通常被称为LSTM网络。
LSTM使RNN能够长时间记住他们的输入。这是因为LSTM将他们的信息包含在内存中,这很像计算机的内存,因为LSTM可以从内存读取、写入和删除信息。
这个内存可以被看作一个门控单元,门控意味着单元决定是否存储或删除信息(例如它是否打开门),这取决于它赋予信息的重要性。重要性的分配发生在权重上,这也是算法学习到的。这仅仅意味着它随着时间的推移学习哪些信息是重要的,哪些不重要。
在RNN中,有三个门:输入、忘记和输出门。这些门决定是否让新的输入(输入门),删除信息,因为它不重要(忘记门)或让它在当前时间步(输出门)影响输出。你可以看到一个RNN的例子,下面有三个门:
LSTM中的门是模拟的,采用S形的形式,意思是它们的范围从0到1,它们是模拟的,这使得它们可以反向传播。
消失梯度的问题可以通过LSTM来解决,因为它可以保持梯度足够陡峭,因此训练相对较短,准确度较高。
总结
现在你已经对循环神经网络的工作原理有了正确的理解,这使你可以决定是否适用于给定的机器学习问题。
具体而言,你已经了解了前馈神经网络与RNN之间的区别,如何使用递归神经网络,反向传播和反向传播时间工作,RNN的主要问题是什么以及LSTM如何工作。