和普通的机器学习算法一样,DNN也会遇到过拟合的问题,需要考虑泛化,这里我们就对DNN的正则化方法做一个总结。

一、L1&L2正则化

想到正则化,我们首先想到的就是L1正则化和L2正则化。L1正则化和L2正则化原理类似,这里重点讲述DNN的L2正则化。

而DNN的L2正则化通常的做法是 只针对与线性系数矩阵 J(W,b) = \frac{1}{2m}\sum\limits_{i=1}^{m}||a^L-y||_2^2 + \frac{\lambda}{2m}\sum\limits_{l=2}^L||w||_2^2\qquad \text{(2)} J ( W , b ) = 2 m 1 i = 1 m a L y 2 2 + 2 m λ l = 2 L w 2 2 (2)

W^l = W^l -\alpha \sum\limits_{i=1}^m \delta^{i,l}(a^{i, l-1})^T -\alpha \lambda W^l \qquad \text{(4)} W l = W l α i = 1 m δ i , l ( a i , l 1 ) T α λ W l (4)

注意到上式中的梯度计算中

类似的L2正则化方法可以用于交叉熵损失函数或者其他的DNN损失函数,这里就不累述了。

除了常见的L1&L2正则化,DNN还可以通过集成学习的思路正则化。集成学习主要有Boosting和Bagging两种思路。而DNN可以用Bagging的思路来正则化。常用的机器学习Bagging算法中,随机森林是最流行的。它通过随机采样构建若干个相互独立的弱决策树学习器,最后采用加权平均法或者投票法决定集成的输出。在DNN中,我们一样使用Bagging的思路。不过和随机森林不同的是,我们这里不是若干个决策树,而是若干个DNN的网络。

首先我们要对原始的 N 的个数不能太多,比如5-10个就可以了。

三、 DNN通过dropout 正则化

这里我们再讲一种和Bagging类似但是又不同的正则化方法: Dropout 。 这是DNN中最常用也是最有效的正则化方法。

所谓的Dropout指的是在用前向传播算法和反向传播算法训练DNN模型时,一批数据迭代时,随机的从全连接DNN网络中去掉一部分隐藏层的神经元。

比如我们本来的DNN模型对应的结构是这样的:
在这里插入图片描述

在对训练集中的一批数据进行训练时,我们随机去掉一部分隐藏层的神经元,并用去掉隐藏层的神经元的网络来拟合我们的一批训练数据。如下图,去掉了一半的隐藏层神经元:
在这里插入图片描述

然后用这个去掉隐藏层的神经元的网络来进行一轮迭代,更新所有的 W , b 。当然,这次用随机的方法去掉部分隐藏层后的残缺DNN网络和上次的残缺DNN网络并不相同。

如下图所示:
在这里插入图片描述

总结下dropout的方法: 每轮梯度下降迭代时,它需要将训练数据分成若干批,然后分批进行迭代,每批数据迭代时,需要将原始的DNN模型随机去掉部分隐藏层的神经元,用残缺的DNN模型来迭代更新$W,b¥。每批数据迭代更新完毕后,要将残缺的DNN模型恢复成原始的DNN模型。

从上面的描述可以看出dropout和Bagging的正则化思路还是很不相同的。dropout模型中的 W , b 参数,相互之间是独立的。当然他们每次使用基于原始数据集得到的分批的数据集来训练模型,这点是类似的。

使用基于dropout的正则化比基于bagging的正则化简单,这显而易见,当然天下没有免费的午餐,由于dropout会将原始数据分批迭代,因此原始数据集最好较大,否则模型可能会欠拟合。

四、DNN通过增强数据集正则化

增强模型泛化能力最好的办法是 有更多的训练数据 ,但是在实际应用中,更多的训练数据往往很难得到。有时候我们不得不去自己想办法能无中生有,来增加训练数据集,进而得到让模型泛化能力更强的目的。

对于我们传统的机器学习分类回归方法,增强数据集还是很难的。你无中生有出一组特征输入,却很难知道对应的特征输出是什么。但是对于DNN擅长的领域,比如图像识别,语音识别等则是有办法的。以图像识别领域为例,对于原始的数据集中的图像,我们可以将原始图像稍微的平移或者旋转一点点,则得到了一个新的图像。虽然这是一个新的图像,即样本的特征是新的,但是我们知道对应的特征输出和之前未平移旋转的图像是一样的。

举个例子,下面这个图像,我们的特征输出是5。
在这里插入图片描述

我们将原始的图像旋转15度,得到了一副新的图像如下:
在这里插入图片描述

我们现在得到了一个新的训练样本,输入特征和之前的训练样本不同,但是特征输出是一样的,我们可以确定这是5.

用类似的思路,我们可以对原始的数据集进行增强,进而得到增强DNN模型的泛化能力的目的。

五、其他DNN正则化方法

DNN的正则化的方法是很多的,还是持续的研究中。在 Deep Learning 这本书中,正则化是洋洋洒洒的一大章。里面提到的其他正则化方法有:Noise Robustness, Adversarial Training,Early Stopping等。如果大家对这些正则化方法感兴趣,可以去阅读Deep Learning这本书中的第七章。

【1】 深度神经网络(DNN)的正则化
转自文献1

【2】 An Overview of Regularization Techniques in Deep Learning (with Python code)
文献2有上述正则化的python例子,用Keras实现的

【3】 深度学习中的正则化策略综述(附Python代码)

和普通的机器学习算法一样,DNN也会遇到过拟合的问题,需要考虑泛化,这里我们就对DNN的正则化方法做一个总结。一、L1&L2正则化想到正则化,我们首先想到的就是L1正则化和L2正则化。L1正则化和L2正则化原理类似,这里重点讲述DNN的L2正则化。而DNN的L2正则化通常的做法是只针对与线性系数矩阵WWW,而不针对偏倚系数bbb。利用我们之前的机器学习的知识,我们很容易可以写出DNN... 正则化 常用于缓解模型过拟合。常用的有两种 正则化 策略 :1、通过对模型施加某些限制,增加优化约束条件;2、通过在模型优化过程中添加干扰,提高模型泛化能力。 为了完成本关任务,你需要掌握:1. L2 正则 项,2.如何给loss函数添加 正则 项,3. 随机失活函数 L2 正则 L2 正则化 公式非常简单,直接在原来的损失函数基础上加上权重参数的平方和: L=Ein​+λj∑​ωj2​ 其中,Ein​ 是未包含 正则化 项的训练样本误 2.提出了广义 正则 的概念,对于减少过拟合,提高泛化性能的 策略 统称为 正则 技术。 第一篇:A survey of regularization strategies for deep models(2019) 机器学习中很重要一点就是让一个算法有泛化性。没有免费午餐定理暗示了对于特定学习任务要有自己的算法设计。有一个调整算法适应问题的 策略 :核心是泛化能力的提升。 2015 Peng的一篇论文: 1. 正则化
什么是 正则化 ? 首先英文原文为regularization,直译应为规则化,简单来说就是对模型加入规则,加入我们的先验知识,如果觉得 正则化 太难理解,可以按照规则化来理解记忆。 切入正题, 正则化 说的就是对模型引入额外信息来防止模型过拟合与提高模型泛化性能的方法统称。一般是对模型复杂程度加以惩罚,目标是降低模型的复杂度(模型的结构化风险),根据奥卡姆剃刀原理,精度靠谱的情况下越简单的模型是越值得选...

二、DNN通过集成学习的思路正则化