nic*_*ckb 11 machine-learning gradient-descent
我试图使用梯度下降在N个参数中找到函数的最小值.但是我想这样做,同时将参数的绝对值之和限制为1(或<= 1,无关紧要).由于这个原因,我使用了拉格朗日乘数的方法,所以如果我的函数是f(x),我将最小化f(x)+ lambda*(g(x)-1)其中g(x)是平滑近似值参数绝对值的总和.
根据我的理解,当g(x)= 1时,此函数的梯度将仅为0,因此找到局部最小值的方法应该找到我的条件也满足的最小函数.问题是这个加法我的函数是无界的,因此Gradient Descent只是找到越来越大的lambdas,它们具有越来越大的参数(绝对值)并且永远不会收敛.
目前我正在使用CG的python(scipy)实现,所以我真的更喜欢不要求我自己重新编写/调整CG代码但使用现有方法的建议.
Chr*_*lor 24
问题在于,当使用拉格朗日乘数时,临界点不会出现在拉格朗日的局部最小值 - 它们发生在鞍点处.由于梯度下降算法旨在找到局部最小值,因此当您给出约束问题时,它无法收敛.
通常有三种解决方案:
就个人而言,我会选择第三种方法,如果很难得到它的解析表达式,那么在数值上找到拉格朗日梯度的平方渐变.
另外,你在问题中没有说清楚 - 你使用的是梯度下降还是CG(共轭渐变)?
小智 7
在1987 年的论文“约束微分优化”中,Platt 和 Barr 以一种非常简单又简单的方式解决了这个问题。他们将他们的方法称为基本微分乘子法(BDMM)。
该方法声称对于拉格朗日: L(x, b) = f(x) + bg(x)
通过对 x 进行梯度下降,同时对 b 进行梯度“上升”,您最终将收敛到 L(x, b) 的驻点,这是约束 g(x)=0 下 f(x) 的局部最小值。还可以结合惩罚方法来使收敛更快、更稳定(作者称之为改进的微分乘子法)。
一般来说,只需反转 b 的梯度即可。
我已经在几个简单的案例中尝试过它并且它有效,尽管在读完那篇论文后我不太明白为什么。
可能为时已晚,无法对OP有所帮助,但在相同情况下可能对其他人有用:
绝对值约束的问题通常可以通过添加一些"辅助"变量重新表述为仅具有线性约束的等效问题.
例如,考虑问题1:
查找(x1,x2)使f(x1,x2)最小化受非线性约束| x1 | + | x2 | <= 10的影响.
有一个线性约束版本,问题2:
查找(x1,x2,x3,x4)使f(x1,x2)最小化,但受以下线性约束的影响:
注意:
因此,找到问题2的最优值将为问题1提供最优,反之亦然.
| 归档时间: |
|
| 查看次数: |
12780 次 |
| 最近记录: |