前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >谈谈随机数

谈谈随机数

作者头像
Peter Lu
发布2018-06-20 10:41:50
1.7K0
发布2018-06-20 10:41:50
举报
文章被收录于专栏:LETLETLET

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~

本文参与 腾讯云自媒体分享计划,分享自微信公众号。
原始发表:2017-05-18,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 LET 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • TRNG
  • PRNG
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档