28.2_求导
28.2 求导
首先求Rosenbrock函数在 的导数 和 。使用DeZero可按如下方式实现。
steps/step28.py
import numpy as np
fromdezero import Variable
defrosenbrock(x0,x1): $\mathrm{y} = 100^{*}$ (x1-x0\*\*2)\*\*2+(x0-1)\*\*2 return y
$\mathbf{x0} =$ Variable(np.array(0.0))
$\mathrm{x1} =$ Variable(np.array(2.0))
$y =$ rosenbrock(x0,x1)
y.backup()
print(x0.grad,x1.grad)运行结果
-2.0 400.0
如上所示,先把数值数据(ndearray实例)封装在Variable中,然后根据式子编码。之后只要调用y.backup(),DeZero就会自动求出导数。
执行上面的代码,得到的 的导数和 的导数分别为-2.0和400.0。将这两个导数以向量的形式汇总起来的(-2.0,400.0)称为梯度或梯度向量。梯度展示了各点上函数的输出值增加得最快的方向。拿前面的例子来说,就是在点 上,y的值增加得最快的方向是(-2.0,400.0)。这就意味着梯度的反方向(2.0,-400.0)是y的值减少得最快的方向。