我是机器学习和一般人工智能的新手(但有 20 多年的编程经验)。我想知道机器学习是否是一种很好的通用方法来找到随机数生成器的种子。
假设我有一个包含 2000 个数字的列表。是否有机器学习算法可以正确猜测下一个数字?
为了清楚起见,由于有许多随机数生成器算法,我说rand
的srand
是stdlib。
我是机器学习和一般人工智能的新手(但有 20 多年的编程经验)。我想知道机器学习是否是一种很好的通用方法来找到随机数生成器的种子。
假设我有一个包含 2000 个数字的列表。是否有机器学习算法可以正确猜测下一个数字?
为了清楚起见,由于有许多随机数生成器算法,我说rand
的srand
是stdlib。
机器学习不适合这个问题。
rand()
即使是不适合在模拟器中使用的简单PRNG (例如. 剩下的 10% 可能会以专业的方式做事,例如保存所有数据并选择最佳选项。
从理论上讲,大多数 ML 方法最终都会解决 PRNG,但这通常涉及多次迭代 PRNG 的整个状态空间。PRNG 的内部状态、下一个状态和输出之间的统计关系在设计上是复杂的,因此这是唯一的“黑盒”统计方法,这对于随机数生成器的任何实际实现显然是不可行的,即至少会有现代机器上的状态。也许较旧的 16 位 PRNG,具有单个状态值可能是易于处理的。
一个足够先进的 AI 可以尝试根据纯粹的数据对输出进行逻辑逆向工程,并研究 RNG 的工作原理对于当前的 ML 技术来说太先进了。
这留下了可能尝试构建类似 RNG 的方法,例如遗传编程(将基因组转换为可执行代码)。这种方法的问题在于,RNG 没有启发式方法来衡量其输出与目标的接近程度。生成的 RNG 设计中的一点状态差异或任何微小但有意义的变化都会产生与目标输出没有任何相似之处的输出。如果没有这样的度量,你就没有适应度函数,也无法使用 AI 的许多离散优化工具尝试引导搜索。
相反,“破坏” PRNG 的常用方法是分析算法。了解许多非加密 PRNG 的算法可以允许预测生成器的内部状态,有时只需几个步骤(对于非常简单的线性同余生成器,可能只是一个步骤!)。