上次课习得单输出和多输出的感知机模型,并推导了权值上的信息更新法则,本节介绍神经网络结构中一个最最重要的法则:即链式法则。将最后一层的误差层层传导到中间层上,进而更新出最适宜的梯度信息,以更新出最佳权值,达到最优化效果。
首先对链式法则中常用的公式进行介绍:
这里要牢记Sum Rule(梯度加和)、Difference Rule(梯度相减)、链式法则等公式。
这里要牢记Sum Rule(梯度加和)、Difference Rule(梯度相减)、链式法则等公式。
因此在感知机中
可以使用链式法则一步步转转化问题
代码语言:javascript复制import torch
import torch.nn.functional as F
import torch.autograd
x = torch.tensor(1.)
w1 = torch.tensor(2., requires_grad=True)
b1 = torch.tensor(1.)
w2 = torch.tensor(2., requires_grad=True)
b2 = torch.tensor(1.)
y1 = x*w1 b1
y2 = y1*w2 b2
dy2_dy1 = torch.autograd.grad(y2, [y1], retain_graph=True)[0]
dy1_dw1 = torch.autograd.grad(y1, [w1], retain_graph=True)[0]
dy2_dw1 = torch.autograd.grad(y2, [w1], retain_graph=True)[0]
print('dy2_dy1*dy1_dw1:', dy2_dy1*dy1_dw1)
print('dy2_dw1:', dy2_dw1)
输出为
代码语言:javascript复制dy2_dy1*dy1_dw1: tensor(2.)
dy2_dw1: tensor(2.)
由结果可见 利用链式法则求得的结果与直接求导出的结果一致。