6.3_Square类和Exp类的功能扩展

6.3 Square类和Exp类的功能扩展

接下来实现具体函数的反向传播(backward)。首先从计算平方的Square类开始。由于 y=x2y = x^2 的导数是 dydx=2x\frac{\mathrm{dy}}{\mathrm{dx}} = 2x ,所以这个类可以按照如下方式实现。

steps/step06.py

class Square(Function): def forward(self, x): y = x ** 2 return y def backward(self, gy): x = self.output.data  $\mathrm{gx} = 2*x*g$  y return gx

上面的代码增加了用于反向传播的backward方法。这个方法的参数gy是一个ndarray实例,它是从输出传播而来的导数。backward返回的结果是通过这个参数传播来的导数和“ y=x2y = x^2 的导数”的乘积。这个返回结果会进一步向输入方向传播。

接下来是计算 y=exy = \mathrm{e}^{x} 的Exp类。由于 dydx=ex\frac{\mathrm{dy}}{\mathrm{dx}} = \mathrm{e}^{x} ,所以这个类可以按下面的方式实现。

steps/step06.py

class Exp(Function): def forward(self, x): y = np.exp(x) return y def backward(self, gy): x = self.output.data gx = np.exp(x) * gy return gx