趋近智
词袋模型(Bag-of-Words)和TF-IDF等方法生成的文本表示会丢失词语固有的顺序。虽然这对于某些任务很适用,但许多自然语言处理问题非常依赖对序列的理解。例如,以情感分析(“这部电影不好看”)对比(“这部电影还不错,但没那么好”)为例,或考虑机器翻译,词序对意义非常重要。为处理这类序列信息,需要专门为有序数据设计的模型。这就引出了循环神经网络 (neural network)(RNN)。
循环神经网络的核心思想是循环(recurrence):对序列的每个元素执行相同的任务,其中每个元素的输出取决于前面元素的计算结果。这就像阅读句子;你对当前词语的理解受到你已经看到的词语的影响。RNN通过保持一个内部状态或记忆()来模拟这一点,该状态总结了序列中到目前为止已处理的信息。
与独立处理固定大小输入的标准前馈网络不同,RNN具有一个循环。这个循环使得信息能够从网络的一个步骤保留到下一个步骤。在每个时间步,RNN接受当前步骤的输入()和前一步骤的隐藏状态()来计算新的隐藏状态()。这个新状态随后作为处理序列中下一个元素的记忆。
一个RNN单元的图示,显示了输入、根据和前一个隐藏状态计算的隐藏状态,以及输出。该循环表示递归。
为更好地理解RNN如何处理序列,将其按时间“展开”或“铺开”可视化会很有帮助。想象为序列中的每个时间步复制一个网络副本。一个时间步的隐藏状态会传递到下一个时间步。重要的是,所有时间步都使用相同的参数 (parameter)集(权重 (weight)和偏置 (bias))。这种参数共享使得RNN高效,并能应用于不同长度的序列。
考虑处理一个长度为的序列:。展开后的网络会是这样的:
一个RNN按时间步展开的示意图。蓝色箭头显示了隐藏状态()从一个时间步到下一个时间步的传递。请注意,RNN单元块代表在每个步骤中应用相同的一组权重。是初始隐藏状态,通常设为零。
让我们对一个简单RNN单元内部的计算进行正式说明。在每个时间步:
计算新的隐藏状态(): 这通常使用当前输入()和前一个隐藏状态()来完成。会应用一个激活函数 (activation function)(通常是tanh或ReLU)。
其中:
计算输出(): 时间步的输出通常根据隐藏状态计算。具体的计算方法和激活函数取决于任务(例如,分类任务使用softmax)。
其中:
网络在训练期间学习权重矩阵()和偏置向量(),通常使用一种称为“时间反向传播 (backpropagation)”(Backpropagation Through Time, BPTT)的反向传播变体。
想象将句子“RNNs process sequences”输入到一个RNN中,可能一次输入一个词(或其嵌入 (embedding))。
最终隐藏状态(本例中为)或每个步骤的输出()可以用于各种任务。例如,可以输入到分类器中进行整句情感分析,或者输出可以表示每个步骤中下一个词的预测。
RNN为自然语言处理中序列数据建模提供了基本架构。它们保持状态的能力使其能够捕获序列中元素之间的依赖关系,克服了简单模型的一个主要局限。然而,正如我们将在下一节看到的,基本RNN在处理序列中长距离依赖时面临挑战。
这部分内容有帮助吗?
© 2026 ApX Machine LearningAI伦理与透明度•