山村信使阿信每天清晨摇响铜铃,向全村播报消息。他喊“今天集市照常开”,村民们头也不抬,继续喝粥;可他若喊“后山发现金矿了”,整条街的碗都会摔碎一地。同样是一声铃响,为什么后者让所有人屏住呼吸?因为信息量不取决于消息喊得多响,而取决于它有多让人意外。一个事件越罕见,发生在你面前时带来的“惊喜/惊吓”就越大,携带的信息量也越多。这篇文章要讲的自信息,就是把这股“意外程度”量化成一把数学尺子。我们会从生活直觉出发,认识负对数公式、比特等单位、单调性和可加性,再看它怎样通向信息熵,以及多个事件同时发生的联合自信息。读完后,你会用自信息给任何事件的信息含量打分。

岗位关联

学会自信息,你就能用一把数字尺子衡量“意外程度”,也为理解信息熵、交叉熵等机器学习底层指标打下第一块基石。

目录
  1. 可视化演示
  2. 信息量与惊讶度
  3. 负对数公式
  4. 单位换算
  5. 性质特征
  6. 熵的桥梁
  7. 联合自信息
  8. AI 应用场景
  9. Python 演示
  10. 常见误区
  11. 面试题

可视化演示

展示自信息概念(概率越低信息越大)、I(x)=-log₂p(x)公式曲线、联合自信息独立/依赖对比及自信息与信息熵期望关系。

本节配有交互动效(进入视口后自动加载,约 3KB)。

自信息概念:越罕见信息越多 晴天概率99%信息量仅0.01bit,冰雹概率1%信息量达6.64bit 概率越低的事件发生时带来的信息量越大 I(x) = -log₂ p(x) 自信息量化单个事件发生所带来的信息含量

信息量与惊讶度

阿信在村里喊了十年话,村民们早已摸清他的脾性:越是常见的通知,大家越懒得抬头;越是石破天惊的消息,越能让全村瞬间安静。所谓“信息量”,其实可以用一个更接地气的词替换——“惊讶程度”。一个事件发生前你越想不到它会发生,它真的发生时,给你带来的信息就越多。

这个直觉正是自信息的起点。对待一个具体事件 $x$,我们关心它发生的概率 $p(x)$。$p(x)$ 越小,说明 $x$ 越罕见,事件带来的信息量越大。数学家给这个信息量起了个名字:自信息,记为 $I(x)$。它衡量的不是这条消息对你有没有用,而是它有多让人意外。

为了让“意外程度”变成可计算的数字,定义如下:

回到阿信的村庄:赶集是每天发生的高概率事件,大家听了毫无波澜;发现金矿是几十年一遇的低概率事件,一声铃响就能让全村沸腾。自信息就是把这种“铃响后的心跳加速值”变成一把数字尺子。学会给单个事件打分,是理解整个信息论的第一步。

I(x)=log⁡b1p(x)\displaystyle I(x) = \log_b \frac{1}{p(x)}
自信息等于事件概率倒数的对数。概率越小,倒数越大,信息量越大。
  1. 事件概率 $p(x)$这一步先找到事件 $x$ 在样本空间里发生的概率,取值范围是 $0 < p(x) \le 1$。
    p(x)\displaystyle p(x)
  2. 取倒数 $\frac{1}{p(x)}$概率越小,倒数越大,相当于先把“罕见程度”放大成倍数。
    1p(x)\displaystyle \frac{1}{p(x)}
  3. 取对数 $\log_b$把夸张的倍数压缩成更容易比较的尺度,同时让后续的乘除关系可以转化为加减关系。
    log⁡b1p(x)\displaystyle \log_b \frac{1}{p(x)}

负对数公式

阿信发现,直接用“倒数”来报信息量很不顺手。概率 $0.5$ 的倒数是 $2$,概率 $0.001$ 的倒数是 $1000$,数字跨度太大,聊起来不方便。于是他想:不如给倒数套一层对数,把倍数压缩成温和的增长曲线。因为概率最大也就是 $1$,所以 $\log_b p(x)$ 天然小于等于 $0$,前面再添一个负号,就能把结果翻正。

