粘滞广播和普通广播的区别?
时间: 2024-08-14 14:03:07 浏览: 54
076集-粘滞广播
粘滞广播(Sticky Broadcasting)是PyTorch库中的一种特性,用于处理神经网络训练过程中的一些特殊情况。它与普通的广播(Broadcasting)有显著的不同。
**普通广播**[^4] 是指当两个张量具有不同的形状时,较小的张量会被扩展以匹配较大的张量的维度。这允许在不显式地复制整个张量的情况下执行元素级的操作。例如,当你有一个一维张量和一个二维张量相乘时,较小的张量会沿着第二个维度进行重复。
**粘滞广播**[^4] 更具特殊性,它通常发生在模型参数更新时。假设你在训练循环中有一个小批量梯度(shape N x M),以及一个权重矩阵(shape D x H x W)。当应用小批量梯度到全连接层的权重时,如果使用普通广播,可能会导致D维度的广播。然而,在某些情况下,我们可能希望只更新一部分权重(比如,如果你正在使用动态卷积,你想让一个小批量更新影响特定位置的权重)。这时,粘滞广播允许你指定一个“粘滞”区域(通常是最后一维),这样只有这个区域会被更新,其他部分保持不变。
举个例子[^4]:
```python
# 假设我们有小批量梯度grad (N x M) 和权重weight (D x H x W)
# 普通广播:grad.expand(D, H, W) * weight # 全局更新所有权重
# 粘滞广播:grad[:, None, :, :] * weight # 只更新最后一维权重
```
阅读全文