Notes——bayes rules 的深入理解
Prologue:做 Deep Learning 的人肯定都知道 Bayes,学过概率论的肯定也对 Bayes rule 肯定也很熟悉,我可以很快写出公式,但其实感觉一直都很难深入理解,在读 EWC 的时候,和 AI 对峙过程中,偶然问出了一个我觉得很不错的理解方法,特此写一篇 note
Feynman 风格解读
- Feynman 学习法风格——如何把一个复杂晦涩的领域知识讲给一个毫无基础但很好学的人听
- 首先,忘掉所有复杂的数学符号,我们用一个医生的故事来理解它
-
场景:一种罕见的疾病(比如“Bayes 流感”)在人群中只有千分之一(0.1%)的发病率。有一种检测方法,如果一个人真的得了病,有99%的概率检测结果是阳性;但这个检测也有1%的“假阳性”率,即没病的人也有1%的可能被误测为阳性。
- 问题:现在,你感觉不舒服,去做了检测,结果是阳性,但是你真的的了“Bayes 流感”的概率有多大?
直觉上,这种检测方法的准确率高达 99%,是不是感觉自己要完了?但是,题设给定 99%的概率,是建立在你已经得病的前提下
- Bayes rule 的 4 个要素
根据这 4 个要素,我觉得可以形象代入任何场景下的 Bayes 公式
- 先验概率 $P(H)$ (Prior):在你做检测之前,有多大的概率的病?这就是人群中的基础发病率
- $P(\text{“得病”})=0.1\%$
- 这是你的初始信念或“先见”
- 似然性 $P(E\mid H)$ (Likelihood):如果你真的得病了,检测结果是阳性的可能性有多大?
- $P(\text{“阳性”}\mid \text{“得病”})=99\%$
- 这是“证据”支持你的“假设”的程度
- 证据 $P(E)$ (Evidence):在整个人群中(无论得病与否),检测是阳性的概率有多大?
- 它包括两种情况:A. 真的得病,检测为阳性;B. 没得病,但是误检为阳性
- $P(\text{“阳性”})=(0.1\% \times 99\%) + (99.9\% \times 1\%)\approx 1.1\%$
- 后验概率 $P(H\mid E)$ (Posterior):在看到检测结果是阳性这个证据之后,你真的得病的概率有多大?
- $P(\text{“得病”}\mid\text{“阳性”})=?$
- 这个才是我们一开始的问题的答案,经过证据修正后的最终信念
\[\text{Bayes Rule:}\qquad P(H\mid E) = \frac{P(E\mid H)\times P(H)}{P(E)}\]
代入计算,得到 $P(\text{“得病”}\mid\text{“阳性”})=(99\% \times 0.1\%) / 1.1\%\approx 9\%$
- 也即,即使检测结果是阳性,你真正得病的概率也只有 $9\%$ !这远远低于直觉的 $99\%$!
为什么呢?因为这个病太罕见了(先验概率太低了),大部分的阳性结果其实来自大量健康人中那 $1\%$ 的误报
- Feynman 风格总结:Bayes Rule 的精髓就是“新信念 = 证据的支持度 X 旧信念(Prior)”
机器学习 Bayes 公式解读(对应 EWC 文献 公式 1)
\[\log p (\theta \mid \mathcal{D}) = \log p (\mathcal{D} \mid \theta) + \log p (\theta) - \log p (\mathcal{D}) \tag {1}\]这里就可以用之前的 4 要素风格来理解:
- $\log p (\theta \mid \mathcal {D})$:后验概率(Posterior)
- 在看到了所有训练数据 $\mathcal{D}$ 之后,参数 $\theta$ 是“正确设置”的概率
这是我们希望最大化的概率,也即我们希望 $\theta$ 尽可能是正确的
- 在看到了所有训练数据 $\mathcal{D}$ 之后,参数 $\theta$ 是“正确设置”的概率
- $\log p (\mathcal {D} \mid \theta)$:似然性(Likelihood)
- 假如我把参数设置为 $\theta$ ,那么用这个网络可以“正确生成”或“正确分类”现有数据 $\mathcal{D}$ 的概率
在实践中,等价于 Loss Function($-L(\theta)$),如果模型在当前 $\theta$ 下正确 work 的概率高,则 Loss 值就小,因此你应该听说过“最大似然”的优化方法
- 假如我把参数设置为 $\theta$ ,那么用这个网络可以“正确生成”或“正确分类”现有数据 $\mathcal{D}$ 的概率
- $\log p (\theta)$:先验概率(Prior)
- 在看到任何数据 $\mathcal{D}$ 之前,我们对参数 $\theta$ 的初始信念?
在实践中,这通常是正则项,比如我们可能先验的认为“好的参数 $\theta$ ,其绝对值都应该比较小,以防出现太大的数值”,这就是你熟悉的 L2 正则
- 在看到任何数据 $\mathcal{D}$ 之前,我们对参数 $\theta$ 的初始信念?
- $\log p (\mathcal {D}) \tag {1}$:证据(Evidence)
- 数据 $\mathcal{D}$ 本身出现的概率,与 $\theta$ 无关
在实践中,它不随着 $\theta$ 的改变而改变,因此在优化 $\theta$ 时,可以看作一个常数,通常可以忽略
- 数据 $\mathcal{D}$ 本身出现的概率,与 $\theta$ 无关
- Feynman 风格总结:我们对一个模型的权重参数 $\theta$ 的最终信心(后验概率),取决于这个配置能够多好地解释我们看到的数据(似然性),以及这个配置本身是否符合我们的初始猜想(先验概率)
同样的,你可以快速代入之前医生的例子:你检测阳性后,真实患病的概率,取决于检测方法的准确率(似然性),以及人群中的发病率(先验概率)
EWC 公式解读(对应 EWC 文献公式 2)
\[\log p (\theta \mid \mathcal{D}) = \log p \left(\mathcal{D}_{B} \mid \theta\right) + \log p (\theta \mid \mathcal{D}_{A}) - \log p \left(\mathcal{D}_{B}\right) \tag {2}\]如果前面你都认真看完了,你应该能很快理解 EWC 对于机器学习的原始 Bayes 公式做了什么
- 可以看出,这是在训练 task B,因为最后的“证据项”是数据集 B;但是它把先验概率换为了 $\log p (\theta \mid \mathcal {D}_{A})$,这是 task A 的后验概率
- 也即,在 task B 的优化中,我们不再用一个模糊的先验来约束 $\theta$ 的更新,而是用 $\theta$ 能够在 task A 中表现好的要求来约束 $\theta$ 的更新
- 简而言之,EWC 的想法就是——当前任务的先验概率应该是上一个任务的后验概率,在理论上完美实现了知识的“传承”