megengine.autodiff.GradManager.backward

GradManager.backward(y=None, dy=None)[源代码]

对所有 attached Tensor 计算梯度 (或向量-雅可比积),并将其积累到对应 Tensor 的 .grad 属性中,在过程中释放资源。

backward 计算向量-雅可比积 \(dx_j = \sum_{i} dy_i J_{ij}\) ,其中 \(J_{ij} = ∂y_i/∂x_j\) 是向量变量 \(y\)\(x\) 的雅可比矩阵,涉及的所有向量都在向量空间直和 (或展平并拼接) 的意义下表示为 Tensor 的列表。\(y\) and \(dy\) 分别是第一和第二个参数,\(x\) 则由所有 attached Tensor 的列表形成。计算的结果 \(dx\) 不作为返回值,而是直接积累到对应 Tensor (即 \(x\)) 的 .grad 属性上。这个对应可以无歧义地完成,因为 \(dx\) 作为 Tensor 的列表和 \(x\) 有着相同的结构。

如果 \(y\) 是一个标量而 \(dy\) 被取为 1,那么向量-雅可比积的结果恰好就是 \(y\)\(x\) 的梯度。在这种情况下,您可以省略 \(dy\) 参数,backward 会自动使用 1 作为它的值并计算梯度。

backward 会随计算的进行释放 GradManager 持有的所有资源。在函数调用成功返回后,GradManager 会回到非活跃的状态。

参数