机器学习06-正则化

机器学习06-正则化

文章目录

  • 机器学习06-正则化
    • 0-核心逻辑脉络
    • 1-参考网址
    • 3-大模型训练中的正则化
      • 1.正则化的定义与作用
      • 2.常见的正则化方法及其应用场景
        • 2.1 L1正则化(Lasso)
        • 2.2 L2正则化(Ridge)
        • 2.3 弹性网络正则化(Elastic Net)
        • 2.4 Dropout
        • 2.5 Batch Normalization
        • 2.6 早停(Early Stopping)
        • 2.7 权重衰减(Weight Decay)
        • 2.8 梯度惩罚(Gradient Penalty)
        • 2.9 特征选择和降维
      • 3.不同正则化方法的对比
    • 4-Batch Normalization
      • 简单示例
        • 输入数据
        • 计算步骤
        • 总结
      • 代码实现
    • 5-Layer Normalization
      • 简单示例
        • 输入数据
        • 计算步骤
        • 总结
      • 代码实现

0-核心逻辑脉络

  • 1)欠拟合和过拟合的含义
  • 2)过拟合的解决办法
  • 3)常用的正则化之间的对比
  • 4)Dropout在模型训练的时候有用,在模型预测的时候不会用
  • 5)L1和L2用在什么地方->损失函数+正则化函数(用来约束损失函数不要因为某个参数的权重而倾斜)->
    类比:你赚钱快是不是,我用梯度缴税(正则约束)去治你,再有钱你也麻头皮
  • 6)Layer Normalization正则化->多用于文本训练,针对每个句子(样本)进行正则化
  • 7)Layer Normalization(层归一化)通过归一化每个样本的特征向量来实现这一点,而不是像Batch Normalization(批归一化)那样归一化整个批次的数据。
  • 8)Batch Normalization(批归一化)通过对每个批次的数据进行归一化来实现这一点,具体来说,是对每个特征维度在批次中的分布进行归一化。

1-参考网址

  • 1)解读正则化:https://www.bilibili.com/video/BV1Cm421j7dw
  • 2)最清晰好懂的 Layernorm 原理解析:https://zhuanlan.zhihu.com/p/751292473

  • 正则化知识概念

  • 常用的正则化


3-大模型训练中的正则化

1.正则化的定义与作用

正则化是机器学习和深度学习中的一种技术,旨在通过在模型的损失函数中添加惩罚项来控制模型的复杂度,从而防止模型在训练数据上过度拟合,提高模型的泛化能力。常见的正则化方法包括L1正则化、L2正则化、弹性网络正则化、Dropout、Batch
Normalization等。

2.常见的正则化方法及其应用场景

2.1 L1正则化(Lasso)

原理:通过在损失函数中添加特征权重的绝对值和,使得某些特征权重减小到零,从而实现特征选择。
应用场景:适用于高维数据和稀疏数据,特别是在特征数量大于样本数量时。
优点:可以实现特征选择,减少模型参数数量。
缺点:可能导致模型参数不稳定。

2.2 L2正则化(Ridge)

原理:通过在损失函数中添加特征权重的平方和,鼓励权重均匀分布,减小模型复杂性。
应用场景:适用于一般情况下有较少噪声的数据集。
优点:模型参数稳定,易于解释。
缺点:无法实现特征选择。

2.3 弹性网络正则化(Elastic Net)

原理:结合了L1和L2正则化,通过调节参数来平衡两者的影响。
应用场景:适用于大量特征且存在多重共线性的问题时。
优点:结合了L1和L2正则化的优点,可以同时实现特征选择和参数压缩。
缺点:参数选择较为复杂。

2.4 Dropout

原理:在训练过程中随机忽略神经网络中的一部分神经元,从而减少网络对特定神经元的依赖,提高泛化能力。
应用场景:广泛应用于深度学习中的神经网络模型训练时。
优点:可以有效防止过拟合,提高模型的泛化能力。
缺点:可能会增加训练时间。

2.5 Batch Normalization

原理:通过对每一层的输入进行标准化,加速训练过程并提高模型的泛化能力。
应用场景:广泛应用于深度学习中的各种神经网络模型。
优点:可以加速训练过程,提高模型的稳定性和泛化能力。
缺点:增加了模型的复杂度和计算量。

