<commit_before># 现代反复神经网络
:label:`chap_modern_rnn`

我们介绍了 RNN 的基础知识，它可以更好地处理序列数据。为了演示，我们在文本数据上实施了基于 RNN 的语言模型。但是，当从业人员现在面临着各种序列学习问题时，这些技术可能不足以使用他们。

例如，实践中一个值得注意的问题是 RNN 的数量不稳定性。尽管我们已经应用了梯度剪切等实现技巧，但通过更复杂的序列模型设计，这个问题可以进一步缓解。具体来说，门控 RNN 在实践中更常见。我们将首先引入两个这样广泛使用的网络，即 * 门控循环单元 * (GRU) 和 * 长短期内存 * (LSTM)。此外，我们将使用迄今为止讨论的单个无向隐藏层来扩展 RNN 架构。我们将描述具有多个隐藏层的深层架构，并讨论双向设计与前向和向后重复计算。现代经常性网络经常采用这种扩张。在解释这些 RNN 变体时，我们将继续考虑 :numref:`chap_rnn` 中引入的语言建模问题。

事实上，语言建模只能揭示序列学习能够实现的一小部分。在自动语音识别、文本转语音和机器翻译等各种序列学习问题中，输入和输出都是任意长度的序列。为了解释如何适应这种类型的数据，我们将以机器翻译为例，并介绍基于 rNN 和束搜索的编码器解码器架构，以便生成序列。

```toc
:maxdepth: 2
<commit_msg>fix errors in 9. Modern Recurrent Neural Networks (#775)<commit_after># 现代循环神经网络
:label:`chap_modern_rnn`

我们已经介绍了循环神经网络的基础知识，这种网络可以更好地处理序列数据。为了演示效果，我们在文本数据上实现了基于循环神经网络的语言模型。但是，这些技术对于从业人员面对当今各种序列学习问题时可能是不够用的。

例如，实践中一个显著问题是循环神经网络的数值不稳定性。尽管我们已经应用了梯度裁剪等实现技巧，但是通过设计更复杂的序列模型可以进一步缓解这个问题。具体来说，在实践中更常见的门控循环神经网络。首先，我们将引入两个广泛使用的网络，即 *门控循环单元* (gated recurrent units, GRU) 和 *长短期记忆网络* (long short-term memory, LSTM)。然后，我们将基于迄今为止讨论过的一个单向隐藏层来扩展循环神经网络架构。我们将描述具有多个隐藏层的深层架构，并讨论基于前向和后向循环计算的双向设计。现代循环网络经常采用这种扩展。在解释这些循环神经网络的变体时，我们将继续考虑 :numref:`chap_rnn` 中引入的语言建模问题。

事实上，语言建模只揭示了序列学习能力的一小部分。在各种序列学习问题中，如自动语音识别、文本到语音的转换和机器翻译，输入和输出都是任意长度的序列。为了解释如何拟合这种类型的数据，我们将以机器翻译为例介绍基于循环神经网络的“编码器－解码器”架构和束搜索，并以此生成序列。

```toc
:maxdepth: 2

{'fraction_non_alphanumeric': 0.09425287356321839, 'fraction_numerical': 0.004597701149425287, 'mean_word_length': 16.413333333333334, 'pattern_counts': {'":': 0, '<': 3, '<?xml version=': 0, '>': 3, 'https://': 0, 'lorem ipsum': 0, 'www.': 0, 'xml': 0}, 'pii_count': 0, 'substrings_counts': 0, 'word_list_counts': {'cursed_substrings.json': 0, 'profanity_word_list.json': 0, 'sexual_word_list.json': 0, 'zh_pornsignals.json': 0}}
{'dir': 'git-commits-cleaned', 'id': '4130902', 'n_tokens_mistral': 1152, 'n_tokens_neox': 1377, 'n_words': 60}