正则化技术
正则化技术
1.过拟合
正则化技术用来防止过拟合。
所谓过拟合即训练过程中,训练集上的误差持续减少,而与此同时测试集上的误差增大的现象。
目标是追求模型对于没有见过的数据的预测效果(即泛化能力),而不是追求完全拟合训练数据
防止过拟合的方法
-
获取更多的数据
-
选择更合适的网络模型
-
早停法
连续多轮训练,在验证集上模型性能不再提升时,就停止训练
-
正则化技术
2.L2正则化
亦称权重衰减(weight decay),通过L2正则项使得模型参数不会过大,从而控制模型复杂度
2.1 L2范数
2.2 损失函数
未加正则项的损失函数
加上正则项之后的损失函数(λ是超参数)
2.3 为什么L2正则化能够起作用
直观理解1
过拟合的原因是由于网络模型的学习能力太过强太,我们需要使用正则化技术来削弱这一能力。通过在损失函数上加上正则项,若超参数λ设置成一个很大的值,在学习过程中即梯度下降的过程中会使得某些权重w近似于0,相当于在模型中删去了某些节点,简化了模型,进而防止过拟合
直观理解2
希望模型深度挖掘特征,即将其权重分散到许多特征中, 而不是过于依赖少数潜在的虚假关联——d2l:4.6
3.Dropout
3.1 定义
相当于一个正则项,在隐藏层中间加入噪声,提高模型鲁棒性,用来降低过拟合的。在前向传播过程中,前一个层计算并激活之后,进行一次dropout处理,以 p 的概率将输出置为0,具体公式如下
此公式保证了h'的期望仍为h
另一种理解:dropout的巧妙之处在于,相当于在一个模型的训练过程中,综合考虑了多个模型,对于每一个输入,都是不同的神经网络模型。
注意
- 只在训练过程中使用
- 应用在多层前馈神经网络隐藏层输出上(多层感知机)
- 丢弃法将输出项随机置为0来控制模型复杂性
- 丢弃概率p为控制模型复杂性的超参数
3.2 参数设置
dropout中以p的概率输出为0,其中p是一个超参数,不同层次之间p应该如何设置?
进行一个实验,然后尝试总结
实验模型如下
net = nn.Sequential(
nn.Flatten(),
nn.Linear(784, 256), # 隐藏层1
nn.ReLU(),
nn.Dropout(dropout1),
nn.Linear(256, 256), # 隐藏层2
nn.ReLU(),
nn.Dropout(dropout2),
nn.Linear(256, 10),
)
-
实验1:dropout1, dropout2 = 0.2, 0.5
-
实验2:dropout1, dropout2 = 0.5, 0.2
可以观察到,在训练20轮的情况下,实验2的表现要比实验1号好,应为test acc和train acc之间的间隔要更小,随着训练的继续进行,实验2更不容易发生过拟合,在dropout1, dropout2 = 0.5, 0.2
的参数设置下,dropout起到的更好的正则化效果
直观理解如下,参考:https://www.zhihu.com/people/xie-yue-huo-hu/posts
- 前面层抽取的是比较底层的语义信息,有较多的无用信息冗余通过神经元,从而使得网络记住这些冗余信息而学不到关键信息(导致过拟合),用较大Dropout较好,后面层主管高层抽象语义信息,较为关键,是把握识别整体的关键部分,用较小Dropout较好
- 一般前面层全连接数目比较大,抽取信息量比较多,自然带来冗余信息较多,那么多的数目连接,可以通过较
大Dropout丢弃掉大部分的全连接,实际上因为基数大,剩下的没有置0的连接数目还是很多的
参考:
2.3. 线性代数 — 动手学深度学习 2.0.0 documentation (d2l.ai)
4.5. 权重衰减 — 动手学深度学习 2.0.0 documentation (d2l.ai)