内核、偏差和活动调节器之间有什么区别,什么时候使用?

机器算法验证 神经网络 正则化 喀拉斯
2022-01-23 13:43:47

我已经阅读了这篇文章,但我想对更广泛的问题进行更多说明。

在 Keras 中,层现在有三种类型的正则化器:kernel_regularizerbias_regularizeractivity_regularizer

我已经阅读了解释 L1 和 L2 范数之间区别的帖子,但是从直观的意义上讲,我想知道每个正则化器将如何影响上述三种类型的正则化器以及何时使用什么。

我提出问题的动机是我的理解是正则化器通常应用于损失函数。但是,它们甚至被添加到偏差项中。我无法理解为什么人们会考虑这样做,更不用说能够辨别何时将 L1 和 L2 用于偏置正则化器。因此,我想全面了解应用正则化器的所有三个实体,并且总体上了解这两种正则化器如何在高层次上影响这些实体中的每一个。

3个回答

它们之间有什么区别?

你有回归方程y=Wx+b, 在哪里x是输入,W权重矩阵和b偏见。

  • 内核正则化器:尝试减少权重W(不包括偏见)。
  • 偏差正则化器:尝试减少偏差b.
  • Activity Regularizer:尝试减少层的输出y,因此将减少权重并调整偏差Wx+b是最小的。

什么时候用哪个?

通常,如果您对想要建模的分布没有先验,您只会使用内核正则化器,因为即使权重的正则化很大,足够大的网络仍然可以对您的函数进行建模。

如果您希望输出函数通过(或截距更接近)原点,您可以使用偏差正则化器。

如果希望输出更小(或更接近 0),可以使用活动正则化器。

L1相对L2正则化

现在,对于L1相对L2权重衰减损失(不要与输出损失函数混淆)。

  • L2损失定义为w2
  • L1损失定义为|w|.

在哪里w是矩阵的一个组成部分W.

  • 的梯度L2将会:2w
  • 的梯度L1将会:sign(w)

因此,对于每个具有学习率的梯度更新a, 在L2损失,权重将减去aW, 而在L1损失他们将被减去asign(W).

的效果L2权重损失是矩阵中大型组件的减少W, 尽管L1loss 将使权重矩阵稀疏,具有许多零值。这同样适用于分别使用偏置和活动正则化器的偏置和输出。

kernel_regularizer作用于权重,同时bias_initializer作用于偏差并activity_regularizer作用于 y(层输出)。

我们应用kernel_regularizer惩罚非常大的权重导致网络过拟合,应用后kernel_regularizer权重会变小。

而我们bias_regularizer添加一个偏差,使我们的偏差接近于零。

activity_regularizer尝试使输出更小以消除过度拟合。

我将扩展 @Bloc97关于两者之间区别的回答L1L2约束,以说明原因L1可能会使某些权重为零。

如果是L2正则化,单个权重的梯度由下式给出

δw=u2pw
在哪里u是前一层的输入乘以权重w, 和p是参数加权L2惩罚。

不失概括性,假设u>0w>0.

然后的标志δw是(谁)给的

sign(δw)=sign(u2pw)
表明L2正则化将推动w变大,如果w跌至以下u2p.

另一方面,在L1正则化,单个权重的梯度由下式给出

δw=up
所以标志δw是(谁)给的
sign(δw)=sign(up)
表明L1正则化将推动w当输入变小u小于L1正则化参数p.

有效地,p起一个阈值的作用,这样,无论何时u小于p,L1正则化将推动权重变小,并且无论何时u大于p,L1正则化将推动权重变大。

以上是非线性系统的局部线性逼近: u实际上是一个平均值,例如,一个批次中的所有样本,并且u也随着每次更新而变化。然而,它可以直观地理解如何L1正则化试图将一些权重驱动为零(假设足够大p)。