一、说明
循环神经网络非常有趣,因为与前馈网络不同,在前馈网络中,数据只能在一个方向上传播,每个神经元可以与连续层的一个或多个神经元连接,在这种类型的网络中,神经元还可以环回自身或连接到前一层的神经元。
循环网络允许神经元连接到先前层的神经元或同一层的神经元。这一特征使这些神经网络变得特殊,因为递归的概念带来了网络中的记忆概念。事实上,在 RNN 中,神经元的输出可以在时间上连续的阶段影响自身,或者可以影响前面层的神经元,进而影响原始神经元的行为,从而闭合循环。当然,实现 RNN 的方法不止一种。多年来,许多不同类型的 RNN 被提出和研究,其中最著名的是 LSTM(长短期记忆)和 GRU(门控循环单元),稍后将讨论。
二、什么时候应该使用 RNN?
我们举一个简单的例子来说明。如果我正在分析一张照片,我想在其中观察一些感兴趣的物体,我需要向神经网络提供随时间变化的静态信息,即照片的像素。使用前馈网络可以轻松处理这种情况。例如,训练有素的卷积神经网络 (CNN),其输入层将由与照片中的像素乘以 3(对于 RGB 图像)一样多的神经元组成。
但是如果我们处理的不是图像而是视频怎么办?如果我们仍然只想识别物体,那么什么都不会改变,但如果我们想识别和分类行为,事情就会完全不同。
识别行为需要对某个行为进行随时间的分析,只有收集到的整套信息才能告诉我们所观察到的行为类型。识别视频中的一个人是一回事,而识别这个人是否正在喝酒或向瓶子里吹气则是另一回事。
因此,我们的目标是了解如何处理随时间变化的动态信息,从而构建和指导具有记忆的网络 (RNN),以便它能够观察变化并识别不同的行为。该问题的解决方案是 RNN,其最简单的形式是 RNN 单元。
然而,在解释什么是 RNN 单元之前,必须绝对清楚它们是按时间运行的,因此,与提供静态数据的经典前馈网络不同,RNN 设计用来处理的数据类型是时态数据。序列或系列。让我们看几个例子。
时间序列或时间序列可以被认为是在许多时刻采样的函数。例如,它可以是采样声音的波形、股票市场中股票的行为或短语。
三、 RNN的工作流程
在由短语组成的序列的情况下,样本是经过适当编码的单个单词。在这种情况下,随着时间的推移,RNN 单元将接收单个单词作为输入,这些单词将被视为前一个单词或多个单词的函数,具体取决于所使用的 RNN 单元的类型。
在上图中,X_0 代表该短语的第一个单词。S_0 是细胞在 t=0 时的状态,S_1 是细胞在 t=1 时的状态,而 tanh(双曲正切)是激活函数。
简而言之,在 RNN 单元中,在每个时刻 t,单元不仅会接收输入 X(t),还会接收 S(t-1) 之前时刻的自身输出。输出的追溯性将使网络能够根据其过去的历史做出决策。在这种类型的方法中,确定要使用的最大迭代次数显然很重要。否则网络将陷入无限循环。
现在我们已经了解 RNN 可以用具有有限状态循环的单元来表示,让我们看看如何训练它。
此时,我们应该引入网络展开的概念,它基本上转化为将 RNN 转换为前馈类型网络的操作。看下图,其实很容易看出Recurrent Neural Net已经变成了前馈网络。
让我们尝试将上面阐述的概念形式化一点。RNN 单元是循环网络的一部分,它为每个瞬时保存一个内部状态 h(t)。它由固定数量的神经元组成,可以被视为网络的一种层。在我们的网络中,每一时刻的输出将是:
其中 h_t 取决于输入 X_t 和之前的状态 h_(t-1)。
继续展开网络意味着先确定要进行分析的时间步骤的数量。因此,一个 10 步展开的 RNN 相当于一个 10 层的前馈深度神经网络 (DNN)。
对于具有两个输入的神经元,输出函数类似于:
具有两个输入的 S 型神经元
在这里:
和:
其中 sigmoid 是激活函数,我们称之为 phi,b=0。
将相同的推理应用于 RNN,我们有:
其中 w_x 和 w_h 是权重,b 是偏差,phi 是激活函数。
最简单的细胞的学习能力和记住远距离步骤输入的能力都会受到限制。当需要跟踪遥远的事件时,这种限制可能会成为一个问题。例如,就短语而言,单词的上下文至关重要。事实上,在一个短语中,某些单词的出现并不是唯一的相关因素,而且单词之间的相互联系也很重要。因此,仅记住单词序列中紧邻的前一个单词是不够的。在这种情况下,我们需要更复杂的存储单元,例如 LSTM 和 GRU,我将在另一篇文章中讨论。
四、结论
总之,RNN 是一种非常有价值的资产,经常用于自然语言处理( NLP )问题。循环神经网络特殊的“记忆”特性使其具有惊人的创造力。
通过要求他们识别旋律序列中最可能的连续音符,可以创建完全由人工智能编写的真实、原创乐谱,就像Google 的Magenta 项目使用Tensorflow创建的乐谱一样。