爱因斯坦曾说:上帝不玩掷骰子。但是物理界薛定谔的猫和生物界女朋友的脾气就是不可测量,不可揣摩的两大难题。经常听各种段子,女朋友莫名的又生气了。我们试着从概率上解释下,女朋友生气是不是随机的(滑稽脸.jpg)。

说到概率,有一个特别经典的问题:存在三个盒子,其中一个盒子中存放着大奖。现在你随机挑选了其中一个,中奖的概率是1/3。接着主持人打开了剩下2个盒子中的一个,没有中奖。问给你一次重选择的机会,你会怎么做?维持原来的选择 or 放弃原来的选择。

  1. 随机

随机是我们进行概率推导的基石之一。我们的统计学中经常说一枚硬币抛正面的概率是50%,就是基于每次抛硬币都是随机事件。

插播一条笑话:一个身患重病的人决定去动手术。在手术之前,他问医生:“这起手术的成功率是多少?”医生回答他:“只有1%。”他很惊慌,但是医生说:“没事的,在你之前我已经治死过99个人了。”

听着没毛病,但是却说出了“真随机” 和 “伪随机”的区别了。

真随机

在真随机中,每一个事件都是相互独立、服从真随机分布的,不受其他事件的发生而改变。拿上面的笑话举例,每次手术的成功率都应该是1%,这种相互独立的,不受其他事件的发生而影响,才是真随机。

伪随机

我们程序员都知道,程序给定条件,得到的是确定的结果。所以我们编写的Math.random()肯定不是真随机,而是伪随机。代码底下无秘密,我们看下自带random函数的随机数产生的逻辑。

了解概率知识,概率作为机器学习的底层逻辑_第1张图片

图1 random函数计算源码

可以看出,如果给定相同的seed,random方法将返回相同的随机数。所以程序只是在生成近似随机结果

  1. 用户对随机的感受体验

前面的笑话虽然看着滑稽,但是我们生活中,经常有这样的错觉。比如抽奖活动,1%中奖概率,我们潜意思里觉得抽100次总能抽到。比如3首音乐随机播放,我们如果老是听到重复的,会怀疑随机的可靠性。其实真随机下,重复播放的概率1/3,还挺高。

因此真随机在实际使用过程中,并不一定带来好的体验。而很多伪随机算法更多的是在照顾用户的感受。

介绍几个程序里经常使用的伪随机方案。

洗牌算法

各大音乐播放器中的“随机播放”之中。在随机播放时,如果采用真随机,会导致一首歌无论如何都播放不出,或是同一首歌连续播放数次。为了解决这个问题,播放器采用的解决方案即是洗牌算法:将一个包含所有歌曲的数组像洗牌一样打乱,然后依次播放这个乱序数组。

PRD机制(Pseudo Random Distribution)

在游戏中,会有概率暴击的设计。比如某个角色的大招有35%的概率使出暴击,按照真随机,那么连续暴击的概率 0.35X0.35=12.25%。
过高的暴击概率对严谨的竞技赛事来说,无疑是极其不公平的。因为一次人品爆发秒掉对方核心,可能直接决定赛事的成败,而缺少了竞技的成分。
因此游戏公司大都遵循 PRD机制PRD公式如下:

了解概率知识,概率作为机器学习的底层逻辑

图2 PRD公式

其中,C是一个小于1的常数(算法复杂,可以查表),N表示尝试次数,P为概率。公式表明的意义是:从事件发生起,每次不成功的尝试都会增加1个固定值。 当触发暴击后,概率N重新计算。

了解概率知识,概率作为机器学习的底层逻辑_第2张图片

图3 预先算好的C值表

从表中,可以查到35%概率,使用的C约为16%,因此可以算的p(7)=16x7%=112%, 即7次必出现1次暴击。同时上来即两次暴击的概率为 0.16x0.16 = 2.56%,大大降低了人品的干预。

一些趣事
关于音乐app的随机播放,最开始iTunes用的确实是真随机。但后面有用户投诉说,怎么老是听到重复的歌?因此有了洗牌算法的应用,这个改动也得到了用户的欢迎。

PRD是war3 开发的,war3真是一款伟大的游戏。

  1. 总结

相信看到这里,你一定发现这是一篇标题党的文章,都9102了,程序员怎么会有女朋友。机器学习发展这么快,概率作为机器学习的底层逻辑,了解点概率知识不亏。上帝不掷骰子,但是我们生活中,处处都有概率。
本文转自:奈学开发者社区 https://ask.naixuejiaoyu.com/article/186