为什么要在 Pytorch 中为自定义层定义反向方法?
Why define a backward method for a custom layer in Pytorch?
我目前正在 Pytorch 中构建一个需要多个自定义层的模型。我只定义了前向方法,因此没有定义后向方法。该模型似乎 运行 很好,并且优化器能够使用层的梯度进行更新。但是,我看到很多人定义后向方法,我想知道我是否遗漏了什么。
为什么您可能需要定义向后传递?
在极少数情况下,您应该在 PyTorch 中实现自己的后向函数。这是因为 PyTorch 的 autograd 功能负责为绝大多数操作计算梯度。
最明显的例外是
你有一个函数不能表示为其他可微函数的有限组合(例如,如果你需要不完全伽马函数,你可能想写你自己的前向和后向使用numpy and/or 查找表)。
您希望加快计算一个特别复杂的表达式,在应用链式法则后可以大大简化梯度。
我目前正在 Pytorch 中构建一个需要多个自定义层的模型。我只定义了前向方法,因此没有定义后向方法。该模型似乎 运行 很好,并且优化器能够使用层的梯度进行更新。但是,我看到很多人定义后向方法,我想知道我是否遗漏了什么。
为什么您可能需要定义向后传递?
在极少数情况下,您应该在 PyTorch 中实现自己的后向函数。这是因为 PyTorch 的 autograd 功能负责为绝大多数操作计算梯度。
最明显的例外是
你有一个函数不能表示为其他可微函数的有限组合(例如,如果你需要不完全伽马函数,你可能想写你自己的前向和后向使用numpy and/or 查找表)。
您希望加快计算一个特别复杂的表达式,在应用链式法则后可以大大简化梯度。