【问题标题】:Randomness in Artificial Intelligence & Machine Learning人工智能和机器学习中的随机性
【发布时间】:2011-08-19 00:03:36
【问题描述】:
在从事 AI 和 ML 的 2 个项目时,我想到了这个问题。如果我正在构建一个模型(例如分类神经网络、K-NN、.. 等)并且该模型使用一些包含随机性的函数,该怎么办。如果我不修复种子,那么每次在相同的训练数据上运行算法时,我都会得到不同的准确度结果。但是,如果我修复它,那么其他一些设置可能会产生更好的结果。
平均一组准确度是否足以说明该模型的准确度为 xx % ?
我不确定这是否适合提出此类问题/展开此类讨论。
【问题讨论】:
标签:
artificial-intelligence
machine-learning
data-mining
classification
【解决方案1】:
我从你的问题中得到了概括的答案,
我想准确度总是多次运行的平均准确度和标准偏差。因此,如果您考虑使用与随机生成器不同的种子获得的准确性,您实际上是否没有考虑更大范围的输入(这应该是一件好事)。但是您必须考虑标准偏差才能考虑准确性。还是我把你的问题完全弄错了?
【解决方案2】:
简单的答案,是的,您将其随机化并使用统计数据来显示准确性。然而,仅仅平均几次运行是不够的。您至少还需要一些关于可变性的概念。重要的是要知道“70%”准确度是指“100 次运行中的每一次 70% 准确”还是“100% 准确一次和 40% 准确一次”。
如果您只是想尝试一下并说服自己某些算法有效,那么您可以运行它大约 30 次,然后查看平均值和标准差,然后就结束了。如果您要让其他人相信它有效,您需要研究如何进行更正式的假设检验。
【解决方案3】:
随机技术通常用于搜索无法进行详尽搜索的非常大的解决方案空间。因此,您将尝试以尽可能均匀的分布对大量样本点进行迭代几乎是不可避免的。如其他地方所述,基本统计技术将帮助您确定您的样本何时足够大以代表整个空间。
要测试准确性,最好留出一部分输入模式并避免针对这些模式进行训练(假设您正在从数据集中学习)。然后您可以使用该集合来测试您的算法是否正确地学习了底层模式,或者它是否只是记住了示例。
要考虑的另一件事是随机数生成器的随机性。标准随机数生成器(例如来自<stdlib.h> 的rand)在许多情况下可能达不到要求,因此请四处寻找更稳健的算法。
【解决方案4】:
我相信cross-validation 可能会给出您的问题:对分类性能的平均估计,因此更可靠。它不包含随机性,除了最初排列数据集。变化来自于选择不同的训练/测试分割。
【解决方案5】:
有些模型自然依赖于随机性(例如,随机森林)和仅使用随机性作为探索空间的一部分的模型(例如,神经网络值的初始化),但实际上具有定义明确的确定性, 目标函数。
对于第一种情况,您需要使用多个种子并报告平均准确率,标准。偏差,以及您获得的最小值。如果您有办法重现这一点通常会很好,因此只需使用多个固定种子即可。
对于第二种情况,您始终可以仅根据训练数据判断哪个运行最好(尽管它实际上可能不是为您提供最佳测试准确度的那个!)。因此,如果您有时间,最好说 10 次运行,然后评估具有最佳训练错误(或验证错误,只是从不评估测试 用于此决定)。您可以升级并进行多次多次运行并获得标准偏差。但是,如果您发现这很重要,则可能意味着您没有尝试足够的初始化,或者您没有为数据使用正确的模型。