像权重衰减这样的权重正则化方法在训练神经网络时会向损失函数引入一个惩罚,以鼓励网络使用小权重。
神经网络中较小的权重可以使模型更稳定,更不容易过拟合训练数据集,从而在新数据上进行预测时表现更好。
与权重正则化不同,权重约束是一种触发器,它检查权重的大小或量级,并对其进行缩放,使它们都低于预定义的阈值。该约束强制权重变小,可以代替权重衰减使用,并且可以与更激进的网络配置结合使用,例如非常大的学习率。
在这篇文章中,您将了解如何使用权重约束正则化作为权重惩罚的替代方案,以减少深度神经网络中的过拟合。
阅读本文后,你将了解:
- 权重惩罚鼓励但不要求神经网络具有小权重。
- 权重约束,例如 L2 范数和最大范数,可以用于强制神经网络在训练期间具有小权重。
- 权重约束与其他正则化方法(如 dropout)结合使用时,可以提高泛化能力。
用我的新书《更好的深度学习》来启动你的项目,书中包含分步教程和所有示例的 Python 源代码文件。
让我们开始吧。

深度学习中减少泛化误差的权重约束简介
图片由 Dawn Ellner 拍摄,保留部分权利。
概述
- 大型权重惩罚的替代方案
- 强制小权重
- 如何使用权重约束
- 权重约束的示例用途
- 使用权重约束的技巧
大型权重惩罚的替代方案
神经网络中的大权重是过拟合的标志。
具有大权重的网络很可能学习了训练数据中的统计噪声。这导致模型不稳定,并且对输入变量的变化非常敏感。反过来,过拟合的网络在对新的未见数据进行预测时表现不佳。
解决该问题的一种流行且有效的方法是更新在训练期间优化的损失函数,以考虑权重的大小。
这被称为惩罚,因为网络的权重越大,网络受到的惩罚就越大,导致损失更大,进而更新更大。其效果是惩罚鼓励权重变小,或不大于训练过程所需的,从而减少过拟合。
使用惩罚的一个问题是,虽然它确实鼓励网络使用较小的权重,但它并没有强制使用较小的权重。
用权重正则化惩罚训练的神经网络在某些情况下仍然可能允许使用大权重,甚至是很大的权重。
强制小权重
除了对网络权重大小使用惩罚之外,另一种解决方案是使用权重约束。
权重约束是对网络的更新,它检查权重的大小,如果大小超过预定义的限制,则对权重进行重新缩放,使其大小低于该限制或在某个范围内。
您可以将权重约束视为一个“if-then”规则,在网络训练时检查权重的大小,并仅在需要时生效并使权重变小。请注意,为了效率,它不必实现为“if-then”规则,而且通常也不是。
与向损失函数添加惩罚不同,权重约束确保网络权重较小,而不是仅仅鼓励它们变小。
它在那些抵制其他正则化方法(如权重惩罚)的问题或网络上可能很有用。
当您将网络配置为使用权重正则化以外的其他正则化方法,但仍希望网络具有小权重以减少过拟合时,权重约束尤其有用。一个经常被引用的例子是将权重约束正则化与dropout 正则化结合使用。
尽管 dropout 本身带来了显著的改进,但将 dropout 与 [权重约束] 正则化结合使用,(...) 比仅使用 dropout 提供了显著的提升。
— Dropout:一种防止神经网络过拟合的简单方法,2014。
想要通过深度学习获得更好的结果吗?
立即参加我为期7天的免费电子邮件速成课程(附示例代码)。
点击注册,同时获得该课程的免费PDF电子书版本。
如何使用权重约束
约束应用于层内的每个节点。
层内的所有节点都使用相同的约束,并且通常同一网络中的多个隐藏层将使用相同的约束。
回想一下,当我们谈论一般的向量范数时,它是节点中权重向量的幅度,默认情况下计算为 L2 范数,例如向量中平方值之和的平方根。
可用于约束的一些示例包括:
- 强制向量范数为 1.0(例如单位范数)。
- 限制向量范数的最大大小(例如最大范数)。
- 限制向量范数的最小和最大大小(例如最小-最大范数)。
最大范数(也称为 max-norm 或 maxnorm)是一种流行的约束,因为它比其他范数(如单位范数)更不激进,只是设置了一个上限。
最大范数正则化以前曾被使用过 […] 它通常会改善深度神经网络的随机梯度下降训练性能…
— Dropout:一种防止神经网络过拟合的简单方法,2014。
使用限制或范围时,必须指定一个超参数。鉴于权重较小,超参数本身通常也是一个小的整数值,例如 1 到 4 之间的值。
……我们可以使用最大范数正则化。这会将每个隐藏单元的传入权重向量的范数限制在一个常数 c 内。c 的典型值范围为 3 到 4。
— Dropout:一种防止神经网络过拟合的简单方法,2014。
如果范数超过指定范围或限制,则对权重进行重新缩放或归一化,使其幅度低于指定参数或在指定范围内。
如果权重更新违反了此约束,我们通过除法重新归一化隐藏单元的权重。使用约束而不是惩罚可以防止权重变得非常大,无论建议的权重更新有多大。
— 通过防止特征检测器的协同适应来改进神经网络,2012。
该约束可以在每次权重更新后应用,例如在每个小批量结束时。
权重约束的示例用途
本节提供了最近研究论文中一些精选的权重约束使用示例。
Geoffrey Hinton 等人在其 2012 年题为《通过防止特征检测器的协同适应来改进神经网络》的论文中,对应用于 MNIST 手写数字分类任务和 ImageNet 照片分类任务的 CNN 模型使用了最大范数约束。
所有层对每个隐藏单元的传入权重都施加了 L2 权重约束。
Nitish Srivastava 等人在其 2014 年题为《Dropout:一种防止神经网络过拟合的简单方法》的论文中,对 MNIST 手写数字分类任务的 MLP 和街景门牌号数据集的 CNN 使用了最大范数约束,并通过留出验证集配置了参数。
卷积层和全连接层中的权重都使用了最大范数正则化。
Jan Chorowski 等人在其 2015 年题为《基于注意力的语音识别模型》的论文中,使用 LSTM 和注意力模型进行语音识别,并将最大范数约束设置为 1。
我们首先使用列范数约束(最大范数 1)训练我们的模型……
使用权重约束的技巧
本节提供了一些关于如何在神经网络中使用权重约束的技巧。
适用于所有网络类型
权重约束是一种通用方法。
它们可以用于大多数(或许是所有)类型的神经网络模型,尤其包括最常见的网络类型:多层感知器、卷积神经网络和长短期记忆循环神经网络。
对于 LSTM,可能需要对输入和循环连接使用不同的约束或约束配置。
标准化输入数据
将输入变量重新缩放到相同尺度是一个良好的通用实践。
当输入变量具有不同尺度时,网络权重的尺度也会相应变化。这在使用权重约束时会引入一个问题,因为大权重会导致约束更频繁地触发。
可以通过对输入变量进行归一化或标准化来解决此问题。
使用更大的学习率
使用权重约束可以让你在网络训练过程中更加激进。
具体来说,可以使用更大的学习率,从而允许网络在每次更新时对权重进行更大的更新。
这被认为是使用权重约束的一个重要优点。例如将约束与 dropout 结合使用时
使用约束而非惩罚可以防止权重变得非常大,无论提议的权重更新有多大。这使得可以从一个非常大的学习率开始,并在学习过程中衰减,从而比从小型权重和小型学习率开始的方法对权重空间进行更彻底的搜索。
— 通过防止特征检测器的协同适应来改进神经网络,2012。
尝试其他约束
探索使用其他权重约束,例如最小和最大范围、非负权重等。
您还可以选择对某些权重使用约束,而对其他权重不使用,例如在 MLP 中不对偏差权重使用约束,或在 LSTM 中不对循环连接使用约束。
进一步阅读
如果您想深入了解,本节提供了更多关于该主题的资源。
书籍
- 7.2 范数惩罚作为约束优化,深度学习,2016。
论文
- Dropout:一种防止神经网络过拟合的简单方法, 2014.
- 秩、迹范数和最大范数, 2005.
- 通过防止特征检测器协同适应来改进神经网络, 2012.
文章
总结
在这篇文章中,您了解了如何使用权重约束正则化作为权重惩罚的替代方案,以减少深度神经网络中的过拟合。
具体来说,你学到了:
- 权重惩罚鼓励但不要求神经网络具有小权重。
- 权重约束,如 L2 范数和最大范数,可用于强制神经网络在训练期间具有小权重。
- 权重约束与其他正则化方法(如 dropout)结合使用时,可以提高泛化能力。
你有什么问题吗?
在下面的评论中提出你的问题,我会尽力回答。







