当前位置: 首页 > news >正文

过拟合 正则化(L1,L2,Dropout)

推荐视频:

什么是 L1 L2 正规化 正则化 Regularization (深度学习 deep learning)_哔哩哔哩_bilibili

如何解决过拟合问题?L1、L2正则化及Dropout正则化讲解_哔哩哔哩_bilibili


过拟合

什么是过拟合?

过拟合是指模型在训练数据上表现良好(损失小,准确率高),但在新数据上表现很差的现象。

如何判断过拟合?

(1) 训练准确率高,测试阶段准确率明显变低;

(2) 训练损失持续下降,但是验证损失先将后升;

如何解决过拟合?

(1) 数据层面:增加数据量,减少对训练集噪声的记忆;数据增强,例如图像翻转、缩放、加噪等;

(2) 模型层面:减少模型参数,降低模型复杂度;

(3) 训练层面:调整训练策略,减少训练轮次,早停等手段;

(4) 正则化: L1,L2,Dropout等方法


L1,L2正则化

什么是正则化?

正则化(Regularization)是在损失函数中加入对模型参数的约束项,目的是让模型参数不过大、防止模型过度学习训练集的细节,从而提升对新数据的预测能力。

以线性回归为例,普通损失函数:

Loss = MSE = \frac{1}{n}\sum_{i=1}^{n}(y_i-\hat{y_i})^2

L1正则化:在损失函数后面加上所有参数绝对值的和,起到“让参数变小,甚至变为0”的作用。

Loss_{L1} = MSE+\lambda \sum_{j=1}^{p}\begin{vmatrix} w_j \end{vmatrix}

L1正则化会让很多参数变为0,实现自动特征选择(有利于高维稀疏数据);

也就是说部分参数会变为0,相当于直接去除部分特征。

L2正则化:在损失函数后加上所有参数的平方和,起到“让参数变小,但不为0”的作用。

Loss_{L2} = MSE+\lambda \sum_{j=1}^{p}w_j^2

  • 其中λ 是正则化系数,控制正则化项权重,w是参数。

L2会参数收缩,把参数压缩接近0,但一般不会变成0。

正则化后参数普遍较小,但不会直接为0,保留了所有特征。

正则化可视化

蓝色等高线为损失函数J(w),正则化的作用是让最终参数点既要尽量靠近损失函数最优点,又不能超出正则化约束区域。

目标是在约束区域内,找到使损失函数最小的点。

从损失函数的极小点出发,画等高线,等高线不断扩大,直到第一次碰到约束边界,这个交点就是正则化下的最优解。

  • 横轴为参数 w1,纵轴为参数 w2​。

  • 蓝色椭圆等高线代表“损失函数”J(θ)的等值线,也就是一组w1,w2损失值一样的点。

  • 橙色圆形/菱形分别是L2和L1正则化的“约束边界”:

L2\begin{vmatrix} w \end{vmatrix}_2 = \sqrt{w_1^2+w_2^2}\leqslant t,边界为圆。

L1\begin{vmatrix} w \end{vmatrix}_1 = \begin{vmatrix} w_1 \end{vmatrix} +\begin{vmatrix} w_2 \end{vmatrix} \leqslant t,边界为菱形。

  • 白色圆点为最优点(损失函数最小且满足正则化约束)。

  • L1的边界拐角容易与坐标轴重合,导致稀疏解(某些参数为0)。

从图像理解L2是收缩,L1产生稀疏:

根据上面动图,其实蓝色等高线可能存在各种方向,这个是不定的。

在各种情况下的等高线扩大,因为L1是菱形,其实和蓝色等高线首次相交的地方更可能是边界的角点(在坐标轴上);

L2是个圆,等高线碰到圆边界通常是某个斜的方向,w1​和w2都不为0,只是都被约束得更小了。


Dropout正则化

dropout是一种在神经网络训练过程中的“随机失活”技术。

核心思想在每一次训练前向传播时,随机“丢弃”一部分神经元(即让它们输出0、不参与本次计算),而不是每次都用全部神经元。

通过随机失活的方式,使得模型不会过多依赖某个“强特征”或“偶然相关的信息”--->让模型更加稳健、泛化能力更强,减少过拟合

一般不用于输入层、卷积层、小模型、小数据。


L1,L2,Dropout区别与关联

正则方法适用场景优点缺点
L1常用于做特征选择(比如logistic/Lasso回归),高维数据优选变量选择,稀疏,易解释有时优化不稳定,稀疏后性能未必最好
L2普遍适用,异常点噪声影响大简单有效,收敛快,理论基础好不会直接产生稀疏性
Dropout深度神经网络,尤其全连接层强大抑制过拟合,提升泛化训练慢,不适合小数据(容易欠拟合)、RNN等
  • Dropout适合深度/宽大网络的“泛化能力提升”,和L1/L2合用可效果更佳。
  • L1/L2可以用于CNN参数,Dropout一般用于MLP/全连接层。
import torch.nn as nnmodel = nn.Sequential(nn.Linear(1000, 256),nn.ReLU(),nn.Dropout(p=0.5),      # Dropoutnn.Linear(256, 10)
)# L2正则在优化器设置
optimizer = torch.optim.Adam(model.parameters(), weight_decay=1e-5)  # L2正则# L1正则
l1_lambda = 1e-4
l1_loss = sum(p.abs().sum() for p in model.parameters()) * l1_lambda
loss = criterion(outputs, targets) + l1_loss

http://www.dtcms.com/a/362290.html

相关文章:

  • linux内核 - 文件系统相关的几个概念介绍
  • Ceres学习笔记
  • 从理论到RTL,实战实现高可靠ECC校验(附完整开源代码/脚本)(3) RTL实现实战
  • 智慧班牌系统基于Java+Vue技术栈构建,实现教育信息化综合管理。
  • ES6手录01-let与const
  • 2024 年 AI 技术全景图:大模型轻量化、多模态融合如何重塑产业边界?
  • c#:抽象类中的方法
  • Windows 使用 Compass 访问MongoDb
  • 笔记:现代操作系统:原理与实现(1)
  • 利用本地电脑上的MobaXterm连接虚拟机上的Ubuntu
  • 【Python知识】Playwright for Python 脚本录制指南
  • Nature Communications发布智能光电探测研究:实现0.3-1.1 THz波段强度-偏振-频率连续高维感知
  • 第7.6节:awk语言 break 语句
  • 刷题日记0901
  • 动态代理设计模式
  • 从Redisson分布式锁看锁的设计思路
  • 自动化运维-ansible中的变量运用
  • LeetCode Hot 100 Python (61~70)
  • 芯片的可编程字
  • Ps画笔和橡皮擦工具
  • 分布式事务相关02
  • 国内服务器如何安装docker或者是1panel
  • 关闭页面强制清除所有循环定时器
  • Linux 进程间通信(IPC)
  • Android14 init.rc各个阶段的主要操作
  • authentication port-control auto 和 dot1x port-control auto
  • Shell 编程:正则表达式与文本处理器
  • 软考-操作系统-错题收集(1)进程P的页面变换
  • 分布式一致性算法相关
  • 【Audio】切换至静音或振动模式时媒体音自动置 0