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

【ML】为什么要做batch normlization,怎么做batch normlization

为什么要做batch normlization,怎么做batch normlization

      • 1. batch normlization
        • 1.1 批量归一化是什么:
        • 1.2 为什么要做批量归一化:
      • 2. feature normalization
        • 2.1 特征归一化是什么:
        • 2.2 为什么要做特征归一化:
      • 3. batch normlization test

1. batch normlization

Batch Normalization(批量归一化)是一种在深度神经网络中常用的技术,特别是在训练期间,用于提高训练速度、稳定性和性能。它由 Sergey Ioffe 和 Christian Szegedy 在 2015 年提出。

1.1 批量归一化是什么:

批量归一化操作涉及对神经网络中的每个小批量(batch)数据进行归一化处理。具体来说,它对每个特征通道(feature map)的激活值进行归一化,使其具有固定的均值和方差。归一化过程如下:

  1. 计算批次的均值和方差
    对于每个特征通道,计算小批量数据的均值 (\mu_B) 和方差 (\sigma_B^2)。

  2. 归一化
    使用批次的均值和方差对数据进行归一化,得到:
    [ \hat{x} = \frac{x - \mu_B}{\sqrt{\sigma_B^2 + \epsilon}} ]
    其中 (\epsilon) 是一个很小的常数,用来保证数值稳定性。

  3. 缩放和平移
    然后通过两个可学习的参数 (\gamma)(缩放因子)和 (\beta)(偏移量)对归一化后的数据进行缩放和平移:
    [ y = \gamma \hat{x} + \beta ]

1.2 为什么要做批量归一化:
  1. 加速训练
    批量归一化可以显著加速训练过程,因为它减少了训练初期的震荡,使得优化算法能够更快地收敛。

  2. 提高稳定性
    它使得每层网络的输入分布更加稳定,减少了梯度消失或爆炸的风险。

  3. 允许更高的学习率
    由于批量归一化减少了深度网络中的内部协变量偏移问题,可以使用更高的学习率,从而加快训练速度。

  4. 减少对初始化的依赖
    传统的网络训练对权重初始化非常敏感,而批量归一化减少了这种敏感性,使得网络更容易训练。

  5. 作为正则化
    批量归一化在一定程度上起到了正则化的作用,可以减少过拟合。

  6. 允许更深层网络
    由于它有助于缓解梯度消失和梯度爆炸问题,因此使得训练更深的网络成为可能。

  7. 加速收敛
    批量归一化可以使得训练过程中的损失函数更快地下降,从而加速收敛。

尽管批量归一化带来了许多好处,但它也有一些局限性,比如可能会轻微增加模型的计算负担,以及在小批量大小下可能导致训练和推理不一致的问题。在某些情况下,研究者可能会使用其他的归一化技术,如 Layer Normalization、Instance Normalization 或 Group Normalization。

在这里插入图片描述

2. feature normalization

Feature normalization(特征归一化)是深度学习和机器学习中用于数据预处理的一种技术,旨在将数据的特征缩放到统一的范围或分布。这通常有助于提高模型的训练效率和性能。

2.1 特征归一化是什么:

特征归一化通常包括以下几种类型:

  1. 零均值归一化(Zero-Mean Normalization):
    将特征的均值调整为0,即通过减去特征的均值来实现。

  2. 单位方差归一化(Unit Variance Normalization):
    将特征缩放到单位方差,即在零均值归一化的基础上,再除以特征的标准差。

  3. 最小-最大归一化(Min-Max Normalization):
    将特征缩放到指定的 [a, b] 范围内,通常是 [0, 1],通过线性变换实现。

  4. Z得分归一化(Z-Score Normalization):
    基于特征的均值和标准差进行归一化,使得结果具有单位方差和零均值。

2.2 为什么要做特征归一化:
  1. 提高模型收敛速度
    归一化可以加速基于梯度下降的优化算法的收敛速度,因为梯度在各个方向上的尺度一致。

  2. 防止某些特征占优
    当特征在不同尺度上时,尺度较大的特征可能会在模型训练中占主导地位,归一化可以避免这种情况。

  3. 提高模型泛化能力
    归一化有助于模型学习到更加一般化的特征表示,从而提高模型对新数据的泛化能力。

  4. 稳定训练过程
    归一化可以减少训练过程中的数值不稳定性,如梯度爆炸或消失问题。

  5. 适应不同模型的需求
    某些模型,如支持向量机(SVM)和 K-近邻(KNN)等,对特征的尺度非常敏感,归一化是这些模型训练的前提。

  6. 改善模型性能
    在某些情况下,归一化可以显著提高模型的预测精度。

  7. 便于比较不同特征
    当特征在不同的量纲和尺度时,归一化后可以更容易地比较和组合不同特征。

  8. 数据预处理的一部分
    特征归一化是数据预处理的重要步骤之一,有助于后续的特征工程和模型训练。

然而,并非所有情况下都需要特征归一化。例如,一些基于树的模型(如决策树、随机森林)和一些深度学习模型(如使用批量归一化的卷积神经网络)可能不依赖于特征的尺度。此外,如果数据集中的特征已经接近归一化,或者特征的尺度对于问题本身具有重要意义,则可能不需要进行归一化。

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

3. batch normlization test

test 阶段如何获取 train 呢? 如何更新 均值和方差,如果使用pytorch实现,那么pytorch再训练阶段,(假设batch =64) ,在数据陆续进入 train的batch个过程中 , 会维持更新 均值和方差,当test阶段可以调用这个更新的均值和方差
在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

http://www.lryc.cn/news/416704.html

相关文章:

  • 【C++指南】命名空间
  • RocketMQ Dashboard安装
  • 前端web开发HTML+CSS3+移动web(0基础,超详细)——第3天
  • 认识MySQL
  • 尚品汇-创建ES索引库(二十七)
  • 设计模式-六大原则
  • MyBatis搭建和增删改查
  • 【一图学技术】6.反向代理 vs API网关 vs 负载均衡的原理和使用场景
  • python爬虫番外篇 | Reuqests库高级用法(1)
  • 【链表OJ】常见面试题 3
  • Linux学习笔记9(Linux包管理)
  • 论文阅读《Geometric deep learning of RNA structure》
  • 宏集方案 | 传统建筑智能化改造,迈向物联新时代
  • 如果服务器更改Web端口会减少被攻击的风险吗?
  • vim列编辑模式
  • 如何实现pxe安装部署
  • 机器学习常见模型
  • 【python案例】基于Python 爬虫的房地产数据可视化分析设计与实现
  • 如何在Python中诊断和解决内存溢出问题
  • 什么是爬虫软件?这两个爬虫神器你必须要试试
  • 记录|MVS和VM软件使用记录
  • 算法通关:014_1:用栈实现队列
  • 【C#】Random
  • MongoDB简介及其在Java中的应用
  • JSON-LD上下文将属性映射到RDF IRIs示例
  • Spring的监听机制详解
  • Cache结构
  • 国产版Sora复现——智谱AI开源CogVideoX-2b 本地部署复现实践教程
  • 怎么读取FRM、MYD、MYI数据文件
  • Leetcode3226. 使两个整数相等的位更改次数