题目重点:用一层模型解释链式求导和参数更新,核共享参数、batch归一化与计算图。
题意与假设
这道练习题保留了面经中值得训练的核心约束,并将需要澄清的条件单独列出。现场拿到变体时,先和面试官确认这些条件。
- 可微计算图与标量loss,示例平方回归loss1/2(yhat−y)²;SGD更新一步,非神经网络唯一训练法。
- 数学推导为手算,不冒充题目训练代码/未知项目;linear regression可运行SGD已有q67。
解题路线
- backprop负责沿计算图反向用链式法则求梯度;GD/SGD/Adam用梯度更新参数。反传不等于更新,计算梯度后可累积/检查,optimizer也可读取其他方式得到的梯度。
- 设z=wx+b、yhat=z,loss半平方,dL/dz=z−y,dL/dw=(z−y)x,dL/db=z−y;SGD按w'=w−ηg_w、b'=b−ηg_b同时用旧参数计算的梯度。
- 复杂图节点有多个后续路径时adjoint要相加;共享参数在不同位置出现也累加贡献。不能每条路径覆盖grad,或先更新部分参数再用新值计算其他旧图梯度。
- batch mean loss梯度也取mean,sum loss改变有效scale;累积microbatch若每批大小不同需权重合同。学习率相同不代表不同归一化下更新相同。
- 激活/attention等复合算子按局部Jacobian-vector链式传播,通常不显式建完整Jacobian;前向中间状态或重计算服务反传。非可微argmax、detach或离图操作会截梯度。
- 验证用有限差分中心差( L(θ+ε)−L(θ−ε) )/(2ε),固定随机mask/数据,以float64核小模型;不在ReLU拐点或随机不同forward下期待一致。
手动走一遍
x2,y5,w1,b0,预测2、残差−3,梯度w−6/b−3,η0.1后w1.6,b0.3,新预测3.5。若先改w再算b,得到不同b,已不是同一步GD。
规模与取舍
通常反向计算与前向同量级常数倍,存中间激活或重计算取舍;数值差分P参数约2P次前向,只适合小模型验证,不能当大模型日常梯度法。
易错点与追问
容易失分的边界
- backprop直接叫optimizer。
- 共享参数覆盖而非累加。
- 先改w再用新w算同一步b梯度。
- sum/mean scale混淆。
- detach断图。
继续深挖
- 反向模式与前向模式AD适合什么维度?
- 梯度累积如何按真实样本数归一化?
- checkpointing为何增加算力省激活?
- dropout梯度检查怎样固定随机性?
