自动区分速度有多快?

时间:2019-07-08 13:19:07

标签: automatic-differentiation

尽管在线上似乎有很多参考文献将自动微分方法和框架相互比较,但我似乎找不到关于如何期望自动微分与手写派生评估进行比较的信息。

我的特殊情况:我正在执行标量成本函数的梯度下降,该函数具有数千个变量和显着(> 99%)的稀疏性。我有一个C ++函数来计算这笔费用。我还手动派生并实现了一些函数来计算渐变和Hessian。 (成本函数及其导数没有任何方式进行调整,它们只是一个简单的实现。)一次典型的下降到最少需要大约十秒钟。

我想更轻松地使用不同的成本函数,并且使用AD似乎是一种进行的好方法。我使用CppAD来自动评估梯度和Hessian。这些值与我的手动导数函数中的值完全相同。但是使用AD,典型的下降时间大约需要5分钟。

我对AD速度慢了多少感到惊讶,但后来意识到我并不真正知道它应该有多快。我对“我如何加快计算速度?”的关注不如“我应该期待什么?”

与手写衍生物相比,应该变慢多少?一阶和二阶导数怎么样?

0 个答案:

没有答案