知了AI学习平台Logo知了
🧠AI 冷知识

你知道吗?

这些有趣的 AI 小知识可能让你大吃一惊

🔧
自动微分的边界

自定义函数继承autograd.Function时,必须手写backward()的梯度公式。但PyTorch无法验证你的backward是否正确——如果写错了,模型会"自信地"往错误方向优化,而且不会报任何错。调试技巧:用torch.autograd.gradcheck做数值梯度检验。

一句话总结
💡

自定义层通过继承 nn.Module 并实现 forward 定义前向逻辑,自定义函数可继承 autograd.Function 实现需要自定义前向与反向的运算。

常见误区

这些坑别踩

✗

误区 1

自定义层必须手写 backward。

✓

正确理解

继承 nn.Module 只要用可微操作,autograd 自动求导;只有不可微或需特殊梯度时才写 autograd.Function。

✗

误区 2

自定义函数的 forward 和 backward 无关。

✓

正确理解

backward 必须与 forward 严格对应,否则梯度计算错误。

✗

误区 3

在 forward 里写循环或控制流会导致报错。

✓

正确理解

PyTorch 动态图支持 Python 控制流,if/for 会被记录,只是每次执行图结构可能不同。