Skip to content

E.4.1 信息论基础:自信息、熵与探索

前置知识:本篇不需要信息论基础,但建议先读完附录导读E.2.1 概率基础


信息论在回答什么问题

强化学习里的策略本质上是一个概率分布——给定状态 ss,策略为每个动作分配一个概率:

π(s).\pi(\cdot\mid s).

一旦策略变成了概率分布,三个问题自然浮现:

  1. 这个策略有多随机?(答案:熵)
  2. 模型预测的分布和目标分布差多少?(答案:交叉熵)
  3. 新策略和旧策略差多远?(答案:KL 散度)

这三个量贯穿了从策略梯度到 DPO 的整条链路。我们从最简单的概率事件开始,一步步走到它们在 RL 中的应用。


概率越小,信息量越大

想象你在玩一个猜数游戏:对方从 1 到 8 之间选了一个数,你需要用”是/否”问题把它猜出来。如果对方选了 3,你需要问几个问题?”比 4 小吗?””比 2 大吗?””是 3 吗?”——正好 3 个。而如果范围只有 1 到 2,1 个问题就够了。

范围越大,结果越难猜,猜中之后获得的信息也越多。这其实就是自信息的直觉:事件越不可能发生,它一旦发生,带给你的”惊喜”就越大

数学上,自信息(self-information)用一个简洁的公式刻画这种”惊喜程度”:

I(x)=log2p(x).I(x)=-\log_2 p(x).

这里的 log2\log_2 是以 2 为底的对数,p(x)p(x) 是事件 xx 发生的概率。前面的负号保证结果为正数(因为 log\log 对小于 1 的数取值是负的)。

举几个例子。如果 p(x)=1/2p(x)=1/2(像抛硬币正面朝上):

I(x)=log2(1/2)=1.I(x)=-\log_2(1/2)=1.

如果 p(x)=1/8p(x)=1/8(像刚才猜数游戏里猜中一个特定数字):

I(x)=log2(1/8)=3.I(x)=-\log_2(1/8)=3.

概率从 1/21/2 降到 1/81/8,自信息从 1 涨到 3。这个”越少见越令人惊讶”的性质,正是后面熵和 KL 散度的基石。


熵——衡量策略有多”拿不定主意”

自信息衡量的是单个事件的惊喜程度,但策略面对的是一整组动作的概率。我们需要一个总的指标来衡量”策略整体上有多不确定”——这就是熵要解决的问题。

熵(entropy,用字母 HH 表示)的定义是所有动作的自信息的加权平均:

H(P)=xp(x)log2p(x).H(P)=-\sum_x p(x)\log_2 p(x).

这里 x\sum_x 的意思是"把所有可能的动作 xx 加起来",每一项乘以对应的概率 p(x)p(x) 作为权重。

看两个具体策略。策略 A 是完全犹豫不决的:

动作概率
left0.50.5
right0.50.5

策略 B 则几乎已经下定决心了:

动作概率
left0.90.9
right0.10.1

策略 A 的熵是:

H(A)=0.5log20.50.5log20.5=1.H(A)=-0.5\log_2 0.5-0.5\log_2 0.5=1.

策略 B 的熵约为:

H(B)=0.9log20.90.1log20.10.47.H(B)=-0.9\log_2 0.9-0.1\log_2 0.1\approx0.47.

A 的熵更大,说明它更"拿不定主意",也就是更愿意探索不同的动作;B 的熵更小,说明它更偏向某个动作,行为更可预测。


熵奖励——让策略"别太早做决定"

光知道怎么算熵还不够,关键是它能派上什么用场。在实际训练中,策略很容易过早地锁定某个动作——这就是"过早收敛"问题。为此,我们在训练目标里加入熵奖励,鼓励策略在训练早期保持开放心态。

一种常见对策是在训练目标里加入熵奖励:

J(π)=E[G]+βH(π).J(\pi)=\mathbb{E}[G]+\beta H(\pi).

这里 E[G]\mathbb{E}[G] 是期望回报(E\mathbb{E} 表示取平均),H(π)H(\pi) 是策略的熵,β\beta 是一个调节系数,控制"多鼓励探索"。

用一个数字例子说明。两个策略的平均回报和熵如下:

策略平均回报β=0.5\beta=0.5 时的目标
A10101.01.010+0.5×1=10.510+0.5\times1=10.5
B10.310.30.10.110.3+0.5×0.1=10.3510.3+0.5\times0.1=10.35

B 的原始回报更高,但 A 更愿意探索。加入熵奖励后,A 的综合得分反而超过了 B。

