我已经实现了批量和随机梯度下降。不过,我遇到了一些问题。这是随机规则:
1 to m {
theta(j):=theta(j)-step*derivative (for all j)
} 我的问题是,即使成本函数变得越来越小,测试表明它并不好。如果我稍微改变一下步长,改变迭代次数,代价函数的值会大一点,但结果是好的。这是一种过度的“症状”吗?我如何知道哪一个是正确的?:)
正如我所说的,即使成本函数更加最小化,测试表明它也不是很好。
发布于 2012-02-07 14:51:08
梯度下降是一种最小化函数的局部搜索方法。当它在参数空间中达到局部最小值时,它将无法继续前进。这使得梯度下降(和其他局部方法)容易陷入局部最小值,而不是达到全局最小值。对于您正在尝试实现的目标,局部最小值可能是也可能不是很好的解决方案。期望的结果将取决于您试图最小化的函数。
特别是,高维NP-完全问题可能很棘手。它们通常有许多指数级的局部最优,其中许多在成本方面几乎与全局最优一样好,但参数值与全局最优的参数值正交。这些都是困难的问题:你通常不会期望能够找到全局最优值,而只是寻找一个足够好的局部最小值。这些也是相关的问题:许多有趣的问题都具有这些属性。
我建议先用一个简单的问题来测试你的梯度下降实现。您可以尝试在多项式中找到最小值。由于这是一个单参数问题,您可以沿着多项式的曲线绘制参数值的进度。你应该能够看到是否有严重的错误,还可以观察到搜索是如何陷入局部最小值的。您还应该能够看到,初始参数选择可能非常重要。
为了处理更难的问题,你可以修改你的算法来帮助它摆脱局部极小值。以下是一些常见的方法:
我不会推荐使用哪种方法。相反,我会建议做一些研究,看看别人对你正在做的事情的相关问题做了什么。如果这纯粹是一种学习体验,那么动量可能是最容易上手的。
发布于 2012-02-07 03:56:52
可能发生的事情有很多:
step可能是一个糟糕的选择我会尝试增加游程长度,并使用各种步长绘制游程。步子越小,呃步子越大,避免问题的机会就越大。
https://stackoverflow.com/questions/9163801
复制相似问题