如何训练神经网络以给出随机事件的概率?

人工智能 神经网络 机器学习
2021-11-01 12:08:21

假设我有一个可调节的加载骰子,我想训练一个神经网络,根据加载骰子的设置,给我每张脸的概率。

我无法确定它在单个骰子上的表现,因为它没有给我一个概率。

我可以批量处理很多卷来计算概率并将这批用作单独的测试用例,但我的问题不允许这样做(假设设置很复杂并且在每个卷之间是随机的)。

我有两个想法:

  1. 将其训练为输出置信度的分类问题,并希望置信度反映实际概率。有时网络会输出正确的概率并通过测试,但平均而言,它会倾向于正确的概率。然而,它可能需要大量的训练和数据。
  2. 批量随机滚动并比较测量结果与预测的平均值/中值/标准偏差。它可以工作,但我不知道好的批量大小。

谢谢你。

3个回答

起点是对于公平掷出的公平骰子,p(n) 是 1/n,其中 n 是边数。

你说两个

输入中有太多变量(最多 40 个维度,值范围为 1-100),我不知道这些属性如何关联,并且经验方法需要太多数据。

看来这个问题有2个解决方案:

  1. 不要使用神经网络并创建“标准”统计模型。可能因为你说:

我知道有一些基本规则可以简化很多问题(即减少输入的实际维数)

  1. 使用神经网络(最后使用 softmax) - 获得公平的骰子;有了足够的训练数据,分类器应该以 1/n 作为公平骰子的近似函数。您提到的其他 40 个维度/设置是输入。我认为具有密集层的“基本”神经网络只能用于您的任务。

神经网络不是你想要的。您的事件数量有限,并且从一些您想要恢复的未知分布中提取。

在这种情况下,只需使用经验概率p(eventi)=#eventitotal events给定足够的平局将收敛到真实概率。

这种方法:

将其训练为输出置信度的分类问题,并希望置信度反映实际概率。有时网络会输出正确的概率并通过测试,但平均而言,它会倾向于正确的概率。

将有一些限制。如果您使用具有 softmax 激活和多类日志损失的分类器

L(y^,y)=ylog(y^)

在哪里y^是作为向量的网络输出,并且y是单个样本的实际输出。您的输入应该是模具的设置。

优化此损失将收敛于每个离散输出的近似概率。你可以用一些简单的例子来证明这一点——例如,如果你用一个输入训练一个网络——来自经典 D&D 骰子组的单热编码骰子类型,加上在正确频率下故意选择的不同结果的例子,你会最终得到一个大致预测的分类器p=0.25对于 d4 和 1,2,3,4 的结果p=0.125对于 1,2,3,4,5,6,7,8 结果为 d8

所以它在数学上起作用。它是否适合您的情况取决于细节。您需要足够的数据样本来涵盖每个设置下的结果分布,以及该分布如何随设置而变化的任何复杂性。在想要非常准确地预测复杂空间内的概率的情况下,您将需要大量样本。您应该能够通过尝试不同级别的正则化来找到准确性和泛化之间的折衷 - 这将是必要的,因为对输入/输出样本对的过度拟合对于在此数据上训练的神经网络来说将是一个严重的问题.

帮助分类器学习概率的一件事是始终采用相同设置的一些样本 - 例如,每个具有相同设置的 10 或 100 或 1000 个样本 - 这应该保证网络不能简单地收敛以预测高p如所见,单个输出的值,因为它将有反例可供使用。

您提到您有 40 个维度的设置。这是否是一个问题将取决于概率分布如何根据这些设置而变化。但是,您至少应该考虑数百万个样本进行训练,或者可能是一个快速的按需生成器,每秒可以生成 1000 个新样本进行训练。

您可以通过使用一些固定(尚未见过的)设置构建直方图并与该设置的概率的 NN 预测进行比较来测试准确性。即使获得准确的测试结果也可能需要数千个样本。

然而,它可能需要大量的训练和数据。

如果你在这里无法获得非常大的训练集,那么纯粹的统计“黑盒”方法可能是不可行的,无论你使用的是神经网络,还是更原始的分析。神经网络添加的是不同设置值之间的平滑插值,作为一种近似形式。这对于您的问题似乎是可取的,因为您永远不会在宇宙的生命周期中完全探索 100 个值的 40 个维度 - 但您需要有信心,在大多数情况下,设置的微小变化等同于概率分布的微小变化。

可以在输入空间中进行一两次主要变化,但如果分布取决于输入变量的某些密码原语或类似的复杂高频(空间上)和高幅度,则无法使用统计数据获得近似值。

统计方法的替代方法是通过分析找到某种方法来打破这个黑匣子。目前没有任何人工智能系统可以做到这一点,所以你需要依靠人类的聪明才智。