代码的一些规律

自动微分约定:梯度形状守恒

核心约定

对于标量损失 LRL \in \mathbb{R},参数 xx 的梯度形状严格等于 xx 的形状:

LxRn1××nkxRn1××nk\frac{\partial L}{\partial x} \in \mathbb{R}^{n_1 \times \cdots \times n_k} \quad\Longleftrightarrow\quad x \in \mathbb{R}^{n_1 \times \cdots \times n_k}

即:

shape(Lx)shape(x)\text{shape}\left(\frac{\partial L}{\partial x}\right) \equiv \text{shape}(x)

  • 标量损失 LL 是一个数值,对张量 xx 的每个元素 xix_i 求偏导 Lxi\frac{\partial L}{\partial x_i},结果自然与 xx 同形。
  • 自动微分框架(PyTorch、JAX 等)的 x.grad 严格遵循此形状守恒,以便原地更新xxηgradx \leftarrow x - \eta \cdot \text{grad}

评论