RNN(Recurrent Neural Network,循环神经网络)是一种特殊的神经网络结构,它主要用于处理和预测序列数据中的元素。与传统的神经网络(如全连接神经网络或卷积神经网络CNN)不同,RNN能够在处理每个元素时保留之前元素的信息,这使得它们非常适合于时间序列分析、自然语言处理(NLP)等任务。
1.RNN原理
循环结构:循环神经网络最主要的特征是它的循环结构,它使得信息可以在不同的时间阶段进行传输。在每一时刻,循环神经网络将前一时刻的数据和前一时刻的隐含状态信息结合起来产生新的隐态。该隐含状态同时考虑了当前和过去两个阶段的信息,所以递归神经网络可以很好地反映出序列数据的前后关系。共享权重:在RNN中,每个时间步的单元(如LSTM单元或GRU单元)都使用相同的权重来处理输入数据。这意味着,不论序列的长度如何,RNN在处理整个序列时都使用相同的参数集合。这种参数共享机制减少了模型的参数数量,降低了模型的复杂度,并提高了模型的训练效率。
隐藏状态:在RNN中,隐藏状态可以被看作是网络的一种内部记忆或内部状态,它保存了先前输入的信息,以便在处理后续输入时可以使用这些信息。具体来说,隐藏状态是RNN在处理每个时间步的输入时所计算出的内部状态。RNN的隐藏状态更新是通过结合当前时间步的输入和前一时间步的隐藏状态来实现的。具体来说,在每个时间步t,RNN接收当前的输入xt和前一时间步的隐藏状态ht-1作为输入,并通过一定的计算规则(如线性变换和激活函数)来更新当前时间步的隐藏状态ht。隐藏状态的计算通常使用以下公式:
旧隐藏状态(ht-1) -> RNN单元 -> 新隐藏状态(ht)
输入和输出:RNN的输入通常是一系列的数据点,这些数据点按照时间顺序排列,形成一个序列。在RNN中,每个时间步的输入都会被处理,并与之前的隐藏状态一起用于计算当前时间步的输出和更新后的隐藏状态。RNN的输出包括隐藏状态序列和最终输出序列两部分,其中隐藏状态序列是RNN对输入序列的内部表示或编码,而最终输出序列则用于完成具体的任务目标。
2.RNN结构
输入层(xt):RNN能够接受一个输入数据并将其传递到隐藏层。
隐藏层(ht):隐藏层之间存在循环连接,使得网络能够维护一个“记忆”状态,这一状态包含了过去的信息。这使得RNN能够理解序列中的上下文信息。
输出层(yt):RNN可以有一个或多个输出,例如在序列生成任务中,每个时间步都会有一个输出
RNN的结构有很多种:
其中,many to many是最经典的。
3.RNN的前向计算
RNN(Recurrent Neural Network,循环神经网络)的前向计算过程是其处理序列数据并产生输出的核心步骤。
RNN的前向计算可以用以下公式表示:
隐藏状态:ht = f(Wxh * xt + Whh * ht-1)
输出:yt = f(Wyh * ht)
其中,
xt是当前时间步的输入数据,
ht-1是前一个时间步的隐藏状态,
f通常是一个非线性激活函数,如tanh或ReLU,
Wxh、Whh、Wyh是模型参数(权重矩阵),它们是可学习的。