这个负号不是多余的装饰,它保证了信息量非负:我们不会说一条消息带来“负信息”,那不符合直觉。于是自信息最常用的形式变成:

阿信的铃铛越响,不代表事件越常见,反而代表这件事越出人意料。负对数就像给铃铛装了一个“反向扩音器”:概率越低,扩出的分贝越高。这个形式简洁、非负,也为后面所有信息论公式提供了统一的语言。

I(x)=−log⁡bp(x)\displaystyle I(x) = -\log_b p(x)
负对数公式是同一件事的另一种写法:先对概率取对数,再取负号,让结果从负数变成非负数。
  1. 底数 $b$$b$ 是信息量的“度量尺”,通常取 $2$、$e$ 或 $10$,不同的底数对应不同单位。
    b∈{2,e,10}\displaystyle b \in \{2, e, 10\}
  2. 对数 $\log_b p(x)$对概率取对数。因为 $0 < p(x) \le 1$,所以 $\log_b p(x) \le 0$。
    log⁡bp(x)≤0\displaystyle \log_b p(x) \le 0
  3. 负号 $-$把原本小于等于 $0$ 的结果翻转成大于等于 $0$ 的信息量。
    I(x)=−log⁡bp(x)≥0\displaystyle I(x) = -\log_b p(x) \ge 0

单位换算

阿信有好几把铜铃,有的声音低沉,有的声音清脆。同样一句话,用不同的铃铛摇出来,村民听到的“响度数值”不同,但表达的意思一样。自信息的底数就扮演了“铃铛材质”的角色:底数取 $2$,单位叫比特(bit);底数取 $e$,单位叫奈特(nat);底数取 $10$,单位叫哈特(Hartley)。

既然单位不同,同一个事件的信息量数值也会不同。比如概率 $0.5$ 的事件,用底数 $2$ 算是 $1$ 比特,用底数 $e$ 算是约 $0.693$ 奈特。不同底数之间可以通过换底公式互相转换:

在机器学习中,大家最常用的是比特,因为计算机天然用二进制思考。阿信只要记住:换算单位不改变消息的“意外程度”,只改变数字的刻度。就像温度计的摄氏和华氏,同一个天气,读数不同,冷热不变。

log⁡ax=log⁡bxlog⁡ba\displaystyle \log_a x = \frac{\log_b x}{\log_b a}
只要知道换底公式,就能把信息量从一种单位换算成另一种单位,底层含义完全不变。
  1. 两把尺子 $a$ 和 $b$$\log_a x$ 和 $\log_b x$ 分别代表用不同底数度量同一个数,结果不同但本质相同。
    log⁡ax,log⁡bx\displaystyle \log_a x, \quad \log_b x
  2. 除以换算系数 $\log_b a$$\log_b a$ 是从底数 $a$ 换算到底数 $b$ 的倍数关系。
    log⁡bxlog⁡ba\displaystyle \frac{\log_b x}{\log_b a}
  3. 应用到信息量例如 $\log_e x = \dfrac{\log_2 x}{\log_2 e}$,而 $\log_2 e \approx 1.4427$。
    log⁡ex=log⁡2xlog⁡2e\displaystyle \log_e x = \frac{\log_2 x}{\log_2 e}

性质特征

阿信摇铃摇久了,总结出三条规律:第一,信息量永远不会是负数;第二,概率越小,信息量越大;第三,两个独立事件先后发生,总信息量等于各自信息量相加。这三条性质让自信息既符合直觉,又方便计算。

用数学语言说,自信息是概率的单调递减函数,并且非负。如果事件 $x$ 和 $y$ 相互独立,它们的联合自信息可以分解为各自信息量之和:

阿信发现,这三条规律让报信工作变得很有条理:常见事小声说,罕见事大声说;如果是两件互不相干的事同时发生,把两个“惊讶值”加起来就是总惊讶值。正是这套性质,让自信息从“一个事件的评分”顺利升级成“一整个系统的评分”。

