博客

投硬币真的是完全公平的吗 ?

如何用贝叶斯定理来估计抛硬币过程的偏差 ?

动机与硬币的公平性

现实中我们对两个感觉差不多选项模棱两可时,常用抛硬币的方式来决定。 这是因为我们觉得硬币将给我们一个随机的回答。

但现实中硬币的质量并不完全均匀分布,而且每个人抛硬币的方式和所处环境也有影响。

因此抛硬币的结果多少有些偏差的(尽管可能很小)。其实也有人专门研究过这个:

论文

TL;DR - 他们得出的结论是, 抛硬币初始上朝的那一面有将近0.51的概率成为结果。

 

概率计算

那么当我们觉得一个硬币是不完全公平时,可以怎样去计算(或者估计)这个偏差到底是多少呢 ?

首先最重要的,还是把这个问题定义得再具体和清晰一些。

  1. 硬币的不公平来源于哪 ?
  2. 硬币自身的偏差指什么 ?

对于问题1,其实上文也提到了,不公平来自于硬币自身和硬币以外:人们抛硬币的方式,所处的环境(风向,风力,空气阻力)。但这篇文章想单独讨论硬币这个物体本身的偏差,而暂时忽略其他因素,

硬币自身质量的不均匀导致了抛硬币后的(得到任意面的)结果稍微偏离 1/2。

在这篇文章,我们可以(简化问题)直接将质量分布的偏差看成一个数字,表示 ‘抛一枚给定硬币得到具体某一面的概率’,在这篇文章里,我们用一个数字表示 ‘给定硬币抛得正面的概率’。

比如当我们最终估计出偏差值为0.6时,我们知道这枚硬币的质量分布更近于反面(?),抛完后反面朝下 / 正面朝上的概率比背面的稍微大一点。

 

频率学派

还记得前一篇文章讨论的概率论中的不同学派吗 ?抛硬币作为一个可重复的实验,恰好符合了频率学派对概率的定义条件。

我们可以把一个硬币的偏差(获得某个面的概率)看作硬币被抛出落下后,以正面朝上的物理倾向性。

通过大数定理我们知道,实验被大量重复后所得到某个结果的频率将无限接近它的概率。

那么只要将一个硬币抛若干次,我们所获的正面的频率也就可以用来作为我们对硬币偏差的估计啦。

这是很出于直觉,而且步骤简单,可以快速用程序来计算。(我之后会讲到如果用程序模拟一个特定的硬币)

而贝叶斯学派的做法则复杂许多,但值得我们讨论和思考,而且可以被用来探索更复杂的随机系统 / 过程。

 

贝叶斯学派

这个学派的主要特点是把概率看作 “对获得某个结果的相信程度”,他们认为概率可以脱离实验而存在。

所以往往研究一开始,就根据过往经验设定一个’相信程度’ 这也叫先验概率 / Prior Probability。

在这之后将不断获得的实验数据 / Empirical Data 代入贝叶斯公式对概率进行不断更新

每次更新后的计算结果通常被称作后验概率 / Posterior Probability.

如果你对贝叶斯定理不太熟悉,这篇文章可以帮助你更好地理解它。

 

模型的参数

在我们上文的定义中,硬币的(质量分布)偏差直接决定了 (等于) 正面朝上的概率,又因为抛硬币的结果非正即反(这里不讨论硬币竖直着陆并保持平衡的情况),偏差便可以看作这个系统的决定性参数

这么说的意图是,对每一个现实中的硬币,我们都可以只用一个数字(0和1间)来表示它被抛掷的随机过程。它也可以被用来区分不同硬币 / 随机过程。

我们可以想象任意两个现实中的硬币的偏差值都不同,可以是 0.50001, 也可以是 0.499991

那么计算一个硬币的偏差,也可以看作:在0和1间选一个与抛掷实验结果最契合的数字。

而0和1间有无数个数字呀,怎么选呢 ?在这篇文章里,我想再次简化这个问题:

在0, 0.01, 0.02 .. 到 0.99, 1之间选出 ‘最可能作为给定硬币的偏差值’ 的数字。

 

