机器学习——循环神经网络

发布时间 2023-11-12 11:28:09作者: Yohoc

隐状态

 

无隐状态的神经网络

 

有隐状态的循环神经网络

循环神经网络(recurrent neural networks,RNNs) 是具有隐状态的神经网络。  

 

基于循环神经网络的字符级语言模型 

回想一下 8.3节中的语言模型, 我们的目标是根据过去的和当前的词元预测下一个词元, 因此我们将原始序列移位一个词元作为标签。 Bengio等人首先提出使用神经网络进行语言建模 (Bengio et al., 2003)。 接下来,我们看一下如何使用循环神经网络来构建语言模型。 设小批量大小为1,批量中的文本序列为“machine”。 为了简化后续部分的训练,我们考虑使用 字符级语言模型(character-level language model), 将文本词元化为字符而不是单词。 图8.4.2演示了 如何通过基于字符级语言建模的循环神经网络, 使用当前的和先前的字符预测下一个字符。

 

../_images/rnn-train.svg

图8.4.2 基于循环神经网络的字符级语言模型:输入序列和标签序列分别为“machin”和“achine”

在实践中,我们使用的批量大小为n>1,每个词元都由一个d维向量表示。 因此,在时间步t输入Xt将是一个n*d<br class="Apple-interchange-newline" />

 

困惑度

最后,让我们讨论如何度量语言模型的质量, 这将在后续部分中用于评估基于循环神经网络的模型。 一个好的语言模型能够用高度准确的词元来预测我们接下来会看到什么。 考虑一下由不同的语言模型给出的对“It is raining …”(“…下雨了”)的续写:

 

  1. “It is raining outside”(外面下雨了);

  2. “It is raining banana tree”(香蕉树下雨了);

  3. “It is raining piouw;kcj pwepoiut”(piouw;kcj pwepoiut下雨了)。

 

就质量而言,例1显然是最合乎情理、在逻辑上最连贯的。 虽然这个模型可能没有很准确地反映出后续词的语义, 比如,“It is raining in San Francisco”(旧金山下雨了) 和“It is raining in winter”(冬天下雨了) 可能才是更完美的合理扩展, 但该模型已经能够捕捉到跟在后面的是哪类单词。 例2则要糟糕得多,因为其产生了一个无意义的续写。 尽管如此,至少该模型已经学会了如何拼写单词, 以及单词之间的某种程度的相关性。 最后,例3表明了训练不足的模型是无法正确地拟合数据的。

我们可以通过计算序列的似然概率来度量模型的质量。然而这是一个难以理解、难以比较的数字。 毕竟,较短的序列比较长的序列更有可能出现。(长序列出现的概率明显小于短序列)

困惑度的最好的理解是“下一个词元的实际选择数的调和平均数”。 我们看看一些案例。

  • 在最好的情况下,模型总是完美地估计标签词元的概率为1。 在这种情况下,模型的困惑度为1。

  • 在最坏的情况下,模型总是预测标签词元的概率为0。 在这种情况下,困惑度是正无穷大。

  • 在基线上,该模型的预测是词表的所有可用词元上的均匀分布。 在这种情况下,困惑度等于词表中唯一词元的数量。 事实上,如果我们在没有任何压缩的情况下存储序列, 这将是我们能做的最好的编码方式。 因此,这种方式提供了一个重要的上限, 而任何实际模型都必须超越这个上限。

补充理解

  1. 困惑度的概念:困惑度是衡量语言模型预测能力的指标,它反映了模型在给定上下文情况下对下一个词元进行预测时的困惑程度。困惑度越低,表示模型的预测能力越好。

  2. 困惑度的计算:困惑度可以理解为“下一个词元的实际选择数的调和平均数”,即对于每个位置的预测,实际发生的结果(词元的选择数)的调和平均数。调和平均数是一种平均数的计算方法,它对极端值更为敏感。

  3. 基线情况:在基线模型中,模型的预测是基于词表中所有可用词元的均匀分布,即假设每个词元被预测的概率相等。

  4. 困惑度的上限:基于这种均匀分布的基线模型,如果我们假设没有任何压缩的情况下存储序列,那么困惑度将等于词表中唯一词元的数量。换句话说,在最理想的情况下,模型的困惑度最小可以达到词表中唯一词元的数量。

  5. 模型的挑战:因此,基线模型提供了困惑度的上限,而实际的语言模型需要不断努力超越这个上限,以更准确地预测文本中的词元,从而减小困惑度,提高模型的预测能力。

 

总结

  • 对隐状态使用循环计算的神经网络称为循环神经网络(RNN)。

  • 循环神经网络的隐状态可以捕获直到当前时间步序列的历史信息。

  • 循环神经网络模型的参数数量不会随着时间步的增加而增加。

  • 我们可以使用循环神经网络创建字符级语言模型。

  • 我们可以使用困惑度来评价语言模型的质量。