你好 Jason,
有趣的帖子!这些思想和展示与权重正则化、dropout、归一化完美结合,……在其他帖子中也得到了很好的介绍……
现在我猜您正在考虑,我们需要通过具体的代码实现这些思想,解决一些机器学习/深度学习问题,以便明确了解 Keras 或 scikit_Learn 或其他 API 函数库如何具体地实现这些权重约束……
非常感谢您为这个庞大而普遍的社区免费工作并付出巨大努力,将这些技术和思想介绍给机器学习/深度学习技术的开发人员和爱好者!
我们欠您很多!
谢谢。
是的,我正在撰写一系列关于神经网络正则化的文章,最终会汇集成一本新书。
感谢您的新举措。我渴望阅读这本新书。谢谢!!!
谢谢!它将被命名为“更好的深度学习”。
它将重点关注
——更好的学习(训练方法)
——更好的泛化(正则化方法)
——更好的预测(集成方法)
这可能对某些读者有帮助。
https://arxiv.org/pdf/1803.06453.pdf
在这项工作中,我们讨论了一种名为条件梯度下降的优化方案,并展示了该方案在处理许多希望施加在神经网络权重上的约束方面非常强大。这项工作将在 AAAI-2019 发表。
感谢分享。
尊敬的先生,
通常,大多数正则化方法都倾向于减小权重的值。这就是它们避免过拟合的方式。
但我认为一个更大的权重或通常一个线性函数中更大的系数并不能增加其复杂性。
所以,我的问题是,更大的权重如何增加复杂性?
它们会影响节点的线性部分还是节点的非线性部分(激活函数)?
我不确定我是否同意,例如权重衰减(即 l1 和 l2 正则化)会降低权重值。
首先,感谢您的解释。在所有的正则化方法中,人们都试图减小权重以防止过拟合,但我很好奇我们如何能够增加权重?因为在我的项目中,我必须防止权重过小,因为权重有物理定义,我不能将它们丢弃或过度减小它们的值。所以,我的问题是如何获得较小的损失值但同时限制我的权重不能低于某个阈值?
不客气。
或许可以尝试从模型中移除所有正则化措施作为第一步。