p1<p2  ⇒  I(p1)>I(p2),I(x,y)=I(x)+I(y)\displaystyle p_1 < p_2 \;\Rightarrow\; I(p_1) > I(p_2), \qquad I(x,y) = I(x) + I(y)
概率越小,自信息越大;独立事件的联合自信息等于各自信息量相加。
  1. 单调性前提 $p_1 < p_2$先比较两个事件发生的概率,概率小者更罕见。
    p1<p2\displaystyle p_1 < p_2
  2. 单调性结论 $I(p_1) > I(p_2)$因为负对数在 $p \in (0,1]$ 上是减函数,所以概率越小,自信息越大。
    I(p1)>I(p2)\displaystyle I(p_1) > I(p_2)
  3. 非负性$p \in (0,1]$ 保证 $\log_b p \le 0$,加负号后 $I(p) \ge 0$。
    I(p)=−log⁡bp≥0\displaystyle I(p) = -\log_b p \ge 0
  4. 独立分解 $I(x,y)=I(x)+I(y)$若 $x,y$ 独立,联合概率等于概率乘积,对数把乘积变成加法。
    p(x,y)=p(x)p(y)⇒I(x,y)=−log⁡bp(x,y)=I(x)+I(y)\displaystyle p(x,y)=p(x)p(y) \Rightarrow I(x,y)=-\log_b p(x,y)=I(x)+I(y)

熵的桥梁

阿信不能只关心某一天喊了什么,他还想知道:整体来看,这个村庄的消息到底有多让人捉摸不透?如果每天都喊“赶集照常”,大家会无聊到睡着,系统的不确定性很低;如果有时候晴天、有时候暴雪、有时候金矿,未来难以预料,系统的不确定性就很高。这种“整个事件集合的平均意外程度”,就是信息熵。

信息熵是自信息的加权平均:每个事件的自信息先乘以它发生的概率,再把所有结果加起来。这样,罕见事件即便信息量再大,如果几乎不发生,它对熵的贡献也很小。公式如下:

阿信终于明白,单个事件的惊人程度是自信息,全村消息的平均惊人程度才是熵。自信息是“点”,熵是“面”。日后你在机器学习里遇到的交叉熵、KL 散度,本质上都是在拿“点”和“面”做比较,所以打好自信息这个地基尤其重要。

H(X)=∑ip(xi) I(xi)=−∑ip(xi)log⁡bp(xi)\displaystyle H(X) = \sum_{i} p(x_i) \, I(x_i) = -\sum_i p(x_i)\log_b p(x_i)
信息熵 = 所有事件自信息的概率加权平均,它描述的是一个系统的整体不确定性。
  1. 概率加权 $p(x_i) I(x_i)$每个事件对整体不确定性的贡献等于它发生的概率乘上它带来的信息量。
    p(xi) I(xi)\displaystyle p(x_i) \, I(x_i)
  2. 求和 $\sum_i$把样本空间里所有事件的结果加在一起。
    ∑ip(xi) I(xi)\displaystyle \sum_i p(x_i) \, I(x_i)
  3. 代入自信息用 $I(x_i)=-\log_b p(x_i)$ 替换,就得到最常用的熵公式。
    −∑ip(xi)log⁡bp(xi)\displaystyle -\sum_i p(x_i)\log_b p(x_i)

联合自信息

有时候阿信会同时喊两件事:“今天集市照常,而且后山发现了金矿!”村民的惊讶程度不能只按金矿一条算,而要按两件事同时发生的概率来算。两个事件同时发生的概率记为 $p(x,y)$,把联合概率代入负对数公式,就得到联合自信息:

如果两件事并不独立,比如“下雨”和“路面湿滑”往往伴随出现,那么它们同时发生并不比单独发生“下雨”更让人意外多少。阿信总结:联合自信息不是两个数值的盲目相加,而要看事件之间是否存在关联。联合自信息把自信息从单事件推广到多事件,为后续学习互信息铺好了道路。

