L2 正则化不应该针对层中的节点数进行归一化吗?

数据挖掘 神经网络 正则化
2021-10-01 17:27:00

我天真地认为将 L2 正则化标准化为张量中的元素数量会更好,但我没有看到有人这样做。我错过了什么?

我会在多层全连接NN中说:

x  = input            # vector length n_in
w1 = weights          # shape n_in x n_1
b_1 = bias            # shape n_1
h_1 = Relu(w1 * x + b_1)

w2 = weights          # shape n_1 x n_2
b_2 = bias            # shape n_2
h_2 = Relu(w2 * h_1 + b_2)

那么L2损失通常定义为:

L2 = lambda * ( sum((w1) ^2) + sum((w2) ^2) )

如果第一层比第二层大得多,则比上述 L2 定义中的第一项要大得多,实际上使第二项无用。我认为这会更好:

L2 = lambda * ( sum((w1) ^2)/(n_in*n_1) + sum((w2) ^2)/(n_1*n_2) )

这也将使超参数 lambda 与您选择的节点数无关。但是,我没有看到有人这样做,所以我怀疑我错过了一些东西。它是什么?

1个回答

但是,我没有看到有人这样做,所以我怀疑我错过了一些东西。它是什么?

您正在专注于这个额外的损失项如何影响损失函数的绝对值。这并不重要。许多形式的正则化根本没有表示为对损失函数的更改——将 L2 正则化框架作为损失函数的一部分很方便,因为它允许我们重用现有的权重调整逻辑。然而,从功能上讲,它几乎与每批次应用的权重衰减项相同,而与损失函数无关,例如,每批次将所有权重乘以 0.99。

如果您使用 L2 正则化损失,那么在比较不同正则化级别之间的测试结果时,您几乎肯定会想要跟踪一个单独的指标,例如均方误差(即在考虑正则化之前的原始损失函数)。

也就是说,没有理由每层不能有不同的 L2 权重参数,许多框架都会支持这一点。有时这可能会导致更好的概括。它在实践中并没有做太多,因为它在优化问题的超参数时增加了更多的搜索维度。

没有理由期望每层的正则化损失值大致相等,从而获得更好的性能。但是,如果这是您的目标,那么通过反向层大小进行天真的缩放1Nin×Nout不会这样做。这是因为经过训练的网络中的权重已经由于训练目标而趋于缩放,因此均方值与1Nin+Nout. 因此,使每层 L2 正则化损失大致相同的实际比例因子将是Nin+NoutNin×Nout. 在代码中,这可能看起来像:

L2 = lambda * (
  sum((w1) ^2)*(n_in+n_1)/(n_in*n_1) + sum((w2) ^2)*(n_1+n_2)/(n_1*n_2)
)

(当然还有匹配损失梯度的变化)。尽管我将再次强调,我不希望这种变化会导致更好的概括。