AI如何选择下一个词:条件概率、softmax与对数
语言模型背后的数学:条件概率、基于指数的softmax与对数概率,附详细例题。
- 教程
- Math Mental 团队
- 阅读约 6 分钟
简短回答
会写文字的AI助手,本质上是一台条件概率机器:根据已经写出的内容,它给每一个可能的下一个词分配一个概率,然后选出下一个词。模型内部的分数通过softmax函数变成概率:先取指数,再除以总和,使所有概率加起来等于1。整句话的概率是每一步概率的乘积,而这个乘积会迅速变得极小,所以要用对数把乘法变成加法。
AI对话助手已经走进日常生活,很多人好奇它们怎么“知道”该写什么。其实没有魔法:每个回答背后都是大量计算,核心思想正是高中和大学低年级学过的内容——条件概率、指数函数、对数和科学记数法。本文借这个话题复习这四个工具,例子中的数字都是为了说明而假设的。
核心思想:预测下一个词
语言模型接收一段文字,回答一个具体问题:词表中每个词成为下一个词的概率是多少?在“天空是”之后,“蓝色的”或“阴沉的”概率应该很高,而“螺丝刀”几乎为零。
用数学语言说,这是条件概率 P(w∣上下文)。要成为合法的概率分布,每个值都在0到1之间,且所有词的概率之和恰好为1。
Softmax:把任意分数变成概率
模型内部为每个词给出一个分数,可以是任意实数,可能为负,也可能大于1。用softmax把分数变成概率:
P(wi)=∑jezjezi Softmax:指数使所有值为正,除以总和使总和为1。 关键在于指数函数。ex 恒为正,所以概率不会为负;它是增函数,所以分数高的词概率仍然更高;它还会放大差距:分数只高1,数值就约是原来的2.718倍,因为 ez+1/ez=e。
指数函数始终为正且单调递增:分数每增加1,数值约乘以2.718。所以顺序保持不变,差距被放大。 例题:三个候选词
假设在“天空是”之后只有三个候选词:“蓝色的”分数为2,“阴沉的”分数为1,“螺丝刀”分数为0。
逐步计算softmax - e2≈7.389,e1≈2.718,e0=1 对每个分数取指数,取 e ≈ 2.718。
- 7.389+2.718+1=11.107 把三个值相加,得到分母。
- e2+e1+e0e2≈11.1077.389≈0.665 用每个指数值除以总和。对于“蓝色的”:
- 11.1072.718≈0.245,11.1071≈0.090 对另外两个词做同样的计算。
- 0.665+0.245+0.090=1.000 验证:三个概率之和应为1(细微差别来自四舍五入)。
结果:“蓝色的”约66.5%,“阴沉的”约24.5%,“螺丝刀”约9%。分数为0并不意味着概率为0,因为 e0=1。
分数2、1、0经过softmax:“蓝色的”约66.5%,“阴沉的”约24.5%,“螺丝刀”约9%。没有一根柱子降到0。 整句话的概率
生成一句话就是逐词重复这个过程。根据概率的链式法则,整个序列的概率等于每一步条件概率的乘积:
P(w1,w2,…,wn)=P(w1)⋅P(w2∣w1)⋯P(wn∣w1,…,wn−1) 链式法则:每个因子都依赖于前面所有的词。 假设一句四个词的话,每一步的概率分别为0.5、0.4、0.2和0.1,则整句概率为 0.5⋅0.4⋅0.2⋅0.1=0.004,即0.4%。如果回答有50个词、每步概率都是0.1,乘积就是 0.150=10−50,小到计算机可能直接舍入为0(称为下溢)。
整句的累计概率:从1开始,依次乘以0.5、0.4、0.2、0.1,变为0.5、0.2、0.04、0.004。仅四个词,乘积就急剧下降。 为什么要用对数
办法是使用对数概率,依据 log(a⋅b)=loga+logb。对链式法则取对数,乘积就变成了和:
logP(w1,…,wn)=k=1∑nlogP(wk∣w1,…,wk−1) 句子的对数概率:每一步对数概率之和。 用四个词的例子验证(以10为底) - lg0.5≈−0.301, lg0.4≈−0.398, lg0.2≈−0.699, lg0.1=−1 对每个因子取对数。
- −0.301−0.398−0.699−1=−2.398 相加。
- 10−2.398≈0.004 取10的幂还原,并与直接相乘的结果比较。
两种方法都得到0.004。50个词的情况下,只需存储 −50 而不是 10−50。由于对数是增函数,对数概率最大的句子也就是概率最大的句子。
数量级与科学记数法
描述模型规模时常说“数十亿个参数”。用科学记数法来读:十亿是 109,一万亿是 1012。如果假设的模型A有 109 个参数,模型B有 1011 个,那么B大两个数量级,即大100倍,而不是“大2倍”。
常见错误
- 以为softmax只是除以总和。 没有指数,负分数会得到负的“概率”。
- 把连续步骤的概率相加。 先后发生的事件应相乘。
- 忘记对数概率是负数。 越接近0越可能。
- 混淆数量级。 从 109 到 1012 是1000倍,而不是3倍。
- 把高概率当成必然。 66.5%仍然给其他词留下33.5%。
常见问题
softmax的结果总在0和1之间吗?
是的。每一项为正,并除以包含它自身的总和,所以在多个词时严格介于0和1之间,且总和为1。
为什么用 e 作底数?
任何大于1的底数都可以。选 e 是因为它的导数等于自身,训练计算更简单。
取对数会改变哪句话最可能吗?
不会。对数是增函数,保持大小顺序。
需要学过微积分才能看懂吗?
本文内容不需要。条件概率以及指数和对数的运算性质就足够了。