趋近智
“正如本章引言中所述,许多问题都涉及序列数据,其中元素的顺序对理解信息起着决定性的作用。试想理解一个句子、预测某人将要输入的下一个词、分析随时间变化的股市走势,或者判读机器的传感器读数。标准的前馈神经网络 (neural network),例如我们见过的全连接网络或卷积神经网络 (CNN),都是独立处理输入的。它们在处理当前输入时,不会固有地保留过去输入的信息,这对于序列任务是一个显著的限制。”
在处理像文本、语音或时间序列这样的顺序数据时,标准神经网络的一个主要限制是它们无法保持对先前输入的信息。循环神经网络(RNN)正是为了解决这一限制而设计的。RNN的主要思想是循环:网络对序列中的每个元素执行相同的操作,但每个元素的输出不仅取决于当前输入,还取决于先前元素的结果。这是通过在网络结构中引入一个“循环”来实现的。
想象一下逐词处理一个句子。为了把握“猫追老鼠,然后它跑了”这句话中“它”的含义,你需要记住“它”指的是猫还是老鼠。RNN通过一个内部的隐藏状态(通常表示为)来完成这种上下文 (context)保留。
在序列中的每一步(例如,处理第个词或第个时间点),RNN接收两个输入:
然后它计算新的隐藏状态,并可选地计算一个输出。重点在于,的计算使用了。这形成了一个依赖链,其中来自早期步骤的信息可以通过隐藏状态在序列中传递。这使得网络能够拥有某种“记忆”,保留来自过去元素的上下文信息。
时间步时隐藏状态的更新规则可以表示为:
时间步的输出(如果每一步都需要)可以表示为:
此处:
tanh或relu,对于根据任务可以是softmax或sigmoid)。在所有时间步中,使用相同的权重集(、、)和偏置(、)。这种参数 (parameter)共享使得RNN高效,并能够泛化序列中不同位置的模式。
为了更好地观察信息的流动,通常会将RNN循环按序列长度“展开”。想象序列有个时间步。展开意味着创建网络的个副本,每个时间步一个,并将一个时间步的隐藏状态输出连接到下一个时间步的隐藏状态输入。
一个随时间展开的RNN。每个
RNN 单元块表示在不同时间步应用相同的一组权重 (weight)。隐藏状态h将信息从一步传递到下一步。输入x和输出y在每一步发生。
这种展开视图使得梯度在反向传播 (backpropagation)(通过时间的反向传播,即BPTT)过程中如何流动更加清晰,以及为什么捕捉长程依赖有时会比较困难,这会导致像梯度消失问题,我们将在后面讨论。
RNN在处理不同的序列输入/输出关系方面很灵活:
核心RNN思想是这些不同模式的依据。在Keras中,SimpleRNN、LSTM和GRU等层实现了这种循环行为。我们将在下一节中说明如何使用这些层,从基本的SimpleRNN开始。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•