论文参考文献

首页 » 常识 » 问答 » Numpy学习打卡task02
TUhjnbcbe - 2023/4/8 9:51:00
白癜风口服什么药品 http://m.39.net/baidianfeng/a_4861814.html

今天带来的是Datawhale零基础入门Numpy的学习打卡笔记第二部分—随机抽样。

本文大致介绍了随机数的相关背景知识。

本文素材来自网络及datawhale。

随机数生成

随机数生成(RNG)是指通过一个设备,生成一个比随机事件更好的无法合理预测的数字或符号序列的过程。随机数生成器可以是真正的硬件随机数生成器(HRNGS),它生成的随机数是某种物理环境属性的当前值的函数,这种物理环境属性是以实际上不可能建模的方式不断变化的;

也可以是伪随机数生成器(PRNGS),它生成的数看起来是随机的,但实际上是确定的,如果PRNG的状态是已知的,就可以重现。

本文中的numpy.random就是伪随机数生成器。

对随机性的各种应用导致了几种不同的随机数据生成方法的发展,其中有些方法自古以来就存在,在其行列中,有众所周知的经典例子,包括掷骰子、掷硬币、扑克牌的洗牌、《易经》中木签的使用(用于占卜),以及其他无数的技术。由于这些技术的机械性质,产生大量足够随机的数字(在统计学中很重要)需要大量的工作和时间。因此,结果有时会被收集起来,并以随机数表的形式分发。

存在着几种伪随机数生成的计算方法。所有的方法都达不到真正随机性的目标,尽管它们可能以不同的成功满足一些随机性的统计测试,这些测试的目的是为了衡量它们的结果有多不可预测(也就是说,它们的模式在多大程度上是可辨别的)。这通常使它们无法用于密码学等应用。然而,也存在着精心设计的密码学上安全的伪随机数发生器(CSPRNGS),它们具有专门设计用于密码学的特殊功能。

随机数生成器在*博、统计抽样、计算机模拟、密码学、完全随机化设计以及其他需要产生不可预测结果的领域都有应用。一般来说,在以不可预测性为首要特征的应用中,例如在安全应用中,在可行的情况下,硬件发生器通常优于伪随机算法。

随机数发生器在开发蒙特卡洛方法模拟时非常有用,因为可以从同一个随机种子开始再次运行相同的随机数序列,从而方便调试。它们也被用于密码学中,只要种子是秘密的,发送方和接收方可以自动生成同一组数字作为密钥使用。

伪随机数的生成是计算机编程中一项重要而常见的任务。虽然密码学和某些数字算法需要非常高的表观随机性,但许多其他操作只需要适度的不可预知性。一些简单的例子可能是向用户提供每日随机报价,或决定计算机控制的对手在计算机游戏中的移动方式。较弱形式的随机性被用于哈希算法和创建摊牌搜索和排序算法。

一些乍看起来适合随机化的应用,其实并不那么简单。例如,一个为背景音乐系统随机选择音乐曲目的系统,必须只出现随机的音乐,甚至可能有控制音乐选择的方法:一个真正的随机系统不会限制同一项目连续出现两三次。

有两种主要方法用于生成随机数。第一种方法是测量一些预期是随机的物理现象,然后对测量过程中可能出现的偏差进行补偿。示例来源包括测量大气噪声、热噪声和其他外部电磁和量子现象。例如,在短时间内测量的宇宙背景辐射或放射性衰变代表了自然熵的来源。

从自然源中获取熵的速度取决于被测量的基本物理现象。因此,自然产生的真熵源被称为阻塞--它们受到速率限制,直到收获足够的熵来满足需求。在一些类似Unix的系统上,包括大多数Linux发行版,伪设备文件/dev/random会阻塞,直到从环境中收获足够的熵为止。由于这种阻塞行为,从/dev/random进行大量的批量读取,例如用随机位填充硬盘驱动器,在使用这种类型的熵源的系统上往往会很慢。

