链式法则解释上游梯度应用
过程。
假设我们有一个计算图:
Code 代码
<span style="background-color:var(--bgColor-default)"><span style="color:var(--fgColor-default, var(--color-fg-default))"><code>x → x² → L (损失函数)
</code></span></span>
根据链式法则:
Code 代码
<span style="background-color:var(--bgColor-default)"><span style="color:var(--fgColor-default, var(--color-fg-default))"><code>dL/dx = dL/d(x²) * d(x²)/dx
</code></span></span>
其中:
dL/d(x²)
就是upstream_grad
(上游梯度)d(x²)/dx = 2x
是平方函数的导数x
就是self.data
所以:
Python
<span style="background-color:var(--bgColor-default)"><span style="color:var(--fgColor-default, var(--color-fg-default))"><code><span style="color:var(--color-prettylights-syntax-keyword)">self</span>.grad += upstream_grad * <span style="color:var(--color-prettylights-syntax-constant)">2</span> * <span style="color:var(--color-prettylights-syntax-keyword)">self</span>.data
<span style="color:var(--color-prettylights-syntax-comment)"># = dL/d(x²) * d(x²)/dx</span></code></span></span>