2.6 早停(Early Stopping)

原理:在训练过程中,当验证集上的性能不再提升时,提前停止训练,以防止过拟合。
应用场景:适用于各种机器学习和深度学习模型。
优点:简单有效,可以防止过拟合。
缺点:可能会导致模型欠拟合,需要合理选择停止条件。

2.7 权重衰减(Weight Decay)

原理:与L2正则化相似,通过在优化过程中引入权重的平方惩罚项来限制权重的大小,从而减少模型的复杂度。
应用场景:广泛应用于深度学习的优化过程中,尤其是针对大规模模型。
优点:能有效防止网络过拟合,尤其是在训练数据有限时。
缺点:与L2正则化类似,无法实现特征选择。

2.8 梯度惩罚(Gradient Penalty)

原理:对神经网络的梯度大小进行正则化,目的是约束网络的梯度不至于过大,避免过拟合。
应用场景:在对抗训练、生成对抗网络(GAN)和强化学习中具有广泛应用。
优点:可以促使模型学习到更加平滑的决策边界,从而提高模型的泛化能力。
缺点:增加了模型的复杂度和计算量。

2.9 特征选择和降维

原理:通过选择对预测有用的特征或对数据进行降维(如PCA)来减少模型的输入维度,从而降低模型复杂度。
应用场景:广泛应用于机器学习中的监督学习任务,尤其是高维数据集的处理。
优点:可以减少过拟合,提高模型的可解释性和计算效率。
缺点:可能会丢失一些有用的信息。

3.不同正则化方法的对比

正则化方法原理优点缺点适用场景
L1正则化添加权重的绝对值和实现特征选择,减少参数数量参数不稳定高维稀疏数据
L2正则化添加权重的平方和参数稳定,易于解释无法实现特征选择一般数据集
弹性网络结合L1和L2正则化同时实现特征选择和参数压缩参数选择复杂多重共线性数据
Dropout随机忽略神经元防止过拟合,提高泛化能力增加训练时间神经网络模型
Batch Normalization输入标准化加速训练,提高稳定性增加复杂度各种神经网络
Layer Normalization每一层各特征维度的标准化提升梯度流动稳定性,适合更深层模型计算成本高RNN、Transformer、小批量数据
早停提前停止训练防止过拟合可能欠拟合各种模型
权重衰减权重平方惩罚防止过拟合无法特征选择大规模模型
梯度惩罚梯度大小正则化学习平滑决策边界增加复杂度对抗训练、GAN
特征选择和降维选择有用特征或降维减少过拟合,提高效率可能丢失信息高维数据集

4-Batch Normalization

Batch Normalization(批归一化)是一种用于神经网络的技术,旨在加快训练速度并提高模型性能。它通过对每个批次的数据进行归一化来实现这一点,具体来说,是对每个特征维度在批次中的分布进行归一化。

简单示例

假设我们有一个简单的神经网络,其中有一个全连接层(Fully Connected Layer),输入是一个形状为 (batch_size, features)
的张量。我们以一个具体的例子来说明Batch Normalization的工作原理。

输入数据

假设我们有一个小批量数据,大小为 batch_size = 2,每个样本有 features = 3 个特征。输入数据如下:

x = [[0.8, -1.2, 0.5],[1.0, 0.3, -0.7]]
计算步骤
  1. 计算每个特征维度的均值和方差

    • 对于第一个特征维度 [0.8, 1.0]
      • 均值:mean1 = (0.8 + 1.0) / 2 = 0.9
      • 方差:var1 = [(0.8 - 0.9)^2 + (1.0 - 0.9)^2] / 2 = 0.01
    • 对于第二个特征维度 [-1.2, 0.3]
      • 均值:mean2 = (-1.2 + 0.3) / 2 = -0.45
      • 方差:var2 = [(-1.2 - (-0.45))^2 + (0.3 - (-0.45))^2] / 2 = 0.9025
    • 对于第三个特征维度 [0.5, -0.7]
      • 均值:mean3 = (0.5 + (-0.7)) / 2 = -0.1
      • 方差:var3 = [(0.5 - (-0.1))^2 + (-0.7 - (-0.1))^2] / 2 = 0.18
  2. 归一化

    • 对于第一个特征维度:
      normalized1 = [(0.8 - 0.9) / sqrt(0.01 + eps),(1.0 - 0.9) / sqrt(0.01 + eps)]
      
      其中 eps 是一个很小的数,用于防止除零错误。
    • 对于第二个特征维度:
      normalized2 = [(-1.2 - (-0.45)) / sqrt(0.9025 + eps),(0.3 - (-0.45)) / sqrt(0.9025 + eps)]
      
    • 对于第三个特征维度:
      normalized3 = [(0.5 - (-0.1)) / sqrt(0.18 + eps),(-0.7 - (-0.1)) / sqrt(0.18 + eps)]
      
  3. 线性变换

    • 归一化后的数据会通过一个线性变换参数 gammabeta 进行调整。
      output1 = gamma1 * normalized1 + beta1
      output2 = gamma2 * normalized2 + beta2
      output3 = gamma3 * normalized3 + beta3
      
