Conv2d如果我们要Conv2d紧随ReLU其后,我们应该在其中包含偏差参数batch norm (bn)吗?
如果我们使用Conv2d后跟bn后跟,则没有必要ReLU,因为 的 shift 参数bn负责偏置工作。
Conv2d如果我们要Conv2d紧随ReLU其后,我们应该在其中包含偏差参数batch norm (bn)吗?
如果我们使用Conv2d后跟bn后跟,则没有必要ReLU,因为 的 shift 参数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 +...))
从扩展那些依赖于非零的 therms 可以看出Wx_i+b:
(Wx_i+b - some_term - b/k)^2 = some_other_term + some_factor * W * b/k * x_i
这意味着结果将以b乘法方式依赖。因此,它的缺失不能仅仅通过 BN 层的移位分量来补偿(beta在大多数实现和论文中都有说明)。这就是为什么在使用这个顺序时有一个偏差项并不是没有用的。