初始偏差

也就是说在一开始,我们对给定硬币一无所知, 这101个数字的每一个都有那么一点点的可能性。

那么这个一开始的’一点点可能性’怎么设置呢 ?

我们知道,因为偏差值一定出自它们之一,它们的概率总和必须为1。我们可以在一开始时就把更多的概率分配到0.5或者0.6这样的候选值上吗 ?还是瞅一眼硬币掂量一下再定呢 ?

其实我们在进行任何实验前,可以把’数字X是这枚硬币的偏差’ 的概率 P(Bias = X) 设成 1/101。为什么呢 ?

  1. 因为我们假设了偏差一定是这中间的某个值,所以它们的概率相加为1。

  2. 因为我们在做实验前并没有任何理由相信其中某值比另一个更有可能是偏差,所以我们把概率均匀地分布在每个值上。

等下,那可不可以用其他的初始化方式呢,比如靠近0.5的数值概率高一些 ?

答案是可以的,之后你会发现,大量试验(和反复使用贝叶斯定理更新)后得到的概率将会一样。

 

用程序模拟硬币

目前我们所定义的 P(Bias = X) = 1101, (0 <= X <= 1),在贝叶斯学派来看,就是先验概率。

那么下一步也就是抛掷硬币啦,我们当然可以用现实中的硬币进行实验 - 但偏差极小,将很难被观察到。

计算机程序给了我们模拟任何硬币的机会,我们可以用它来定义特定偏差的硬币,和模拟抛掷过程。

很多程序语言都提供了随机数生成函数,比如生成一个0和1间的随机数。

当我们想模拟一个,比如说,偏差为 0.35 的硬币时,我们可以写这样的一个(程序的)函数:

  1. 生成一个0和1间(包括边界值)的随机数。

  2. 随机数若大于硬币的偏差0.35,返回 ‘反面朝上’,否则返回 ‘正面朝上’。

假设程序拥有完美的随机性,运行这个程序多次后,正面朝上的频率将非常接近设定的偏差值 0.35, 根据大数定理,这个频率可以看作是概率。

 

更新概率

现在我们有了一个,能模拟抛掷 ‘拥有给定偏差的硬币’ 的程序。我们可以启动它来模拟抛硬币实验。

还记得我们定义的那 101 个先验概率吗,现在的问题是我们该怎么更新它们呢 ?

答案自然是使用贝叶斯公式啦。这个公式的特点在于,它用概率数值,描述了一个实验结果(或观察信息)和随机过程背后的因素的关系。

它通常是这种形式:

P(某个对随机过程的假设 | 最近一次实验的观察数据) = P(最近一次实验的观察数据 | 某个对随机过程的假设) x P(随机过程背后因素确实如假设所描述) / P(最近一次实验的观察数据)

假设在一次实验中我们得到了反面,那么,

P(Bias = X | 'Tail') = P('Tail'| Bias = X) x P(Bias = X) / P('Tail')

这里我引入了很多比较多的变量和符号,不熟悉贝叶斯定理的读者可能会感到困惑。我将一个个解释清楚。

等式左边的,常被称作贝叶斯定理中的后验概率,它就是更新后的概率值。用条件概率的形式,表示了基于某个观测结果,随机过程背后某个因素是事实的概率。

 

可能性

P (‘Tail’| Bias = X) 常被称作可能性 / Likelihood:当硬币真实的偏差为X时,产生反面朝上结果的概率。

因为我们讨论的(被简化的)随机抛硬币系统只有一个决定结果的参数(偏差),这个数值很容易计算。

比如当偏差是0.6时,根据我们对偏差的定义,产生正面的概率便是0.6,反面是则0.4。

[Hmmm, 仔细想想,这个值的计算是否总是依赖于我们的经验 / 对硬币了解呢 ?]

 

先验概率

P(Bias = X) 是我们曾定义的先验概率,未进行任何实验前我们就将它定义成 1101.

每次实验后计算出的后验概率都将成为下一次使用这个公式的先验概率。也就是说,前一次计算得到的

