假设顺序为Conv2d->ReLU->BN,Conv2d层是否应该有偏置参数?
Assuming the order Conv2d->ReLU->BN, should the Conv2d layer have a bias parameter?
如果我们要 Conv2d
然后是 ReLU
然后是 batch norm (bn)
,我们是否应该在 Conv2d
中包含偏差参数?
如果我们先选择 Conv2d
,然后选择 bn
,再选择 ReLU
,则没有必要,因为 bn
的移位参数会处理偏差工作。
是的,如果顺序是 conv2d -> ReLU -> BatchNorm
,那么在卷积中使用 bias
参数会有所帮助。为了证明这一点,让我们假设卷积层中存在偏差,让我们比较一下您在问题中提到的两个顺序会发生什么。这个想法是为了看看偏差是否对每种情况都有用。
让我们考虑来自卷积输出层之一的单个像素,并假设 x_1, ..., x_k
是来自批次(批次大小 == k
)的相应输入(以矢量化形式)。我们可以将卷积写成
Wx+b #with W the convolution weights, b the bias
正如您在问题中所说,当顺序为 conv2d-> BN -> ReLu
时,偏差就没有用了,因为它对 Wx
的分布所做的只是将其移动 b
,这被直接的 BN 层抵消了:
(Wx_i - mu)/sigma ==> becomes (Wx_i + b - mu - b)/sigma i.e. no changes.
但是,如果您使用其他顺序,即
BN(ReLU(Wx+b))
然后 ReLU
会将一些 Wx_i+b
映射到 0
· 结果,均值将如下所示:
(1/k)(0+...+0+ SUM_s (Wx_s+b))=some_term + b/k
std
看起来像
const*((0-some_term-b/k)^2 + ... + (Wx_i+b - some_term -b/k)^2 +...))
正如你从扩展那些依赖于非零的热量中看到的那样Wx_i+b
:
(Wx_i+b - some_term - b/k)^2 = some_other_term + some_factor * W * b/k * x_i
这意味着结果将以乘法的方式取决于b
。因此,它的缺失不能仅通过 BN 层的移位分量来补偿(在大多数实现和论文中注明 beta
)。这就是为什么在使用这个顺序时有一个偏差项并不是没有用的。
如果我们要 Conv2d
然后是 ReLU
然后是 batch norm (bn)
,我们是否应该在 Conv2d
中包含偏差参数?
如果我们先选择 Conv2d
,然后选择 bn
,再选择 ReLU
,则没有必要,因为 bn
的移位参数会处理偏差工作。
是的,如果顺序是 conv2d -> ReLU -> BatchNorm
,那么在卷积中使用 bias
参数会有所帮助。为了证明这一点,让我们假设卷积层中存在偏差,让我们比较一下您在问题中提到的两个顺序会发生什么。这个想法是为了看看偏差是否对每种情况都有用。
让我们考虑来自卷积输出层之一的单个像素,并假设 x_1, ..., x_k
是来自批次(批次大小 == k
)的相应输入(以矢量化形式)。我们可以将卷积写成
Wx+b #with W the convolution weights, b the bias
正如您在问题中所说,当顺序为 conv2d-> BN -> ReLu
时,偏差就没有用了,因为它对 Wx
的分布所做的只是将其移动 b
,这被直接的 BN 层抵消了:
(Wx_i - mu)/sigma ==> becomes (Wx_i + b - mu - b)/sigma i.e. no changes.
但是,如果您使用其他顺序,即
BN(ReLU(Wx+b))
然后 ReLU
会将一些 Wx_i+b
映射到 0
· 结果,均值将如下所示:
(1/k)(0+...+0+ SUM_s (Wx_s+b))=some_term + b/k
std
看起来像
const*((0-some_term-b/k)^2 + ... + (Wx_i+b - some_term -b/k)^2 +...))
正如你从扩展那些依赖于非零的热量中看到的那样Wx_i+b
:
(Wx_i+b - some_term - b/k)^2 = some_other_term + some_factor * W * b/k * x_i
这意味着结果将以乘法的方式取决于b
。因此,它的缺失不能仅通过 BN 层的移位分量来补偿(在大多数实现和论文中注明 beta
)。这就是为什么在使用这个顺序时有一个偏差项并不是没有用的。