I(x,y)=−log⁡bp(x,y)\displaystyle I(x,y) = -\log_b p(x,y)
联合自信息衡量“两个事件同时发生”这一整体结果的意外程度,而不是两个信息量简单相加。
  1. 联合概率 $p(x,y)$$p(x,y)$ 表示事件 $x$ 和 $y$ 同时发生的概率,它是联合分布中的一项。
    p(x,y)\displaystyle p(x,y)
  2. 取负对数对联合概率取负对数,得到联合自信息,公式结构与单事件自信息完全一致。
    I(x,y)=−log⁡bp(x,y)\displaystyle I(x,y) = -\log_b p(x,y)
  3. 独立分解如果 $x,y$ 独立,则 $p(x,y)=p(x)p(y)$,联合自信息等价于两个自信息之和。
    p(x,y)=p(x)p(y)  ⇒  I(x,y)=I(x)+I(y)\displaystyle p(x,y)=p(x)p(y) \;\Rightarrow\; I(x,y)=I(x)+I(y)

AI 应用场景

异常日志与故障告警

阶段:数据预处理与异常检测

解决的问题:运维系统每天产生海量日志,常见 INFO 日志占了绝大多数,真正的故障往往藏在极低概率的报错里。传统规则靠关键词匹配容易漏报,或者被海量日志淹没。用自信息给每条日志打“惊讶分”,罕见且高影响的日志会自动浮出水面。

具体案例:某支付平台每秒处理上万笔交易,日志里“数据库连接失败”出现概率只有 0.001。系统计算每条日志的自信息后,把信息量最高的日志自动置顶并推送给值班工程师,帮助团队在用户投诉前定位问题。

关键词抽取与文本特征

阶段:特征工程与文本表示

解决的问题:在一堆新闻里,“今天”、“我们”这样的常见词几乎没有区分度,而“地震”、“熔断”等罕见词往往最能代表文章主题。传统做法只数词频,容易让常见词喧宾夺主;用自信息给词加权,能让罕见关键词获得更高权重。

具体案例:新闻分类系统把每个词看作“随机一篇文档里出现这个词”的事件,词越罕见,自信息越大。抽取关键词时,系统优先保留自信息高的词,再用 TF 与自信息结合,显著提升了分类准确率。

推荐系统中的冷门行为加权

阶段:用户画像与特征加权

解决的问题:用户点击热门商品的行为到处都是,提供的判别信息很少;而收藏一个冷门商品、深夜反复查看某个小众页面,这类低概率行为更能体现真实偏好。用自信息给用户行为加权,可以让罕见但重要的行为在推荐排序中发挥更大作用。

具体案例:某音乐 App 发现用户播放超热门歌曲的自信息极低,而连续一周循环一首冷门民谣的自信息很高,于是把后者作为强特征,向用户推荐同类冷门歌曲,次日留存率明显提升。

Python 演示

python25 行
import math def self_info(p, base=2.0):    if not (0 < p <= 1):        raise ValueError("p must be in (0, 1]")    return -math.log(p) / math.log(base) def entropy(probs, base=2.0):    if abs(sum(probs) - 1.0) > 1e-9:        raise ValueError("probabilities must sum to 1")    return -sum(p * math.log(p) for p in probs if p > 0) / math.log(base) def joint_self_info(p_xy, base=2.0):    if not (0 < p_xy <= 1):        raise ValueError("p_xy must be in (0, 1]")    return -math.log(p_xy) / math.log(base) if __name__ == "__main__":    p_common = 0.99    p_rare = 0.001    print("common:", round(self_info(p_common), 3), "bit")    print("rare:", round(self_info(p_rare), 3), "bit")    probs = [0.5, 0.25, 0.25]    print("entropy:", round(entropy(probs), 3), "bit")    print("joint:", round(joint_self_info(0.125), 3), "bit")
目的:用 Python 实现自信息、联合自信息和信息熵的计算,直观对比常见事件与罕见事件的信息量差异。
  1. if not (0 < p <= 1):先检查概率是否在合法区间,避免对不可能事件做无意义计算。
  2. return -math.log(p) / math.log(base)用负对数实现自信息公式,底数通过换底公式切换。
  3. if abs(sum(probs) - 1.0) > 1e-9:检查概率分布是否归一化,保证熵的计算有概率意义。
  4. return -sum(p * math.log(p) for p in probs if p > 0) / math.log(base)实现熵的加权求和公式。
  5. p_common = 0.99` 和 `p_rare = 0.001构造常见与罕见两个事件,直观展示信息量差距。
  6. print("joint:", round(joint_self_info(0.125), 3), "bit")计算联合概率为 0.125 时的联合自信息,输出 3 bit。