第二种方法使用的计算算法可以产生长序列的明显随机结果,实际上这些结果完全由一个较短的初始值决定,即所谓的种子值或密钥。因此,如果种子值已知,整个看似随机的序列都可以重现。这种类型的随机数发生器通常被称为伪随机数发生器。这种类型的生成器通常不依赖于自然产生的熵的来源,尽管它可能会周期性地被自然来源的种子。这种生成器类型是非阻塞的,因此它们不受外部事件的速率限制,使得大批量读取成为可能。

一些系统采用混合方法,在可用时提供从自然源收获的随机性,并回落到周期性重新播种的基于软件的加密安全伪随机数发生器(CSPRNGs)。当所需的随机性读取速率超过自然采集方法跟上需求的能力时,回落就会发生。这种方法避免了基于慢速和纯环境方法的随机数发生器的限速阻塞行为。

虽然完全基于确定性逻辑的伪随机数发生器永远不能被视为最纯粹意义上的真正随机数源,但在实践中,即使对于要求苛刻的安全关键型应用,它们通常也是足够的。事实上,精心设计和实现的伪随机数生成器可以被认证为安全关键型密码学目的,yarrow算法和fortuna就是如此。前者是FreeBSD、AIX、OSX、NetBSD等系统上/dev/random熵源的基础。OpenBSD使用了一种称为arc4random的伪随机数算法。

年10月,有学者指出,与经典的伪随机数发生器(PRNGs)方法相比,将量子随机数发生器(QRNGs)引入到包括神经网络和卷积神经网络在内的机器学习模型中,用于随机初始权重分布和随机森林的拆分过程,对其能力产生了深远的影响。

均匀分布在0和1之间的随机数可以通过所需分布的逆累积分布函数(CDF)来产生任何所需分布的随机数(见逆变换抽样)。逆CDF也被称为分位函数。要生成一对统计上独立的标准正态分布随机数(x,y),可以先生成极坐标(r,θ),其中r2~χ22和θ~UNIFORM(0,2π)(见Box-Muller变换)。

一些0~1的RNG包括0但不包括1,而另一些RNG则包括或不包括两者。

多个独立RNG的输出可以结合起来(例如,使用位宽XOR操作),以提供一个组合的RNG,至少与使用的最佳RNG一样好。这被称为软件白化。

计算型随机数发生器和硬件型随机数发生器有时会结合起来,以体现两种随机数发生器的优点。计算型随机数发生器通常可以比物理发生器更快地生成伪随机数,而物理发生器可以生成真正的随机性。

以下站点提供了随机数样本

SOCR资源网页包含一些使用Java小程序生成随机数的实践互动活动和演示。ANU的量子光学小组从量子真空中生成随机数。随机数的样本可以在他们的量子随机数生成器研究页面上获得。Random.org提供的随机数来源于大气噪声的随机性。RuerBokovi研究所的量子随机比特生成器服务从半导体中光子发射的量子过程中收获随机性。他们供给了多种获取数据的方式,包括几种编程语言的库。太原理工大学的小组从混沌激光中生成随机数。在他们的物理随机数生成器服务中可以获得随机数的样本。

后门

也有理论认为,硬件RNG可以被秘密修改,使其熵比所述的要小,这将使使用硬件RNG的加密容易受到攻击。例如,对于Linux中的随机数生成,人们认为使用英特尔的RDRAND硬件RNG而不在RDRAND输出中混入其他熵源以抵消硬件RNG中的任何后门是不可接受的,尤其是在NSABullrun程序被揭露之后。

年,美国的一次抽奖活动被多州彩票协会的信息安全主管操纵,他在日常维护时偷偷在多州彩票协会的安全RNG计算机上安装了后门恶意软件,在黑客攻击过程中,该男子通过一年中几次预测正确的号码,共赢得了万美元的奖金。

地址空间布局随机化(ASLR)是针对排锤漏洞和相关攻击内存芯片物理硬件的缓解措施,截至年初,VUSec发现其不足之处。随机数算法如果基于硬件中实现的移位寄存器,在足够大的p值下是可以预测的,并且可以通过足够的处理能力进行反向工程(BruteForceHack)。这也间接意味着,使用这种方法的恶意软件如果经过编码,既可以在GPU上运行,也可以在CPU上运行,甚至可以利用GPU破解CPU本身的ASLR。

Numpy.random()

参考

1
查看完整版本: Numpy学习打卡task02