neural-network - 假设顺序为Conv2d->ReLU->BN,Conv2d层是否应该有偏置参数?

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

如果我们要 Conv2d 后跟 ReLU 后跟 batch norm (bn )

如果我们先是 Conv2d 然后是 bn 然后是 ReLU 就没必要了,因为 bn< 的 shift 参数 负责偏差工作。

最佳答案

是的,如果顺序是 conv2d -> ReLU -> BatchNorm,那么在卷积中使用 bias 参数会有所帮助。为了证明这一点,让我们假设卷积层中存在偏差,让我们比较一下您在问题中提到的两个顺序会发生什么。这个想法是为了看看偏差是否对每种情况都有用。

让我们考虑来自卷积输出层之一的单个像素,并假设 x_1, ..., x_k 是批处理(批处理大小 == k)。我们可以将卷积写成

Wx+b #with W the convolution weights, b the bias

正如你在问题中所说,当顺序是 conv2d-> BN -> ReLu 时,偏差就没有用了,因为它对 Wx 的分布做了所有的事情code> 将它移动 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)。这就是为什么在使用此顺序时使用偏差项并非毫无用处。

关于neural-network - 假设顺序为Conv2d->ReLU->BN,Conv2d层是否应该有偏置参数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59404153/

相关文章:

python - 如何设置 TensorFlow 矩中的轴参数以进行批量归一化?

machine-learning - 如何用人类玩的游戏来训练国际象棋系统(国际象棋中的机器学习)

python - LSTM keras - 值错误如何解析输入维度

machine-learning - Caffe 中是否有一个层可以获取 blob 中的任意子 block ?

machine-learning - 虚拟批量标准化和批量标准化有什么区别?

tensorflow - 我可以将层归一化与 CNN 结合使用吗?

python - Keras: reshape 以连接 lstm 和 conv

deep-learning - 如何创建具有混合分类和连续矩阵输入的 Pytorch 网络

python - 如何在 pytorch 中创建数据集并将其保存到文件中以供以后使用?

python - 在 Keras 中将 LSTM 与具有不同张量维度的 CNN 连接起来