常见误区

误区只要某个事件信息量大,它一定更重要、更值得优先处理。所以做异常检测时,自信息最高的告警就一定是最紧急的故障。

正解自信息只衡量事件的意外程度,不包含价值判断。阿信喊破喉咙,可能是因为发现金矿,也可能只是踩到毒蛇后的惨叫。噪音、误报同样可以有很高的自信息。真正决定一条告警该不该处理的,是业务语义、上下游影响和后续验证。

为何常见:“信息量”这个词听起来很像“价值量”,而且小概率事件确实常常与重要事件相关,人们很容易把相关性当成因果关系。

误区既然公式里代入 $p=0$ 会得到无穷大,那“不可能事件”也可以讨论信息量,比如“太阳从西边出来”的信息量就是无穷大。

正解自信息的定义域是 $0 < p \le 1$。概率为 0 的事件不属于该样本空间,在实际概率模型中不会被观察到。强行代入只是数学上的发散,不构成有意义的自信息。信息论讨论的是“会发生但很罕见”,而不是“永远不发生”。

为何常见:负对数在 0 处确实趋于无穷大,这个极限很容易让人误以为定义域包含 0,从而把数学发散当成真实含义。

误区一个系统里只要存在某个信息量很大的罕见事件,就说明这个系统很混乱、熵很大。

正解自信息是单个事件的“惊讶分”,熵是整个概率分布的加权平均。如果一个系统里罕见事件几乎不发生,比如故障率只有 0.001%,那么虽然故障的自信息很高,但对熵的贡献微乎其微,系统整体不确定性可能很小。只看单点,不看分布,就会误判系统。

为何常见:人们习惯用最抓眼球的极端值代表整体,而忽略了概率权重在求平均时的稀释作用。

误区既然自信息有可加性,那不管两个事件是什么关系,$I(x,y)$ 都一定等于 $I(x)+I(y)$。

正解可加性只在事件相互独立时成立。如果两个事件强关联,比如“下雨”和“地湿”,它们同时发生时并不会带来两份独立惊讶,直接相加会高估信息量。正确做法是先求联合概率 $p(x,y)$,再用联合自信息公式计算。

为何常见:可加性公式简洁漂亮,初学者容易忽略“独立”这个关键前提,把特殊性质当成普遍规律。

面试题

Q1. 明天晴天的概率是 0.9,出现流星雨的概率是 0.001。按自信息定义,哪个事件的信息量更大?

单选题 · easy

  • A.晴天信息量更大
  • B.流星雨信息量更大← 正确答案
  • C.两者信息量相同
  • D.无法比较大小

答案:B。自信息随概率减小而增大。流星雨概率 0.001 远小于晴天概率 0.9,因此流星雨更罕见,信息量更大。就像阿信喊“赶集照常”没人惊讶,喊“流星雨来了”全村都会抬头。

Q2. 自信息公式 $I(p) = -\log_b p$ 中,为什么前面要加负号?

单选题 · easy

  • A.因为 p 小于等于 1,取负才非负← 正确答案
  • B.因为概率越小,对数结果越小
  • C.因为负数代表无信息,不自然
  • D.因为对数函数必须要取反

答案:A。$0 < p \le 1$ 时 $\log_b p \le 0$,直接作为信息量会是负数,不符合“信息量非负”的直觉。加负号把结果翻转成正数,同时保证罕见事件信息量更大。

