批处理更新和单个更新之间在MLP规范化方面有何不同?


9

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

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

对于更新项(来自Coursera ML课程),我具有的公式表示为批量更新,例如,对于每个权重,在从误差传播中总结了整个训练集的所有适用增量之后lambda * current_weight,还要添加的调整项批处理结束时减去delta,其中lambda是正则化参数。

我的反向传播实施使用每个项目的权重更新。我担心我不能仅仅复制批处理方法,尽管从直觉上看它看起来不错。每个项目的较小正则项是否也有效?

例如lambda * current_weight / N,其中N是训练集的大小-乍一看,这看起来很合理。我在这个问题上找不到任何东西,我想知道那是因为正则化不能对每个项目进行更新,甚至不能使用其他名称或更改的公式。

Answers:


2

正则化在每个项目的学习中也很重要。我建议从一种基本的验证方法开始,以找出lambda,无论您是批量学习还是逐项学习。这是最简单,最安全的方法。手动尝试使用许多不同的值。例如0.001。0.003、0.01、0.03、0.1等,并查看验证集的行为。稍后,您可以通过引入线性或局部搜索方法来自动执行此过程。

附带说明,我认为应考虑参数向量更新而不是训练集大小来考虑lambda的值。对于批量训练,每个数据集传递一次参数更新,而对于每个样本,一个参数更新(与训练集大小无关)。

我最近偶然发现了这个Crossvalidated问题,该问题与您的问题非常相似。有一篇有关新的SGD算法的论文的链接,其中包含一些相关内容。看一下可能会很有用(尤其是1742-1743页)。


是的,我仍然打算进行交叉验证以检查是否过度拟合,我的问题比这更基本-我找不到在MLP中使用正则化和逐项权重调整的任何参考,并且担心有一个很好的解决方案原因-例如,它在该学习模式下不起作用或需要调整。的交叉验证的问题,虽然非常相似,给了我更多的信心,谢谢。SGD算法页面似乎采用了一种不同的随机方法来引入正则化,这对我来说可能有点先进,但这正是我想要的。
尼尔·斯莱特

正则化在每个项目的学习中也很重要。我仍然建议从查找lambda的基本验证方法开始。这是最简单,最安全的方法。手动尝试使用许多不同的值。例如0.001。0.003、0.01、0.03、0.1等,并查看验证集的行为。稍后,您可以通过引入线性或局部搜索方法来自动执行此过程。
insys 2014年

如果上面的评论被编辑并替换了答案中的第一句话/问题,那么我想我可以接受。
尼尔·斯莱特2014年

谢谢指出,我同意。编辑它。希望它更清晰。
insys 2014年

2

为了补充insys所说的内容:

在计算MLP中所有权重的反向传播时,会使用正则化。因此,您无需batch使用针对训练集()的所有输入的梯度,而仅使用一些/一项(s stochastic or semi-stochastic)。您最终将限制仅针对一项而不是全部对的更新结果。

另外,如果我没记错的话,吴安德(Andrew NG)也使用过L2-regularization。该/Nlambda * current_weight / N不是强制性的,它只是帮助重新调整输入。但是,如果您选择不使用它,则(在大多数情况下)您将不得不为选择另一个值lambda

您也可以使用Grid-search算法来选择最佳值lambda超参数 =>必须选择的值)。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.