机器学习——循环神经网络
隐状态
无隐状态的神经网络
有隐状态的循环神经网络
循环神经网络(recurrent neural networks,RNNs) 是具有隐状态的神经网络。 (循环层、输出层)
Xt为三维张量(时间步数num_steps,批量大小batch_size,词表大小vocab_size) Qt为三维张量(时间步数,批量大小,词表大小) Ht为三维张量(隐藏层数,批量大小,隐藏单元数hidden_num)
基于循环神经网络的字符级语言模型
困惑度
最后,让我们讨论如何度量语言模型的质量, 这将在后续部分中用于评估基于循环神经网络的模型。 一个好的语言模型能够用高度准确的词元来预测我们接下来会看到什么。 考虑一下由不同的语言模型给出的对“It is raining …”(“…下雨了”)的续写:
-
“It is raining outside”(外面下雨了);
-
“It is raining banana tree”(香蕉树下雨了);
-
“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。 在这种情况下,困惑度是正无穷大。
-
在基线上,该模型的预测是词表的所有可用词元上的均匀分布。 在这种情况下,困惑度等于词表中唯一词元的数量。 事实上,如果我们在没有任何压缩的情况下存储序列, 这将是我们能做的最好的编码方式。 因此,这种方式提供了一个重要的上限, 而任何实际模型都必须超越这个上限。
补充理解:
-
困惑度的概念:困惑度是衡量语言模型预测能力的指标,它反映了模型在给定上下文情况下对下一个词元进行预测时的困惑程度。困惑度越低,表示模型的预测能力越好。
-
困惑度的计算:困惑度可以理解为“下一个词元的实际选择数的调和平均数”,即对于每个位置的预测,实际发生的结果(词元的选择数)的调和平均数。调和平均数是一种平均数的计算方法,它对极端值更为敏感。
-
基线情况:在基线模型中,模型的预测是基于词表中所有可用词元的均匀分布,即假设每个词元被预测的概率相等。
-
困惑度的上限:基于这种均匀分布的基线模型,如果我们假设没有任何压缩的情况下存储序列,那么困惑度将等于词表中唯一词元的数量。换句话说,在最理想的情况下,模型的困惑度最小可以达到词表中唯一词元的数量。
-
模型的挑战:因此,基线模型提供了困惑度的上限,而实际的语言模型需要不断努力超越这个上限,以更准确地预测文本中的词元,从而减小困惑度,提高模型的预测能力。
总结
-
对隐状态使用循环计算的神经网络称为循环神经网络(RNN)。
-
循环神经网络的隐状态可以捕获直到当前时间步序列的历史信息。
-
循环神经网络模型的参数数量不会随着时间步的增加而增加。
-
我们可以使用循环神经网络创建字符级语言模型。
-
我们可以使用困惑度来评价语言模型的质量。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
2022-11-12 1007 Maximum Subsequence Sum
2022-11-12 1001 A+B Format