想象一下,我们平时读一句话,理解每个词的意思都离不开它前面的词。传统神经网络像个健忘的人,每次只看当前这个词,不管上下文。而RNN的设计思路就是让网络能记住前面发生了什么,把上一步的信息带到下一步来处理,这样就能理解序列前后的关系了。
这个特性让它天生就适合处理像语言、语音这类有时序关系的数据。不过,最初的RNN这个“记忆”不太持久,句子一长,开头的内容就容易忘。后来大家发明的LSTM、GRU这些改进模型,就相当于给它升级成了“大容量记忆硬盘”,能更有效地记住重要的长期信息,这才让处理长文本、复杂对话成为了可能。
循环神经网络能够利用前一步的隐藏状态(Hidden State)来影响当前步骤的输出,从而捕捉序列中的时序依赖关系。
我们在学习中的词向量,其实就是把文字变成数字给计算机看。而RNN这样的模型,就是利用这些数字化的词,去学习语言中的节奏、逻辑和含义。它们俩通常是搭档工作的:词向量负责表达词义,RNN负责理解词与词之间的顺序和关系。
循环神经网络(Recurrent Neural Network,RNN) 是一种专门处理序列数据(如文本、语音、时间序列)的神经网络。与传统的前馈神经网络不同,RNN 具有"记忆"能力,能够保存之前步骤的信息。
RNN 的基本设计思路是在隐藏层里引入一个循环连接,这让它能够以时间步为单位逐步消化整个序列。具体来说,在处理每一个 token 时,网络会把当前 token 的向量表示和上一个时间步计算得到的隐藏状态一起作为输入,通过计算后更新当前的隐藏状态,并把这个新状态传递给下一个时间步使用。这种链式处理机制使得 RNN 天生就适合处理序列数据。

其中隐藏层的计算公式为 ht=tanhxtWx+ht−1Wh+b
xt * Wx:当前时间步的输入xt与输入权重矩阵Wx相乘,将输入信息映射到隐藏空间。
ht-1 * Wh:上一时间步的隐藏状态ht-1与循环权重矩阵Wh相乘,保留历史信息。
b:偏置项,为网络提供额外的灵活性。
tanh:双曲正切激活函数,将加权和压缩到[-1, 1]范围内,确保梯度在一定范围内稳定
为了让模型能够理解更复杂的语言现象,一种常见的做法是把多个RNN层像搭积木一样堆叠起来。这种多层RNN结构的基本想法是,让不同层次的网络各司其职:底层的RNN靠近输入数据,更适合捕捉像词组、短语这类局部的、具体的语言模式;而高层的RNN则在底层抽象的基础上,进一步整合信息,从而学习到更全局、更抽象的语义特征,比如整个句子的主题或语境。
具体的数据流动是这样的:最底层的RNN处理原始的输入序列,它每个时间步的输出会作为下一层RNN在对应时间步的输入,这样数据逐层向上传递。最终,最顶层的RNN所产生的输出序列,会作为整个模型的成果,被用于下游的任务,比如分类或翻译。

基础RNN确实像是一个只能从左到右阅读文本的人,每个词的理解都完全依赖于之前读到的内容。但在很多实际场景中,比如理解一个词的含义或者判断它的词性,我们往往需要同时看它前面和后面的词。
双向RNN的巧妙之处就在于它同时部署了两个“阅读器”:一个像我们平时一样从头读到尾(正向RNN),另一个则从尾到头反向阅读(反向RNN)。这样,对于序列中的每一个词,模型都能获得两个视角的上下文信息——一个来自它的“过去”,一个来自它的“未来”。

最后,通过将这两个方向的隐藏状态组合起来(比如简单的拼接或者相加),模型就得到了一个真正融合了完整上下文的表示,这对于需要精确理解每个词位置信息的任务(如序列标注)来说,效果自然会好很多。
多层RNN 可以理解为让网络进行“分层理解”。底层RNN处理基础的、局部的序列模式(比如词组搭配),其输出作为高一层的输入;高层RNN则在此基础上学习更抽象的、全局的语义信息(如句子主旨或语境)。这种层次结构使得模型能够从数据中捕获不同粒度的特征。
双向RNN 的核心思想是让模型在每一个时间点都能同时“看到”过去和未来的信息。它通过部署两个独立的RNN层来实现:一个按时间正序(从开始到结束)处理序列,另一个则按时间逆序(从结束到开始)处理序列。最后,将这两个方向在每个时间步的隐藏状态(例如通过拼接或相加)组合起来,形成一个包含完整上下文信息的表示。
当将多层结构与双向性结合时(即构建深层双向RNN),模型的能力会得到显著增强。这种架构既具备了深层次的特征抽象能力,又拥有了全面的上下文感知能力,特别适合于那些对上下文依赖要求极高的任务
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。
原创声明:本文系作者授权腾讯云开发者社区发表,未经许可,不得转载。
如有侵权,请联系 cloudcommunity@tencent.com 删除。