🧠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 会被记录,只是每次执行图结构可能不同。