动态计算图
不同于静态计算图中网络结构一开始就被预设好,动态计算图中一个节点只有被执行到且requires_gard=True时,才被加入计算图。
loss.Backward
作用: 从loss向前对叶节点链式求导,计算得到的参数保存在每个叶节点的grad中。
什么是叶节点?
不需要更新梯度的tensor。
如果一个节点根本就不需要更新梯度,也就意味着梯度流会停在这里,他肯定是一个叶节点。
例子:GAN的训练过程中利用生成器输出训练辨别器,因为BP时不再向前更新生成器的参数,则将输出设为requires_grad=False,意味着梯度流会停在这里。
用户设置的requires_grad=True的tensor
例子:NN网络中的网络参数
如何后向传播的?
后向传播的必须条件:
1.至少有一个叶节点requires grad。
2.所有路上节点(后向传播的传递节点)必须满足两个条件:
requires_grad=True
grad_fn(函数关系)!=None
当满足这两个条件时,梯度就从scalar loss沿着函数流传播到叶节点。