谈谈随机数
God does NOT play dice with the Universe!
什么是随机(random)?字典中给出的定义是无计划,无序和无目的,纯靠运气。随机是生活中必不可少的成分,比如彩票,游戏,安全,早餐吃什么,这些行为都有一些随机的成分,但我们能说这些行为都是随机的吗?
比如早餐,吃的人以为是随机的,做什么吃什么,对厨师而言,可能是精心安排的,就不算随机行为。游戏也是如此,随机掉了一件装备,你如获至宝,其内部是一个概率算法,如果你掌握了这个算法做了一个外挂,对你而言,这也不是随机行为了。同理,很多安全密码的密钥都是随机数,比如核武器的按钮,但难保哪天就被一个天才数学家破解了。
我的意思是,很难定性判断某一行为是否是随机的。随着我们掌握的信息越来越多,我们的决策算法越来越高效,我们的计算能力越来越强大,进而有能力预测出目前无法预测的随机行为。这就留下了一个有意思的问题,是否真的存在上帝,上帝是否掷骰子(随机行为),在宇宙大爆炸前,上帝是否已经设计好宇宙的发展?而我们的人生,是否早已写好,只是看不见而已呢?当然,目前一切还不得而知,万一宇宙的产生只是一个意外呢?
随机并不绝对,但生活中又要用到随机,历史上有很多随机数生成器(random number generator,简称RNG),比如骰子。这方面,我们的祖先甚至写了一本《易经》,可以理解为如何生成随机数并破解随机行为的百科全书。
根据不同的方法,大概分为两种方式:T(rue)RNG和P(seudo)RNG。两者有什么区别呢?
TRNG
通过一些物理现象来产生随机数,比如大气层的噪音,元素的衰变和放射,掷骰子等,因为这些行为受到多个自然因素的影响,过程不可预测,所以主观上觉得比较安全。所以,当我们对安全性和经济性上有较高要求时,往往需要采用这类方式产生的随机数,比如彩票,人类不会放心的把这件事情交给机器来处理,一定要有仪式感,让它看上去是随机的。
然而,公正的行为不一定会产生公平的结果。相比而言,TRNG更大的优势在于不可预测性,但结果上并不一定平均。
PRNG
伪随机数通过算法产生,计算机因此可以模拟随机行为。但因为有公式,所以只要参数确定,也就是随机的种子,得到的随机结果一定是可重复的。比如如下的通随机数生成公式,给出种子1,就可以得到一系列的随机数。
这样经过算法设计出来的随机数分布很均匀,完美的不像人类或自然的产物。下面是在JS,产生1000000个随机数,区间在(0,1000):
我在Matlab中也做了同样的实验,分布也很平均。可见,目前机器生成的随机数,从结果来看确实很随机。比如随机生成灰度图和对应的直方图统计,有没有小时候电视没信号的视觉效果?
万物看似随机,却都有其统计的宿命
正态分布
完美的随机缺少美感。比如我们玩斗地主,洗牌的原则就是做到尽可能的随机,比如同一个花色的不能连续,数字不能连,甚至不能有规律,简单说,要求越严格越随机。可是,如果随机做到绝对的公平,游戏的趣味性则会大大降低。
事物发展的规律也是如此,所谓的能就是势差,只有不平等才能产生差,进而有了发展的动力。大自然在宏观上达成平衡,但在个体之间是不平等的。
所以,我们需要人工干预随机行为,让这种随机变得不平等。如何让随机行为更符合客观规律呢,就是统计的意义。比如统计人的身高,如果样本够多,比如一个学校,一个城市,一个国家,整个世界,就会发现这样的一个分布规律:
这就是正态分布,有兴趣的可以读一下之前写的关于斐波那契数列的文章,因为它们里面都体现了黄金分割。如何让机器模拟正态分布的随机数生成?Box–Muller transform提供了公式,网上也有现成的代码,下图是JS上实现的正态分布的随机数效果:
如下是正态分布的灰度图和直方图:
噪声
通过公式,我们可以创建符合规律(公式)的随机数,数学的美总是晦涩而难以发现的。而庄子云:“天地有大美而不言”。
不是在说随机数,跟美有什么关系?且看下图,沙丘的形成,过程是随机的,但却给人一种美,这样的场景有很多,比如地形,火焰,雨雪天气,木质纹路等,都有各自的美,当我们感叹大自然的鬼斧神工,自然会有疑问:如何通过随机算法来模拟它们?
这就是噪声:在三维空间提供高效的,可实现,可重复的伪随机信号。当然,上面的随机算法也能制造出噪声,但比较尖锐,生硬不自然,我们成为White Noise,比如电视上的雪花屏。学者们根据效率、用途、自然程度(即效果好坏)等方面的衡量,提出了许多希望用程序模拟自然噪声的方法。例如,Perlin噪声被大量用于云朵、火焰和地形等自然环境的模拟;Simplex噪声在其基础上进行了改进,提到了效率和效果;而Worley噪声被提出用于模拟一些多孔结构,例如纸张、木纹等。---摘自candycat的博文《谈谈噪声》
这里就不阐述噪声纹理的算法和思路了,这块内容也很多,个人的理解也很浅薄。如上图,是Perlin噪声的4次分形叠加产生的灰度图,添加颜色表,模拟地形的一个过程。机器的特点是不易出错,可以完美的执行任务,通过噪声,可以在可控范围内随机的创造出不完美,反而更有质感,真实感。
当机器的能力越来越强大,也许,相比机器,人类的一个优势就是会犯错,真是这种随机的错误,让我们的生活更真实。生命的演化也是如此,基因的突变是随机的,多数是失败的,但正是那些不经意的成功,不断推动生命的发展和演变。
Impossible is nothing~