【问题标题】:Scipy.Optimize.Minimize inefficient? Double calls to cost/gradient functionScipy.Optimize.Minimize 效率低下?双重调用成本/梯度函数
【发布时间】:2019-10-09 16:52:03
【问题描述】:

我对使用 SciPy 比较陌生;我目前正在使用它来最小化多层感知器模型的成本函数。我不能使用 scikit-learn,因为我需要能够设置系数(它们在 MLPClassifer 中是只读的)并向任何和所有参数添加随机排列和噪声。我还没有完成实现,但是我对最小化函数所需的参数感到困惑。

例如,我编写了一个函数来计算函数的“成本”(最小化能量),它同时计算梯度。这没什么特别的,因为它是常见的做法。然而,当调用 scipy.optimize.minimize 时,它​​要求两个不同的函数:一个返回要最小化的标量(即,在我的例子中的成本),另一个计算当前状态的梯度。示例:

j,grad = myCostFunction(X,y)

除非我弄错了,否则它似乎需要调用我的函数两次,每次调用都需要指定返回成本或梯度,如下所示:

opt = scipy.optimize.minimize(fun=myJFunction, jac=myGradFunction, args = args,...)

这不是浪费计算时间吗?我的数据集将包含超过 100 万个样本和 10 个特征,因此减少冗余计算将是首选,因为我将为我的项目训练和重新训练这个东西数万次。

另一个混淆点是 args 输入。参数是这样传递的吗:

# This is what I expect happens
myJFunction(x0,*args)
myGradFunction(x0,*args)

或者像这样:

# This is what I wish it did
myJFunction(x0,arg0,arg1,arg2)
myGradFunction(x0,arg3,arg4,arg5)

提前致谢!

【问题讨论】:

  • 是的,计算jac 是有成本的,但如果它不必多次调用fun 可能是值得的。使用渐变可以让它采取更大的步骤。这些权衡取舍已经在理论层面和编码层面进行了研究。
  • 这两个定义做同样的事情。只要您使用 3 个 args 元素,fun(x0, *args)fun(x0, a,b,c) 都可以工作。可以使用a,b,c = args解包*args参数。
  • @hpaulj 感谢您的回复。澄清一下,你是说如果我指定jac 它不会经常调用fun?我以为每次迭代都会调用两者。如果是这样的话,那我就不必像我想的那样担心了。我想仔细阅读源代码将有助于更清楚地说明问题。
  • 每次迭代都必须调用它,但是,它可能不必做那么多迭代。您可能需要使用参数来找出最适合您的问题的组合。

标签: python scipy scipy-optimize-minimize


【解决方案1】:

在做了一些实验和搜索之后,我找到了自己问题的答案。

虽然我不能确定 scipy.optimize.minimize 函数,但使用其他优化函数(例如,scipy.optimize.fmin_tnc)明确指出可调用函数 func 可以(1)返回能量和梯度,(2)返回能量并为该参数指定梯度函数fprime(较慢),或(3)仅返回能量并让函数通过扰动估计梯度(慢得多)。

在此处查看文档:https://docs.scipy.org/doc/scipy-0.14.0/reference/generated/scipy.optimize.fmin_tnc.html

我很高兴看到我只能使用一个函数来返回两个参数。我认为minimize 函数的情况相同,但我尚未对其进行测试以确定(参见编辑 1)

至于我的第二个问题,如果指定两个不同的函数,*args 参数传递给两个函数是一样的;您不能为两者指定单独的参数。

编辑 1: 详细阅读minimize 文档,如果参数jac 设置为True,则优化器假定func 返回能量和梯度。仔细阅读文档似乎很有帮助。

【讨论】:

  • 您列出的文档版本是旧版本,您不太可能使用该版本的 scipy。如果您运行import scipy; scipy.__version__,您将看到哪个版本并可以导航到相应版本的文档。我认为 1.4.x 是最新的,虽然 1.5.x 应该很快就会发布。
猜你喜欢
  • 2019-04-08
  • 2015-05-04
  • 2018-05-14
  • 2021-05-19
  • 2018-10-25
  • 1970-01-01
  • 1970-01-01
  • 2021-11-07
  • 2015-12-23
相关资源
最近更新 更多