找到返回最大输出的最佳输入组合

人工智能 机器学习 回归
2021-10-26 03:25:24

我目前正在解决一个问题,现在被困在实施其中一个步骤。这是一个简单的尝试来解释我目前面临的问题,这是我的目标是在 python 的回归模拟中实现。

假设我为我的数据拟合了一个非线性模型。现在,我想在指定范围内找到返回最高结果的输入组合。当我使用二次函数或只有几个输入时,这个任务非常简单。但是,当尝试将相同的逻辑应用于更复杂的模型时,就会出现问题。假设我有 9 个变量作为输入,我将不得不测试所有可能的组合,如果你想覆盖一个具有多个间隔的范围,那么通过使用 meshgrid 进行计算在计算上是不可行的。

那么,我的问题来了,有没有这样一种方法可以避免必须通过这个计算成本高的过程来实现在给定范围内定义的输入组合,从而返回最佳输出?

1个回答

如果您的模型是基于梯度的,例如神经网络,那么也可以使用梯度方法来驱动虚拟输入:

  • 将所有网络权重冻结到经过训练的版本

  • 定义一个损失函数,描述您希望输出(或任何内部度量)如何表现。例如,为了最大化输出,损失函数可以简单地是输出的负值,假设您稍后将执行梯度下降。一些库还将支持梯度上升以最大化功能。

  • 将您的输入定义为可以优化的变量并实例化优化器(详细信息会因您的库而异)

  • 从随机或最佳猜测输入开始,并迭代正常的训练程序(前馈然后反向传播)以获得越来越好的输入

这基本上就是 Deep Dream 和 Style Transfer 算法的工作原理——不同的细节是损失函数的定义。这也是一种对已知模型进行对抗性攻击的方法,例如拍摄汽车的照片,对其进行修改以使分类器返回它是鸵鸟(虽然它在人类看来仍然像汽车)。

不能保证找到给定范围的绝对最佳输入,但是当有许多维度时,应该比网格网格更快地找到局部最小值或最大值的良好近似值。您可以将这个想法与粗网格或随机搜索起点相结合,以便更好地在输入范围限制内找到最佳结果。

您应该记住,您发现的理想输入只会与您训练的模型所允许的一样准确。如果您发现模型中的输入最大化,即使用远离任何训练示例的输入,那么实际上这些输入可能不会得到模型预测的结果。具有许多自由度的统计模型通常可以在数据点之间进行插值,但在推断超出已观察到的数据时非常糟糕。