总结

通过Batch Normalization,我们为每个特征维度计算批次内的均值和方差,并进行归一化,这样可以确保每个特征维度在批次中的分布更加稳定,从而有助于模型更好地学习和收敛。这种方法有效地减少了内部协变量偏移(Internal
Covariate Shift),提高了训练的稳定性和速度。

代码实现

在实际的深度学习框架中,Batch Normalization通常通过以下方式实现:

import torch
import torch.nn as nn# 定义Batch Normalization
batch_norm = nn.BatchNorm1d(num_features=3)# 输入数据
x = torch.tensor([[0.8, -1.2, 0.5],[1.0, 0.3, -0.7]], dtype=torch.float32)# 应用Batch Normalization
output = batch_norm(x)print(output)

这个简单的示例展示了Batch Normalization的基本操作流程。


5-Layer Normalization

Layer Normalization(层归一化)是一种用于神经网络的正则化技术,旨在提高模型的训练稳定性和收敛速度。它通过归一化每个样本的特征向量来实现这一点,而不是像Batch
Normalization(批归一化)那样归一化整个批次的数据。

简单示例

假设我们有一个简单的神经网络,其中有一个全连接层(Fully Connected Layer),输入是一个形状为 (batch_size, features)
的张量。我们以一个具体的例子来说明Layer Normalization的工作原理。

输入数据

假设我们有一个小批量数据,大小为 batch_size = 2,每个样本有 features = 3 个特征。输入数据如下:

x = [[0.8, -1.2, 0.5],[1.0, 0.3, -0.7]]
计算步骤
  1. 计算每个样本的均值和方差

    • 对于第一个样本 [0.8, -1.2, 0.5]
      • 均值:mean1 = (0.8 + (-1.2) + 0.5) / 3 = 0.0333
      • 方差:var1 = [(0.8 - 0.0333)^2 + (-1.2 - 0.0333)^2 + (0.5 - 0.0333)^2] / 3 = 0.7667
    • 对于第二个样本 [1.0, 0.3, -0.7]
      • 均值:mean2 = (1.0 + 0.3 + (-0.7)) / 3 = 0.2
      • 方差:var2 = [(1.0 - 0.2)^2 + (0.3 - 0.2)^2 + (-0.7 - 0.2)^2] / 3 = 0.5467
  2. 归一化

    • 对于第一个样本:
      normalized1 = [(0.8 - 0.0333) / sqrt(0.7667 + eps),(-1.2 - 0.0333) / sqrt(0.7667 + eps),(0.5 - 0.0333) / sqrt(0.7667 + eps)]
      
      其中 eps 是一个很小的数,用于防止除零错误。
    • 对于第二个样本:
      normalized2 = [(1.0 - 0.2) / sqrt(0.5467 + eps),(0.3 - 0.2) / sqrt(0.5467 + eps),(-0.7 - 0.2) / sqrt(0.5467 + eps)]
      
  3. 线性变换

    • 归一化后的数据会通过一个线性变换参数 gammabeta 进行调整。
      output1 = gamma * normalized1 + beta
      output2 = gamma * normalized2 + beta
      
总结

通过Layer Normalization,我们为每个样本独立地计算均值和方差,并进行归一化,这样可以确保每个样本在特征维度上的分布更加稳定,从而有助于模型更好地学习和收敛。

代码实现