Q3. 某事件发生概率为 0.25,以 2 为底的自信息是多少?

单选题 · mid

  • A.2 比特← 正确答案
  • B.0.5 比特
  • C.4 比特
  • D.-2 比特

答案:A。$I(p) = -\log_2 0.25 = -\log_2(1/4) = 2$ 比特。概率越小,信息量越大。阿信喊出四分之一概率的事,会比五五开的事更让人意外。

Q4. 某事件概率为 0.5,用自然对数 e 为底计算的自信息约是多少?

单选题 · mid

  • A.0.693 奈特← 正确答案
  • B.0.500 奈特
  • C.1.000 奈特
  • D.1.386 奈特

答案:A。$-\ln(0.5) \approx 0.693$ 奈特。以 2 为底是 1 比特,因为 $\ln 2 \approx 0.693$,换底公式让两者表达同一个信息量。换了一把“铃铛”,音高数值不同,含义不变。

Q5. 关于自信息,下列说法正确的有哪些?

多选题 · mid

  • A.自信息永远是非负数← 正确答案
  • B.概率越小自信息越大← 正确答案
  • C.独立事件自信息可相加← 正确答案
  • D.自信息等于信息熵

答案:ABC。自信息非负、随概率递减、独立事件可加,这些都是核心性质。但自信息是单个事件的信息量,信息熵是所有自信息的概率加权平均,两者不能画等号。

Q6. 事件 X 概率为 0.5,事件 Y 概率为 0.25,且两事件独立。联合自信息 $I(X,Y)$ 是多少?

单选题 · mid

  • A.信息量为 1 比特
  • B.信息量为 2 比特
  • C.信息量为 3 比特← 正确答案
  • D.信息量为 4 比特

答案:C。独立时 $I(X,Y)=I(X)+I(Y)=1+2=3$ 比特。也可以直接算 $-\log_2(0.5 \times 0.25)=-\log_2(0.125)=3$。两件独立罕见事同时发生,总惊讶值等于各自惊讶值相加。

Q7. 关于自信息与信息熵的关系,下列说法正确的有哪些?

多选题 · hard

  • A.熵是自信息的期望← 正确答案
  • B.自信息描述单个事件← 正确答案
  • C.均匀分布时熵最大← 正确答案
  • D.自信息就是信息熵

答案:ABC。熵 $H(X)=E[I(X)]$,是自信息按概率加权平均的结果;自信息刻画单个事件,熵刻画整个分布。均匀分布时所有事件信息量相同且概率平均,熵达到最大。D 把“点”和“面”混为一谈,明显错误。

Q8. 已知 $\log_{10} x = 3$,则 $\log_2 x$ 约等于多少?

单选题 · mid

  • A.约 9.97 比特← 正确答案
  • B.约 3.00 比特
  • C.约 4.32 比特
  • D.约 0.30 比特

答案:A。由换底公式 $\log_2 x = \log_{10} x / \log_{10} 2 \approx 3 / 0.301 \approx 9.97$。就像阿信把低音铃换成高音铃,同一件事的音高读数变化,但事件本身没变。

Q9. 某错误事件发生概率为 0.001,以 2 为底计算的自信息约为多少?

单选题 · extreme

  • A.约 9.97 比特← 正确答案
  • B.约 0.10 比特
  • C.约 3.00 比特
  • D.约 1.00 比特

答案:A。$-\log_2(0.001) = \log_2(1000) \approx 9.97$ 比特。这个值明显高于概率 0.5 事件的 1 比特。千分之一概率的错误一旦发生,足以让阿信把铜铃摇得震天响。

Q10. 下列哪些情况的自信息比较高?

多选题 · easy

  • A.百年一遇的洪水← 正确答案
  • B.每天响起的闹钟
  • C.从未见过的系统报错← 正确答案
  • D.随处可见的广告弹窗

答案:AC。洪水百年一遇、系统报错从未见过,都是概率极低的事件,按自信息公式会得到很高分值。每天响的闹钟和随处可见的弹窗概率接近 1,几乎没有意外感,自信息很低。