P(‘硬币结果’| Bias = X) 将被当作 P(Bias = X) 用于下一次计算 P(‘下一次的结果’| Bias = X)

 

P(‘Tail’) 比较难理解。我觉得,既然我们在用贝叶斯理论讨论,就把它看作: 我们基于目前所有信息,对 ‘硬币随机抛一次出现反面’ 这件事的相信程度

根据概率的第三条公理和条件概率的定义,我们可以通过对所有的 P(Bias = X) x P(‘Tail’ | Bias = X) 求和:

Σ P(Bias = X) x P('Tail' | Bias = i) 对于 i = 0, 0.01, .., 0.99, 1 

这是因为 Bias = 0, 0.01, .., 0.99, 1 包含了简化硬币的所有的 101 种可能性,总有一个是硬币的真实参数。

我们也可以把 P(‘Tail’) 看作当前(进行了若干实验后)我们对抛硬币得到反面朝上事件的概率的期望

 

更新的循环

上一小节详细地讲解了每一次更新过程所使用的贝叶斯公式,和它用于估计硬币偏差时的具体形式。

还记得最开始我们定义的101个先验概率吗,现在要做的就是不断进行硬币实验(运行程序),然后将每次的实验结果带入贝叶斯公式,计算出101个后验概率,再将它们作为下一次更新的先验概率值。

当试验次数足够多时,我们可以随时停止,然后在这101个候选值里,选择后验概率的最大的可以作为最终对偏差的估计。

 

多次更新后

在若干次后,你大概就会发现,许多候选值的概率已经变得极小,而其中一个值的概率变得很大。

还记得我们写抛硬币模拟程序时传入的偏差值吗,如果这一切都没写错的话,若干次更新后,概率最大的候选值将最接近它。

 

回顾总结

我想再简述一下这篇文章的几个过程。

首先,我们知道抛硬币的结果是随机的,我们也知道每个硬币存在独特的某些因素 / 物理性质,导致了它的随机抛掷结果。 (因素也常被称为一个物理系统的参数 - Parameter)

但我们想知道,给定一个硬币,它导致结果的具体因素(数值)。

于是我们用一个简单的‘偏差值’来表示抛硬币结果的决定性因素 - 这里其实是用极简的数学模型(1个数字)来表示现实中复杂的物理系统。你也可以把偏差值看作是,硬币的某种质量分布相关的属性。

然后我们赋予了这个因素所有可能值同等的概率,作为先验概率。 - 这里我们甚至限定了101个可能值,为了简化计算。

这些准备之后,问题才真正被具体地定义清楚:从0, 0.01 到 0.99, 1 这101个数字中,哪一个’有最大的概率’是当前硬币的偏差值。

接下来要做的就只是使用贝叶斯公式,不断进行实验(可以用程序模拟,也可以在真实地抛),用一次次实验结果来更新我们’对每个偏差可能值的相信程度’。

 

硬币之外

现实中人们使用概率学的目的之一,就是探索发生过的事情的起因。

我们很多时候可以把一件事看作一个随机过程,然后把它的起因做各种假设。那么我们如何判断哪种假设最有可能呢?

其中一种做法便是像这篇文章所描述的过程一样,不断获取新的信息,用贝叶斯定理来更新各种假设的概率。

当更新次数足够多时,‘最合理的’那个假设将自然地呈现出比较高的概率,而随着不断更新,‘不合理的’假设的概率也将越来越小。

你可能会想一想现实中发生的某件事,然后说,很多事可不像扔硬币,根本没法重复嘛。

是的,但无法重复不代表无法获得更多关于系统的信息。只要有了新的信息,都可以用来更新我们的概率。

(从这方面来看,这篇文章讨论的可重复扔硬币实验,其实是一个相对简单的情况。)

 

问题

那么为什么大量实验后,那个最接近硬币真实偏差的备选值将(神奇地)拥有最高的概率,而其他备选值的概率将变得越来越小呢 ?

(我想这与每次贝叶斯公式中的’可能性‘的计算方式有关)