批量更新和单独更新之间的 MLP 正则化有何不同?

数据挖掘 神经网络
2021-10-02 09:51:21

我刚刚了解了正则化作为一种​​控制过拟合的方法,我想将这个想法融入我放在一起的反向传播和多层感知器(MLP) 的简单实现中。

目前为了避免过度拟合,我交叉验证并保持网络在验证集上的得分最高。这行得通,但是添加正则化将使我受益,因为正确选择正则化算法和参数将使我的网络更系统地收敛于非过拟合模型。

我对更新术语(来自 Coursera ML 课程)的公式表示为批量更新,例如对于每个权重,在从错误传播中对整个训练集的所有适用增量求和之后,lambda * current_weight在组合之前添加一个调整在批次结束时减去 delta,其中lambda是正则化参数。

我的反向传播实现使用了每个项目的权重更新。我担心我不能只是复制批处理方法,尽管它在我看来直观上还可以。每个项目较小的正则化项是否也有效?

例如lambda * current_weight / N,其中 N 是训练集的大小 - 乍一看,这看起来很合理。不过,我在这个主题上找不到任何东西,我想知道这是否是因为正则化在逐项更新时效果不佳,或者甚至使用不同的名称或更改的公式。

2个回答

正则化也与逐项学习相关。我建议从找出 lambda 的基本验证方法开始,无论您是进行批量学习还是逐项学习。这是最简单和最安全的方法。手动尝试使用许多不同的值。例如 0.001。0.003、0.01、0.03、0.1 等,看看你的验证集是如何表现的。稍后,您可以通过引入线性或局部搜索方法来自动化此过程。

附带说明一下,我认为 lambda 的值应该与参数向量的更新相关,而不是训练集的大小。对于批量训练,每个数据集通过一次参数更新,而对于在线每个样本更新一次(无论训练集大小)。

我最近偶然发现了这个Crossvalidated Question,它看起来和你的很相似。有一篇关于新 SGD 算法的论文的链接,其中包含一些相关内容。看一看(尤其是第 1742-1743 页)可能会很有用。

为了补充insys所说的:

在计算 MLP 中所有权重的反向传播时使用正则化。因此,不是计算关于训练集的所有输入的梯度 ( batch),您只使用一些/一个项目 ( stochastic or semi-stochastic)。您最终将限制更新的结果关于一个项目而不是所有这也是正确的。

另外,如果我没记错的话,Andrew NG 使用了L2-regularization. /Ninlambda * current_weight / N不是强制性的,它只是帮助重新调整输入但是,如果您选择不使用它,您将(在大多数情况下)为lambda.

您还可以使用网格搜索算法lambda超参数=> 您必须选择的那个)选择最佳值。