在实际的深度学习框架中,Layer Normalization通常通过以下方式实现:

import torch
import torch.nn as nn# 定义Layer Normalization
layer_norm = nn.LayerNorm(normalized_shape=[3])# 输入数据
x = torch.tensor([[0.8, -1.2, 0.5],[1.0, 0.3, -0.7]], dtype=torch.float32)# 应用Layer Normalization
output = layer_norm(x)print(output)

这个简单的示例展示了Layer Normalization的基本操作流程。


本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/2322.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

windows 极速安装 Linux (Ubuntu)-- 无需虚拟机

1. 安装 WSL 和 Ubuntu 打开命令行,执行 WSL --install -d ubuntu若报错,则先执行 WSL --update2. 重启电脑 因安装了子系统,需重启电脑才生效 3. 配置 Ubuntu 的账号密码 打开 Ubuntu 的命令行 按提示,输入账号,密…

微信小程序实现个人中心页面

文章目录 1. 官方文档教程2. 编写静态页面3. 关于作者其它项目视频教程介绍 1. 官方文档教程 https://developers.weixin.qq.com/miniprogram/dev/framework/ 2. 编写静态页面 mine.wxml布局文件 <!--index.wxml--> <navigation-bar title"个人中心" ba…

Qt/C++进程间通信:QSharedMemory 使用详解(附演示Demo)

在开发跨进程应用程序时&#xff0c;进程间通信&#xff08;IPC&#xff09;是一个关键问题。Qt 框架提供了多种 IPC 技术&#xff0c;其中 QSharedMemory 是一种高效的共享内存方式&#xff0c;可以实现多个进程之间快速交换数据。本文将详细讲解 QSharedMemory 的概念、用法及…

[UE4图文系列] 5.字符串转中文乱码问题说明

原文连接&#xff1a;[UE4图文系列] 5.字符串转中文乱码问题说明 - 哔哩哔哩 本例以原生C和UE4 C字符串传输中出现的中文乱码问题进行说明 一.乱码示例: 1.直接用中文字符串初始化FString,在蓝图中进行打印 FString GetStrWithChinese() {FString fstr"这是一句中文"…

人工智能任务19-基于BERT、ELMO模型对诈骗信息文本进行识别与应用

大家好&#xff0c;我是微学AI&#xff0c;今天给大家介绍一下人工智能任务19-基于BERT、ELMO模型对诈骗信息文本进行识别与应用。近日&#xff0c;演员王星因接到一份看似来自知名公司的拍戏邀约&#xff0c;被骗至泰国并最终被带到缅甸。这一事件迅速引发了社会的广泛关注。该…

题解 CodeForces 430B Balls Game 栈 C/C++

题目传送门&#xff1a; Problem - B - Codeforceshttps://mirror.codeforces.com/contest/430/problem/B翻译&#xff1a; Iahub正在为国际信息学奥林匹克竞赛&#xff08;IOI&#xff09;做准备。有什么比玩一个类似祖玛的游戏更好的训练方法呢&#xff1f; 一排中有n个球…

通过proto文件构建 完整的 gRPC 服务端和客户端案例

基础教程-简单案例&#xff08;快入入门java-grpc框架&#xff09; 参考官方入门案例教程&#xff1a;里面我看proto编译&#xff0c;其实直接用maven就能直接将.proto文件编译成java代码。快速入门 | Java | gRPC 框架https://grpc.org.cn/docs/languages/java/quickstart/ …

Mysql--运维篇--备份和恢复(逻辑备份,mysqldump,物理备份,热备份,温备份,冷备份,二进制文件备份和恢复等)

MySQL 提供了多种备份方式&#xff0c;每种方式适用于不同的场景和需求。根据备份的粒度、速度、恢复时间和对数据库的影响&#xff0c;可以选择合适的备份策略。主要备份方式有三大类&#xff1a;逻辑备份&#xff08;mysqldump&#xff09;&#xff0c;物理备份和二进制文件备…

如何修复Android上未安装的应用程序

在Android设备上安装应用程序通常是一个简单的过程。然而&#xff0c;“ Android上未安装应用程序”是一种常见的智能手机错误消息&#xff0c;由于一个或多个原因而经常遇到。发现由于即将出现故障而无法充分利用手机&#xff0c;这当然会非常令人沮丧&#xff0c;但幸运的是&…

