torch.autograd的简要介绍 - 【布客】PyTorch 中文翻译
参考官网中文文档的torch.autograd篇,这里更为详细,下文为简述。
简述:
神经网络在训练参数时,有正向传播和反向传播的过程,反向传播作用是计算参数的梯度。
requires_grad标志的作用就是决定这个tensor是否参与梯度计算,也就是是否允许被调参。
Pytorch中神经网络的架构:
在Pytorch中,整个神经网络被构建为一个有向无环图(DAG),类似于树结构(其中输入参数为叶子节点,最终输出为根节点)
DAG的一个优点就是可以进行流水化作业,可以极大的减少运行速度。
当损失函数进行backward(),也就是反向传播时,autograd会从根节点向叶子节点进行梯度运算,期间所有的节点也会参与运算(运算公式过略),而计算出的梯度会保存在.grad属性中并且逐层累加,最后保存在叶子节点的.grad中。
requires_grad作用:
我们首先认识用到,在tensor的初始化中:
如果你指定了requires_grad=True,意味着它加入了DAG中,也就是参与梯度运算。
如果你没有指定requires_grad,则默认为Flase,意味着它没有加入DAG中,也就是不计算梯度,这样的参数通常称为冻结参数。
如果事先知道您不需要这些参数的梯度,则“冻结”模型的一部分很有用(通过减少自动梯度计算,这会带来一些性能优势。
从 DAG 中排除很重要的另一个常见用例是调整预训练网络,比如采样,使得已经预训练的模型更加贴合当前你所做的任务。