在反向模式自动微分中多次处理变量

计算科学 自动分化 分化
2021-12-20 06:17:01

如果我尝试使用 Reverse-Mode Auto-Diff 计算导出一个函数,我可以导出一个函数 wrt。一次完成许多变量。

我现在的问题是,如果我输入这个函数会发生什么(只是一个非常简单的问题示例):

f(x,y,z)=(x+y)z+x

现在,显然,手动处理这个很简单,只需导出最顶层的两个子表达式+然后添加它们。

但是在反向模式 AD 中,每个推导的最终结果位于每个分支的底部(如果您将函数设想为表达式树)。现在,您如何处理这些情况,因为大多数算法都处理+通过仅拆分和递归处理子树。但是对于推导wrt。x为了x=2,y=2,z=2我明白了f(x=2)=1f(x=2)=2取决于我在哪个子树中。

我想我错过了反向模式 AD 的一个关键部分(主要可能是在实现部分),但我不知道是哪个。

1个回答

我认为可以“存储”这些子表达式的结果,然后将它们全部加起来。

考虑为函数的每个变量分配一个额外的变量,所有变量都初始化为 0,并将所有这些子值添加到每个相应的存储值,一旦所有子树完成,存储的值应该具有正确的价值观。

对于每一个阅读本文的人,这对您来说是否正确?