为什么数值解比解析解更受欢迎?

机器算法验证 优化
2022-03-18 06:46:40

我只是在学习优化,以及解析解和数值解之间的区别。假设有一个成本函数f(x),我们想找到x最小化它的值。在分析解决方案中,我们将对 进行微分x,即找到df(x)/dx而在数值解中,我们会尝试 的值x,并查看我们需要改变哪个方向x才能朝着解(梯度下降)移动。

在我看来,分析解决方案始终是首选,因为它可以为您提供准确的答案。您不会陷入局部最小值,并且可以确定您的解决方案是正确的。那么为什么我们不总是使用分析解决方案呢?

我知道数值解决方案使事情变得更容易,因为您不必手动计算解析解决方案,但在我看来,手动解决问题以获得精确答案比通过计算来获得近似答案更可取。有人可以帮我解决这个问题吗?谢谢!

3个回答

您的问题很有趣,因为它通常是优化的起点。

最好从一个关于解析解存在的具体例子开始。如果您查看 2 次标准多项式,你有一个函数零点的公式,这是一个解析解。如果您有一个 5 阶或更高阶的多项式,则不存在这样的公式f(x)=ax2+bx+c

这当然不是像最小化或最大化函数那样的优化问题,但是当您找到导数为零的位置时,您实际上是在寻找函数的零,即导数。

所以似乎你不能总是用笔和纸来解决问题。这也取决于问题的规模。有时您需要估计数十亿个参数,而人类要制定分析解决方案甚至找出它是否存在是不可行的。

在普通最小二乘或拟合线性模型的情况下,存在解析解。但是很容易稍微改变模型,以至于不存在这样的解决方案(至少我们不知道)。套索就是一个例子

因此,使用数值方法是完全合理的,因为可能不存在解析解,或者无法计算出这样的解。

有很多原因通常围绕一个主要考虑因素:方便。

通常,正如您所提到的,插入数值解比解析要容易得多。比如说,你有一个函数如果它是一个复杂的表达式,那么获取并对其进行编码可能会很麻烦且容易出错。我的意思是拼写错误,而不是数字错误。在多变量情况下,这更像是一个问题,想象一下对所有 Hessians 进行编码!我认为在分析 Hessians 中引入错误的可能性非常高。f(x1,x2,,xn)f

因此,使用分析表达式的好处可能非常微不足道,尤其是在多变量分析中。所以,在许多情况下,你经历了所有这些麻烦,基本上得到了与数值近似相同的结果。

事实上,我只在绝对必要时才为导数编写解析表达式。仅当数值导数的精度要差得多时,通常才会出现这种情况。

速度通常不是因素。数值导数比解析导数慢的情况很少见。

我只关注数值导数,因为只要存在,它们总是解析存在。在其他问题中,例如求解方程、积分、优化 - 解析解的问题在于它们并不总是存在或很难找到,即可行性。f(.)

我将在这里添加另一个观点,它考虑基于二阶 Hessian 的方法。通常,为了加快收敛速度​​,基于梯度的求解器会求助于线搜索技术,例如 Armijo、L-BFGS 等。这些通常比简单的梯度下降更受欢迎(如果我们现在不训练深度网络)。L-BFGS 系列方法选择提出逆 Hessian 矩阵的正定近似(参见BFGS 递归)。当然,只要有可能,我们喜欢提供一个解析计算的 Hessian,它的逆必须是正定的。然而,对于大量问题,这个数量是不确定的,因此现成的优化器无法处理这种情况。莫雷和索伦森信任域步骤等方法,但是远没有被广泛接受的解决方案。

这就是原因,例如,成熟的优化器(如Ceres Solver)不允许解析 Hessians,而是更喜欢数值近似的优化器。