Optimization 参数空间受限时,如何运行梯度下降算法?

Optimization 参数空间受限时,如何运行梯度下降算法?,optimization,math,function,gradient,Optimization,Math,Function,Gradient,我想用一个参数最大化函数 所以我运行梯度下降(或者,实际上是上升):我从一个初始参数开始,不断添加梯度(乘以一些越来越小的学习率因子),在给定新参数的情况下重新计算梯度,依此类推,直到收敛 但有一个问题:我的参数必须保持正值,因此在不了解更多问题的情况下,它不应该变成,很难给出具体的建议。梯度上升算法可能并不特别适合函数空间。然而,考虑到这正是你所拥有的,这里有一个调整会有所帮助 你正在跟随你认为是一个上升的梯度。但是当你沿着梯度的方向前进时,你会发现你掉进了一个负值的坑里。这意味着附近有一个局

我想用一个参数最大化函数

所以我运行梯度下降(或者,实际上是上升):我从一个初始参数开始,不断添加梯度(乘以一些越来越小的学习率因子),在给定新参数的情况下重新计算梯度,依此类推,直到收敛


但有一个问题:我的参数必须保持正值,因此在不了解更多问题的情况下,它不应该变成,很难给出具体的建议。梯度上升算法可能并不特别适合函数空间。然而,考虑到这正是你所拥有的,这里有一个调整会有所帮助

你正在跟随你认为是一个上升的梯度。但是当你沿着梯度的方向前进时,你会发现你掉进了一个负值的坑里。这意味着附近有一个局部最大值,但也有一个非常尖锐的负梯度悬崖。显而易见的解决办法是回到你以前的位置,并采取较小的步骤(例如一半的大小)。如果你仍然跌倒,重复一个更小的步骤。这将迭代,直到您在悬崖边缘找到局部最大值


问题是,不能保证你的局部最大值实际上是全局的(除非你对你的函数知道的比你分享的更多)。这是原始梯度上升的主要限制-它总是固定在第一个局部最大值上并收敛到它。如果您不想切换到更健壮的算法,一种简单的方法可能会有所帮助,那就是运行n次代码迭代,每次都从函数空间中的随机位置开始,并保持总体上找到的最佳最大值。这种Monte Carlo方法增加了您偶然发现全局最大值的可能性,代价是将您的运行时间增加了一个因数n。这一方法的有效性取决于目标函数的“凹凸性”。

限制参数为正的一个简单技巧是根据对数重新参数化问题(确保适当更改梯度)。当然,也有可能最优值会随着这种变换而移动,并且搜索不会收敛

  • 每次更新参数时,检查它是否为负值,如果为负值,则将其钳制为零
  • 如果钳制到零是不可接受的,尝试添加一个“日志屏障”(谷歌it)。基本上,它会在目标函数中添加一道平滑的“软”墙(并修改渐变),使其远离您不希望它进入的区域。然后,通过强化墙使其更加无限垂直,反复运行优化,但从之前找到的解决方案开始。在极限条件下(实际上只需要几次迭代),您要解决的问题与具有硬约束的原始问题相同

  • 在每个步骤中,将参数约束为正。这是(简而言之)你可能想在谷歌上搜索的投影梯度法。

    根据你想做多少思考和工作,我有三条建议

    首先,在梯度下降/上升中,你每次移动的梯度乘以某个因子,你称之为“学习率因子”。如果,正如你所描述的,这个移动导致x变为负值,有两种自然的解释:要么梯度太大,要么学习率因子太大。既然你不能控制梯度,就用第二种解释吧。检查您的移动是否会导致x变为负值,如果是,请将学习率因子减半,然后重试

    其次,为了详细说明Aniko的答案,让x作为参数,f(x)作为函数。然后定义一个新函数g(x)=f(e^x),注意,虽然f的域是(0,无穷大),但g的域是(-无穷大,无穷大)。所以g不能承受f所承受的问题。使用梯度下降法查找最大化g的值x_0。然后e^(x_0)为正,使f最大化。要在g上应用梯度下降法,你需要它的导数,根据链式规则,它是f'(e^x)*e^x

    第三,听起来您只是在尝试最大化一个函数,而不是编写一般的最大化例程。你可以考虑搁置梯度下降,剪裁。
    优化特定函数特性的方法。我们需要更多地了解f的预期行为才能帮助您做到这一点。

    您在这里得到了很好的答案。重新参数化是我的建议。另外,您是否考虑过其他搜索方法,如?一旦你完成了看起来吓人的数学运算,它实际上非常简单,它会给你一个标准误差和一个最佳值。

    只要使用就可以了。如果只有一个参数,它是稳定、快速的,并且是正确的。这就是
    R
    函数
    optimize
    所使用的。该链接还包含一个简单的C++实现。是的,您可以给它设置最小和最大参数值限制。

    metropolis hastings距离原始问题还有光年。@Alexandre:第一句话说目标是最大化函数。通过约束提议分布,MH可以很容易地被约束以避免禁止区域。梯度可能会产生噪音和问题,特别是如果它们是通过有限差分计算的,或者如果函数几乎是平坦的。MCMC方法(和相关的随机梯度方法)用于其他方法都失败的情况。没有迹象表明原始问题需要非确定性方法的较差收敛性。这种“钳制”有正式名称吗?