偏导数是否曾经以反向模式计算?



我知道 openMDAO 可以在正向或反向模式下计算模型的总导数,但偏导数总是在正向模式下计算吗?

例如,我有一个具有 400 个输入和 4 个输出的组件。显然,这是反向模式求解的候选方案。如果我只是declare_partials(['*'], ['*'], method=fd),openMDAO会尝试以反向模式解决这个问题吗?

反向模式近似部分不起作用。 执行有限差分时,将输入增加少量,然后调用compute来计算输出。为了在反向模式下执行此操作,您需要能够"向后"运行组件,为其提供输出以生成输入。

所以答案是:OpenMDAO总是在正向模式下计算近似部分。

如果您的组件在 fd 中很慢,这可能是声明分析导数的良好候选项。

当您使用 FD 或 CS 区分事物时,根据定义,您使用的是前向模式。

当你用手区分事物时(即笔和纸,派生部分,然后编码它们(,正向模式或反向模式的概念并不真正适用。

但是,如果您使用算法微分来计算您的部分,那么您绝对可以选择正向或反向模式 AD。如果您有 400 个输入和 4 个输出,则反向模式 AD 会更快。

最新更新