这背后的道理很简单:训练初期价值估计还不准确,与其让策略赌在一两个动作上,不如让它多试几种选择。等价值估计可靠了,策略自然会变得更确定。


熵的单位:bit 和 nat

上面的熵公式里用到了对数,而对数的底数决定了熵的单位。如果用 log2\log_2(以 2 为底),单位叫 bit;如果用自然对数 ln\ln(以 e2.718e \approx 2.718 为底),单位叫 nat。

两者之间差一个常数倍:1 nat=log2e1.443 bit1\text{ nat} = \log_2 e \approx 1.443\text{ bit}。机器学习的论文和代码里几乎都用自然对数,因为它和指数函数、softmax、交叉熵损失的数学形式更契合。

例如公平硬币的熵,用 log2\log_2 算:

H=0.5log20.50.5log20.5=1 bit.H=-0.5\log_2 0.5-0.5\log_2 0.5=1\text{ bit}.

用自然对数算:

H=0.5ln0.50.5ln0.50.693 nat.H=-0.5\ln0.5-0.5\ln0.5\approx0.693\text{ nat}.

数值不同,但表达的是同一个物理量,只是单位不同——就像 1 公里和 1000 米的关系。后面除非特别说明,我们都用自然对数。


为什么最大熵对应均匀分布

一个自然的追问:熵什么时候最大?答案很直觉——当所有选项的概率都相等时。

如果两个动作的概率是 [0.5,0.5][0.5,0.5],我们完全猜不到策略会选哪个;如果是 [0.99,0.01][0.99,0.01],几乎可以确定它选第一个。熵恰好捕捉了这种”猜不到”的程度:

H([0.5,0.5])=1 bit,H([0.5,0.5])=1\text{ bit},

H([0.9,0.1])0.47 bit.H([0.9,0.1])\approx0.47\text{ bit}.

所以”鼓励熵”并不是鼓励策略胡乱行动,而是让它在训练早期保持开放心态,多尝试不同选择。等价值估计更可靠后,策略自然会收窄到高回报的动作上。


从 softmax 到策略分布

到目前为止,我们假设策略的概率分布是已知的。但在实际应用中,策略是一个神经网络,它输出的不是概率,而是一组原始分数。我们需要一种方法把这些分数转换成合法的概率分布——softmax 函数就是为了解决这个问题而引入的。

例如对于两个动作,网络可能输出 logits z=[2,1]z=[2,1]。softmax 函数把这些分数转换成合法的概率——所有值都在 0 到 1 之间,且加起来等于 1:

π(ais)=ezijezj.\pi(a_i\mid s)=\frac{e^{z_i}}{\sum_j e^{z_j}}.

这里 ezie^{z_i} 是指数运算,分母 jezj\sum_j e^{z_j} 把所有动作的指数值加起来做归一化。算出来:

π(a1s)=e2e2+e10.73,π(a2s)0.27.\pi(a_1\mid s)=\frac{e^2}{e^2+e^1}\approx0.73, \qquad \pi(a_2\mid s)\approx0.27.

softmax 是策略网络和语言模型最常用的最后一层。后面所有的熵、交叉熵和 KL 散度,都会作用在 softmax 输出的这类概率分布上。理解了这一层,就能看懂为什么策略梯度、PPO 和 DPO 都在反复比较不同动作(或不同回答)的对数概率。


小结

本篇从"概率事件有多大惊喜"出发,逐步建立了信息论在 RL 中的核心工具链:

概念解决什么问题核心公式RL 中的角色
自信息单个事件有多大"惊喜"I(x)=logp(x)I(x)=-\log p(x)低概率事件包含更多信息
策略整体有多不确定H(P)=xp(x)logp(x)H(P)=-\sum_x p(x)\log p(x)衡量探索程度,鼓励多样性
熵奖励防止策略过早锁定某个动作J=E[G]+βH(π)J=\mathbb{E}[G]+\beta H(\pi)训练目标中加入探索鼓励项
最大熵熵最大时分布长什么样均匀分布时熵最大"鼓励熵" = 鼓励保持开放心态
softmax把神经网络输出变成合法概率分布π(ais)=ezi/jezj\pi(a_i\mid s)=e^{z_i}/\sum_j e^{z_j}策略网络和语言模型的输出层

这一篇只讨论了"单个分布"的性质。下一篇开始比较两个分布——模型预测 vs 真实标签、新策略 vs 旧策略——为此需要交叉熵和 KL 散度。

下一篇E.4.2 交叉熵与 KL 散度 —— 衡量两个分布之间的距离。

Built for reusable bilingual course delivery