干净卸载Windows的Node.js环境的方法

本文介绍在Windows电脑中&#xff0c;彻底删除Node.js环境的方法。 在之前的文章Windows系统下载、部署Node.js与npm环境的方法&#xff08;https://blog.csdn.net/zhebushibiaoshifu/article/details/144810076&#xff09;中&#xff0c;我们介绍过在Windows电脑中&#xff0…

初始Java4

目录 一.继承 1.定义&#xff1a; 2.继承的语法&#xff1a; 3.子类访问父类 4.子类构造方法 5.super与this 6.继承方法 7.final关键字 &#xff08;1&#xff09;.变量不变 &#xff08;2&#xff09;.方法不变 &#xff08;3&#xff09;.类不可继承 8.继承与组合…

算法竞赛(蓝桥杯)贪心算法1——数塔问题

题目描述 有如下所示的数塔&#xff0c;要求从底层走到顶层&#xff0c;若每一步只能走到相邻的结点&#xff0c;则经过的结点的数字之和最大是多少&#xff1f; 输入 输入数据首先包括一个整数整数 N (1≤N≤100)&#xff0c;表示数塔的高度&#xff0c;接下来用 N 行数字表示…

MATLAB学习笔记-table

1.在table中叠加table table 的每一列具有固定的数据类型。如果要让表的所有单元格都可以任意填充&#xff0c;就得让每一列都是 cell 类型&#xff0c;这样表中每个单元格都是“一个元胞”。创建时可以先构造一个 空 cell 数组&#xff08;大小为行数列数&#xff09;&#x…

RabbitMQ(三)

RabbitMQ中的各模式及其用法 工作队列模式一、生产者代码1、封装工具类2、编写代码3、发送消息效果 二、消费者代码1、编写代码2、运行效果 发布订阅模式一、生产者代码二、消费者代码1、消费者1号2、消费者2号 三、运行效果四、小结 路由模式一、生产者代码二、消费者代码1、消…

django在线考试系统

Django在线考试系统是一种基于Django框架开发的在线考试平台&#xff0c;它提供了完整的在线考试解决方案。 一、系统概述 Django在线考试系统旨在为用户提供便捷、高效的在线考试环境&#xff0c;满足教育机构、企业、个人等不同场景下的考试需求。通过该系统&#xff0c;用…

Windows部署NVM并下载多版本Node.js的方法(含删除原有Node的方法)

本文介绍在Windows电脑中&#xff0c;下载、部署NVM&#xff08;node.js version management&#xff09;环境&#xff0c;并基于其安装不同版本的Node.js的方法。 在之前的文章Windows系统下载、部署Node.js与npm环境的方法&#xff08;https://blog.csdn.net/zhebushibiaoshi…

【Rust练习】28.use and pub

练习题来自&#xff1a;https://practice-zh.course.rs/crate-module/use-pub.html 1 使用 use 可以将两个同名类型引入到当前作用域中&#xff0c;但是别忘了 as 关键字. use std::fmt::Result; use std::io::Result;fn main() {}利用as可以将重名的内容取别名&#xff1a;…

React第二十二章(useDebugValue)

useDebugValue useDebugValue 是一个专为开发者调试自定义 Hook 而设计的 React Hook。它允许你在 React 开发者工具中为自定义 Hook 添加自定义的调试值。 用法 const debugValue useDebugValue(value)参数说明 入参 value: 要在 React DevTools 中显示的值formatter?:…

一体机cell服务器更换内存步骤

一体机cell服务器更换内存步骤&#xff1a; #1、确认grdidisk状态 cellcli -e list griddisk attribute name,asmmodestatus,asmdeactivationoutcome #2、offline griddisk cellcli -e alter griddisk all inactive #3、确认全部offline后进行关机操作 shutdown -h now #4、开…

VSCode连接Github的重重困难及解决方案!

一、背景&#xff1a; 我首先在github创建了一个新的项目&#xff0c;并自动创建了readme文件其次在vscode创建项目并写了两个文件在我想将vscode的项目上传到对应的github上时&#xff0c;错误出现了 二、报错及解决方案&#xff1a; 1.解决方案&#xff1a; 需要在git上配置用…