将讲解循环神经网络RNN之前,我先抛出几个疑问:为什么发明循环神经网络?它的出现背景是怎样的?这些问题可以帮助我们更好的去理解RNN。下面我来逐一解答。
一、循环神经网络诞生的背景
循环神经网络(RNN)的诞生主要是为了解决传统神经网络在处理序列数据时的局限性,尤其是它们无法有效捕获和利用时间序列或序列数据中的顺序依赖信息。
(1)传统神经网络的局限性
① 独立性假设
前馈神经网络假设输入数据之间相互独立,这与实际情况下许多数据集的自然属性相悖。在自然语言和视频流等应用中,每个元素都与时间上下文紧密相关,网络需要捕捉到这些信息才能进行有效的特征提取和模式识别
② 信息传递的单向性
前馈网络的信息传递是单向的,从输入层流向输出层,中间无环路。这使得信息只能按照一个方向流动,限制了信息反馈和动态更新,不利于处理序列数据中常见的长距离依赖问题。
③ 缺乏记忆能力
前馈网络缺乏“记忆”能力,无法存储先前的输入信息,无法共享在不同时间学习到的特征,这对于时序数据的处理是一个重大缺陷。例如,当预测一句话中的下一个单词时,网络需要“记住”前面的语境。
(2)序列数据的需求增加
随着自然语言处理、语音识别、音乐生成、视频分析等领域的发展,对能够理解和生成序列数据的模型需求日益增长。这些领域的任务往往需要模型能够理解和生成基于时间或位置依赖的输出。
① 自然语言处理
语言是由词汇按特定顺序组成的,词序影响语义解析。自然语言处理任务,如机器翻译和情感分析,需要模型理解文本中词与词之间的时间先后关系。
② 语音识别与音乐生成
语音信号具有明显的时间序列特性,识别或生成语音需要模型具备处理时序信息的能力。音乐生成亦是如此,音符的顺序直接影响旋律的流畅度和和谐度。
③ 视频分析
视频数据可以看作是一系列连续的图像帧,各帧之间存在强时间关联。视频分析任务,如动作识别,需要网络能够处理这种时间序列信息。
二、循环神经网络的基本结构
那么循环神经网络是如何通过结构设计来解决上述传统前馈神经网络遇到的问题呢?下面让我们看看单层RNN的结构设计
(1)单层RNN的结构设计
① 结构设计
与前馈神经网络不同,RNN中的每个时间步的神经元不仅接受当前时间步的输入数据,还接受上一时间步的隐藏状态信息。这个隐藏状态可以视为网络对序列到目前为止所见信息的一种“记忆”。每次迭代都基于前一时间步的输出和当前的输入。
有时候也把RNN的网络结构折叠起来表示:
② 符号解释
上图中前一个时间步得到的激活值会传递给下一个时间步。在RNN中想要预测不仅用到了还用到了之前的。但如图所示RNN在预测没有用到其之后的这是它的局限性(可以通过双向循环神经网络解决,之后写文章介绍)。
通常初始化激活值设置成零向量。其他激活值和预测值的公式如上所示。
(2)不同类型的循环神经网络
循环神经网络(RNN)因其灵活性能够适应不同类型的任务,具体可以分为以下几种常见的模式。
① 一对多
音乐生成是一个典型的一对多场景。这类任务中,网络通常从一个初始输入(如一个起始音符或音乐风格的编码)开始,然后生成一个序列输出(即后续的音符序列),形成完整的音乐作品。RNN在此过程中能够捕捉到序列内部的依赖关系,生成连贯的音乐流。
② 多对一
情感分析是多对一任务的代表。在这样的任务里,网络接收一个序列输入(如一句话或一段文本),并通过整个序列的处理,最终产生单个输出值(例如,这段文本的情感分类标签,如正面、负面或中立)。网络学习在整个输入序列中提取特征,用于做出整体判断。
③ 多对多()
命名实体识别(NER)是多对多任务的实例。在命名实体识别中,输入是一个文本序列,输出是对文本中每个单词或标记的分类(如人名、地点、组织等)。
④ 多对多()
机器翻译是多对多任务的实例。在机器翻译任务中,输入是一个语言的句子序列,输出是另一个语言的等价翻译序列,两个序列通常长度不一,要求模型既能理解输入序列的结构和语义,又能生成相应长度和语义的输出序列。