假设Conv2d-> ReLU-> BN的顺序,Conv2d层是否应具有偏置参数?

时间:2019-12-19 06:14:54

标签: neural-network conv-neural-network batch-normalization activation-function relu

如果要使用Conv2d,然后是Conv2d,然后是ReLU,是否应该在batch norm (bn)中包含bias参数?

如果我们选择Conv2d,然后依次选择bnReLU,则没有必要,因为bn的shift参数会处理偏差。

1 个答案:

答案 0 :(得分:1)

是的,如果顺序为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)。这就是为什么在使用此顺序时使用偏差项并非没有用。