在数据科学领域,处理序列数据一直是一个挑战。传统的神经网络在处理表格数据时表现出色,但在处理序列数据时却存在不足。这些问题包括预测手机键盘上的下一个单词或在股市数据中寻找模式。随着该领域的最新发现,人们观察到对于几乎所有这些序列问题,长短期记忆网络(LSTM)提供了最合适的解决方案。本文将深入探讨这一算法的细节,并回答关于LSTM的使用场景、实现方式以及为什么在已有RNN的情况下还需要LSTM等问题。
循环神经网络(RNN)是一种能够记忆或记住先前输入的算法。当给定大量序列数据时,RNN的主要目标是利用这些数据。序列数据的例子包括时间序列数据、文本序列或随时间变化的音频频率序列。在人工神经网络中,通常假设所有输入都是相互独立的,但对于许多任务来说,这并不是一个好主意。
RNN之所以被称为“循环”,是因为它们对序列中的每个元素执行相同的任务,并且输出依赖于先前的计算。例如,当阅读一个句子时,会逐字阅读并记住之前的上下文,然后更新理解。RNN正是这样做的,它们维护一个称为隐藏状态的“内部”状态,该状态编码了它迄今为止看到的所有内容。
以下面的文本字符串为例:“一个男孩走进咖啡馆说‘能要2个汉堡和1份薯条吗?服务员说‘当然可以{}’。”有很多选项可以填补这个空白,例如“小姐”,“夫人”等。然而,其他词汇也可能适用,比如“先生”,“先生”等。要得到合适的答案,神经网络需要记住上下文,比如读者是在谈论一个“男孩”还是一个“女孩”。
上面的展开网络图展示了如何将数据流输入到RNN中。在时间戳t=1时,第一个单词输入到网络中,这个输出然后被送入第二个时间戳。需要注意的是,不能直接将句子输入到网络中,需要先将它们转换成计算机语言,为此可以使用独热编码或词嵌入(例如Word2vec)。
如果读过之前的文章,就会知道RNN面临着梯度消失和梯度爆炸的问题,这使得它们无法处理长句子,这意味着它们在处理短期依赖时表现良好。RNN在处理诸如“冰淇淋通常是‘美味的’”这样的问题时表现良好,因为RNN不需要理解句子的上下文。然而,当有长句子时,就不能使用RNN,因为很久以前说过的话在当前做预测时无法被回忆起来。让通过一个例子来理解这一点。
假设正在制作一个语法检查器,在上述句子中,很明显应该使用“他的”而不是“她的”。怎么知道这一点?因为了解句子的上下文,知道这里正在谈论一个每周三去旅行的男人。同样,为了做出正确的预测,RNN需要记住所有这些上下文。这正是循环神经网络失败的地方。在之前关于RNN的文章中提到了这一点,不妨去看看。
假设在办公室,晚上有一个会议,然后突然想起来还要参加某人的婚礼。会怎么做?肯定会腾出一些空间,知道哪个会议可以取消,哪个不能。
事实证明,RNN并不这样做。为了添加一些新信息,它完全通过应用一些激活函数来转换现有信息,因此整个信息被修改了,即没有考虑“重要”信息和“不那么重要”的信息。
另一方面,LSTM基于门的概念工作。信息在这里通过一个称为细胞状态的机制流动。它有三个主要的门:遗忘门、输入门和输出门。这样它就可以有选择地记住和忘记事情。
在LSTM单元中,主要有两个状态被传递到每个单元;细胞状态和隐藏状态。记忆块负责记住事情,对这个记忆的操作是通过三个主要机制称为门来完成的。LSTM主要有三种类型的门:
将在下一篇文章中详细探讨这3个门以及它们背后的数学原理。让一步一步来。在这篇文章中,了解了为什么不能使用RNN,以及LSTM背后的基本直觉。