数据归一化

2023-05-16

原文链接:从公式出发:什么是模型收敛的有效方法?

大家好,我是泰哥。数据归一化在模型收敛中起着至关重要的作用,从经典机器学习到深度学习的数据归一化方法是如何一步步演变的呢?它又为什么是深度学习模型收敛最有效的手段?

一、经典机器学习的归一化方法

经典机器学习领域的数据归一化算法主要有两种,分别是0-1标准化和Z-Score标准化。二者使用效果差别不大,并且都是逐列对输入的数据进行处理。

1.1 0-1标准化

0-1标准化是最简单也是最容易想到的方法,同时也是经典机器学习领域最常用的标准化方法:
x n o r m a l i z a t i o n = x − M i n M a x − M i n {x}_{normalization}=\frac{x-Min}{Max-Min} xnormalization=MaxMinxMin

该方法通过在输入特征中逐列遍历其中里的每一个数据,将每列的Max和Min记录下来,然后根据公式将数据缩放到0-1之间:

import torch
t = torch.arange(12).reshape(6, 2).float()
print(t)

# tensor([[ 0.,  1.],
#         [ 2.,  3.],
#         [ 4.,  5.],
#         [ 6.,  7.],
#         [ 8.,  9.],
#         [10., 11.]])

def min_max(t):
    # 提取每列最大值
    t_max = t.max(0)[0]
    # 提取每列最小值
    t_min = t.min(0)[0]
    # 计算0-1标准化后结果
    zo_ans = (t - t_min) / (t_max - t_min)
    return zo_ans
    
zo_ans = min_max(t)
print(zo_ans)
# tensor([[0.0000, 0.0000],
#         [0.2000, 0.2000],
#         [0.4000, 0.4000],
#         [0.6000, 0.6000],
#         [0.8000, 0.8000],
#         [1.0000, 1.0000]])

1.2 Z-Score标准化

和0-1标准化不同,Z-score标准化利用原始数据的均值和标准差进行数据的标准化。同样是逐列进行操作,每一条数据都减去当前列的均值再除以当前列的标准差。
x n o r m a l i z a t i o n = x − μ σ {x}_{normalization}=\frac{x-\mu }{\sigma } xnormalization=σxμ

通过这种方法处理之后,会成为零点对称数据,并且如果原数据服从正态分布,通过Z-Score处理之后将服从标准正态分布。

def z_score(t):
    std = t.std(0)
    mean = t.mean(0)
    ans = (t - mean) / std
    return ans 
    
zs_ans = z_score(t)
print(zs_ans)
# tensor([[-1.2649, -1.2649],
#         [-0.6325, -0.6325],
#         [ 0.0000,  0.0000],
#         [ 0.6325,  0.6325],
#         [ 1.2649,  1.2649]])

1.3 Z-Score的局限性

尽管Z-Score归一化能够一定程度保证梯度平稳,进而提升模型收敛速度甚至是提升模型效果,但由于只是针对“初始值”的修改,因此会随着迭代次数增加而逐渐破坏了零点对称这一条件,使得零点对称的条件消失

该问题也可视作经典机器学习归一化方法应用于深度神经网络时的局限。

二、深度学习归一化的思路

我们回顾三层神经网络中第三层梯度的计算公式(每层原理都相同,因为第三层公式简单,就以第三层作为代表):
g r a d 3 = ∂ l o s s ∂ y ^ ⋅ F ( F ( X ∗ w 1 ) ∗ w 2 ) grad_3 = \frac{\partial loss}{\partial \hat y} \cdot F(F(X * w_1) * w_2) grad3=y^lossF(F(Xw1)w2)

可以发现,梯度实际上受到激活函数F()、各层输入数据X和参数w三者共同影响。

2.1 参数 w w w

我在之前的一篇文章中引出了Glorot条件,就是通过巧妙设置参数初始值,从而使得各层梯度在计算过程中尽可能更加平稳。

但由于参数的特殊性,其本身就是我们最终学习的目标,所以我们只能设置其初始值,一旦模型开始迭代,参数就将开始“不受控制”的调整,初始值的设置是很难长期保证梯度平稳的,这点和Z-Score对数据进行初始化所存在的问题一致。

2.2 激活函数 F ( ) F() F()

之前在聊梯度的消失与爆炸时,说到sigmoid和tanh激活函数容易引起梯度与爆炸,所以大佬们发明了relu,当输入大于0时梯度恒定为1,目的就是让复杂模型在更新时梯度保持平稳。

2.3 输入 X X X

写到这里,在确保梯度平稳性上就只剩输入X这一条路可走。目前应用最为广泛、并且被验证的实践效果最好的数据归一化方法就是Batch Normalization。该方法通过修改每一个batch中的数据分布,来提升模型各层梯度的平稳性,从而提升模型学习效率、提高模型训练结果。

2.4 仅仅是多次Z-Score的使用吗?

它与经典机器学习的不同主要在于两个方面:

  • 目的不同:

经典机器学习归一化主要是为了消除不同特征的量纲影响,所以对各列的数据分布进行调整,而且不是所有机器学习模型都要进行数据归一化。

而深度学习归一化的目标则是为了确保梯度平稳、模型能够有效训练,并且是适用于所有模型的必要的优化方法。

  • 计算方法不同
    那么在归一化的过程中,放缩的部分可以通过矩阵乘法来完成,而平移部分则更加简单,让数据集加上由每一列平移幅度所构成的向量即可完成。BN的平移和放缩分为两个阶段:

第一个阶段是先将数据进行Z-Score处理

第二阶段则是在此基础上在对数据的均值进行参数平移,并对其方差进行参数放缩

其实两个阶段做的是一件事,就是对参数进行平移和缩放。我们可以将第一阶段理解为将数据本身的均值与方差设为了初始值,第二阶段则是根据反向传播来不断的更新参数。

原文链接:从公式出发:什么是模型收敛的有效方法?

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

数据归一化 的相关文章

  • 实时微控制器的关键技术及国产玩家,国产DSP盘点

    小二用芯在写 xff0c 如果您觉得有帮助 xff0c 帮忙朋友圈推荐下 34 xff0c 感谢 xff01 在介绍OBC xff0c DCDC时候 xff0c 觉得有必要对主控芯片做个介绍 xff0c 比如为什么说数字电源的控制一般集成H
  • 天猫精灵的开发者生态

    文章转自 智联网事 欢迎关注 xff0c 每周一篇原创 xff0c 直至 No End https mp weixin qq com s biz 61 MzI3NDE2NDMwNQ 61 61 amp mid 61 2649905740 a
  • 蓝牙Mesh网络性能及网络特点总结(一)

    原文链接 xff1a 欢迎关注公众号 智联网事 xff0c 一周一篇原创文章 xff0c 一起探讨智联网 https mp weixin qq com s biz 61 MzI3NDE2NDMwNQ 61 61 amp mid 61 264
  • 华为物联网(IOT)开发者平台

    智联网事 关注与分享 xff0c 是对原创最大的鼓励 原文链接 https mp weixin qq com s biz 61 MzI3NDE2NDMwNQ 61 61 amp mid 61 2649905835 amp idx 61 1
  • Kubernetes v1.21.14二进制搭建单节点集群

    1 集群环境准备 1 1 主机规划 IP主机名主机角色操作系统安装组件192 168 11 71k8s master1master workerCentos7 9api server controller manager scheduler
  • shell脚本第一行:#!/bin/bash的含义

    相信有接触过shell脚本的同学们都应该知道 xff0c shell脚本的第一行一般会写有以下字样 xff1a bin bash或者 bin sh或者 bin awk 比较常见的说法是 xff1a 第一行的内容指定了shell脚本解释器的路
  • LPMS-IMU姿态解算

    参考文章 xff1a AHRS姿态解算说明 加速度 43 陀螺仪 43 磁力计原理及原始数据分析 AHRS俗称航姿参考系统 xff0c AHRS由加速度计 xff0c 磁场计 xff0c 陀螺仪构成 xff0c AHRS的真正参考来自于地球
  • 如何在我的VsCode中集成Git

    在VsCode中配置Git后 xff0c 我们就可以简单快速管理我们的代码仓库 一 下载安装Git 如果没有Git xff0c 这里可以参考我之前的文章安装 配置Git 精讲Git xff08 从安装到熟练使用一文全解 xff0c 看完轻松
  • 虚拟机:xshell连接虚拟机Ubuntu失败解决方法

    当我们买不起服务器但却想模拟服务器环境进行学习时 xff0c 再好不过的就是直接装Linux虚拟机了 xff0c 非常简单快捷 xff01 首先我们可以通过ifconfig a来查看Ubuntu Server的IP地址 xff08 前提是你
  • SVM原理:超平面方程

    xff08 1 xff09 超平面方程 3维空间中平面方程的一般形式 xff1a 1 我们都知道为平面到原点的距离 这里简单证明超平面的法向量为 d维空间平面方程的一般形式 xff1a 2 平面的法向量为 xff0c xff08 分号表示列
  • windows11编译OpenCV4.5.0 with CUDA(附注意事项)

    windows11编译OpenCV4 5 0 with CUDA 从OpenCV4 2 0 版本开始允许使用 Nvidia GPU 来加速推理 本文介绍最近使用windows11系统编译带CUDA的OpenCV4 5 0的过程 文中使用 特
  • Windows11安装Detectron2(附详细操作指南)

    Windows11安装Detectron2 0 简介 Detectron2 是 Facebook AI Research 的下一代目标检测库 xff0c 可提供最先进的检测和分割算法 它是 Detectron 和 maskrcnn benc
  • 四轴飞行器F450+Futaba 14SG+好盈电调油门行程校准

    F450 43 Futaba 14SG油门行程校准 装机前忘了进行油门校准 xff0c 装好后进行校准一开始老出现电机接收不到油门信号的提示音 因为Futaba 14SG也是新入手的控 xff0c 有些模式和操作不熟悉 xff0c 为此花了
  • NTKO控件安装:“不能装载文档控件,请在检查浏览器的选项中检查浏览器的安全设置”问题

    上礼拜手欠把OFFICE文档控件 NTKO给卸载了 xff0c 结果这周通知基金结题网上填写报告 本以为就装个控件 xff0c 没想到各种问题 xff0c 几经尝试终于解决 xff0c 总结如下 xff1a 1 问题 xff1a 不能装载文
  • Arduino - 串口操作函数与示例代码大全

    Arduino 串口操作函数与示例代码大全 本文总结了Arduino常用串口操作函数 xff0c 函数说明部分来源于Arduino 官网串口使用指南 xff0c 示例与实验部分为自编 本文是对Arduino串口操作函数的较全面总结 xff0
  • vs2010 出错:error LNK1123: 转换到 COFF 期间失败: 文件无效或损坏

    LNK1123 转换到 COFF期间失败 文件无效或损坏 的解决方法 一 错误描述 之前写的程序隔段时间使用VS2010再次运行时出现如下错误 xff1a LINK fatal error LNK1123 转换到 COFF 期间失败 文件无
  • OpenCV—基本矩阵操作与示例

    OpenCV的基本矩阵操作与示例 OpenCV中的矩阵操作非常重要 xff0c 本文总结了矩阵的创建 初始化以及基本矩阵操作 xff0c 给出了示例代码 xff0c 主要内容包括 xff1a 创建与初始化 矩阵加减法 矩阵乘法 矩阵转置 矩
  • ubuntu16.04下利用ROS启动LPMS-CURS、CURS2等型号IMU;用imu控制turtlesim--教程

    文章目录 IMU型号及协议第一步 下载安装 LPsensor library第二步 设置ROS和carkin工作空间第三步 下载编译LPMS IMU的ROS驱动第四步 启动IMU xff08 可能也会遇到问题 xff09 遇到的问题1 ub
  • PixHawk飞控和Mission Planner地面站安装调试

    PixHawk飞控和Mission Planner地面站安装调试 PixHawk是著名飞控厂商3DR推出的新一代独立 开源 高效的飞行控制器 xff0c 前身为APM飞控 xff0c 不仅提供了丰富的外设模块和可靠的飞行体验 xff0c 有

随机推荐

  • 飞越650四轴无人机安装全程详解(多图)

    飞越650四轴无人机安装全程详解 xff08 多图 xff09 本文根据自己的安装实际过程 xff0c 总结了开箱后一个比较合理的650四轴无人机安装顺序 xff0c 以及各个步骤的注意事项 xff0c 主要内容包括 xff1a 系统基本配
  • DIY一个基于树莓派和Python的无人机视觉跟踪系统

    DIY 一个基于树莓派和Python的无人机视觉跟踪系统 无人机通过图传将航拍到的图像存储并实时传送回地面站几乎已经是标配 如果想来点高级的 在无人机上直接处理拍摄的图像并实现自动控制要怎么实现呢 xff1f 其实视觉跟踪已经在一些高端的消
  • windows环境下的Anaconda安装与OpenCV机器视觉环境搭建

    windows环境下的Anaconda安装与OpenCV机器视觉环境搭建 本文介绍win7和win10系统下通过Anaconda配置基于python语言的机器视觉编程环境 xff08 博主测试了两个系统下的安装基本相同 xff09 xff0
  • OpenCV—轮廓操作一站式详解:查找/筛选/绘制/形状描述与重心标注(C++版)

    OpenCV 轮廓操作一站式详解 xff1a 查找 筛选 绘制 形状描述与重心标注 C 43 43 版 轮廓 是定义或限定形状或对象的边或线 xff0c 是机器视觉中的常用的概念 xff0c 多用于目标检测 识别 等任务 关于OpenCV轮
  • 正太分布函数和反函数 标量值函数 (借鉴)

    标准正态分布函数 CREATE function dbo normcdf 64 p decimal 28 18 AS begin
  • 离散时间傅里叶变换(一)

    一 非周期信号的表示 xff1a 离散时间博里叶变换 1 1 离散时间傅里叶变换的导出 1 离散时间傅里叶变换对 要清楚推导过程 X ejw 称为离散时间傅里叶变换 xff0c 这一对式子就是离散时间傅里叶变换对 上式称为综合公式 xff0
  • HuskyLens摄像头系列 | 写给小学生看的视觉PID巡线算法

    Hello xff0c 大家好 xff0c 光天化日之下我又来撸狗了 距离上次撸狗已经过去了个把月时间了 xff0c 那么这次又有什么新惊喜呢 xff1f 先来看一下本期的演示视频吧 https www bilibili com video
  • 时空行为检测数据集 JHMDB & UCF101_24 详解

    文章目录 0 前言1 JHMDB1 1 基本情况1 2 数据准备以及标签详解 2 UDF101 242 1 基本情况2 2 数据准备与标签详解 3 数据集可视化代码 0 前言 现在常用的时空行为检测数据集只有AVA JHMDB UCF101
  • Lock与RLock的区别

    目录 往期推荐介绍区别一区别二 往期推荐 Python多线程的使用 Python线程池的使用 Python多线程的安全问题 B站同名 有温度的算法 已经上线 想观看视频讲解的同学 点击此处直达B站 介绍 在上节中为大家说明了线程访问临界资源
  • ROS 小技巧 - OpenCV4 与 CV_Bridge 配合使用

    1 现象 ROS默认的Python版本是3 3 xff0c 但我系统安装的是OpenCV4 5 如果直接在pkg中使用cv bridge和opencv4 5就会有问题 会有一些undefined reference问题 参考资料 xff1a
  • 【做题系统】后端设计

    目录 一 设计思路 1 项目背景 2 技术栈选择 二 系统设计 1 系统结构图 2 项目结构 3 数据建模 4 数据流图 5 主要流程图 三 问题及解决办法 1 实现安全登录 访问 2 数据库中的信息安全问题 3 Mybatis plus如
  • C/C++字符串查找函数

    C C 43 43 string库 xff08 string h xff09 提供了几个字符串查找函数 xff0c 如下 xff1a memchr在指定内存里定位给定字符strchr在指定字符串里定位给定字符strcspn返回在字符串str
  • ssh命令-manpage

    SSH Section User Commands 1 Index Return to Main Contents BSD mandoc NAME ssh OpenSSH SSH 客户端 远程登录程序 总览 SYNOPSIS ssh l l
  • 一小时做出Java实战项目——飞翔的小鸟

    学姐又来啦 xff0c 今日分享一个Java实战项目 飞翔的小鸟 相信大家都玩过这个游戏 xff0c 这个游戏陪伴了我们整整一个童年 xff0c 是我们青春的回忆 飞翔的小鸟 xff0c 游戏中玩家只需通过点击方向键操纵让小鸟避开绿色管道等
  • 搭建本地仓库源

    一 如何搭建仓库源 之前讲了定制ISO的方法 xff1a 使用chroot定制系统 xff0c 但有时候我们想自定义的安装包不在上游的仓库源中 xff0c 在我们本地应该怎么办呢 xff1f 如果我们将deb包拷贝到iso目录再安装有点过于
  • 节点操作案例

    1 下拉菜单 xff08 仿微博 xff09 lt DOCTYPE html gt lt html lang 61 34 en 34 gt lt head gt lt meta charset 61 34 UTF 8 34 gt lt me
  • document获取对象的三种三方法

    Document对象中有几个常用的方法 xff0c 我们在Dom简介中提到过 说到获取JavaScript对象的方法 xff0c 最常用的可能就是getElementById了 xff0c 它是Document中最常用的获取对象的方式之一
  • 程序员,最关键的跨越是什么?做到了月薪可能翻上几番~

    黑马程序员视频库 播妞微信号 xff1a boniu236 传智播客旗下互联网资讯 学习资源免费分享平台 作为一名程序员 xff0c 最关键的跨越是什么 xff1f 从普通程序员进阶为熟练开发者 xff0c 从熟练开发者跃升到技术专家或架构
  • 黑马程序员:3分钟带你读懂C/C++学习路线

    随着互联网及互联网 43 深入蓬勃的发展 xff0c 经过40余年的时间洗礼 xff0c C C 43 43 俨然已成为一门贵族语言 xff0c 出色的性能使之成为高级语言中的性能王者 而在今天 xff0c 它又扮演着什么样重要的角色呢 x
  • 数据归一化

    原文链接 xff1a 从公式出发 xff1a 什么是模型收敛的有效方法 xff1f 大家好 xff0c 我是泰哥 数据归一化在模型收敛中起着至关重要的作用 xff0c 从经典机器学习到深度学习的数据归一化方法是如何一步步演变的呢 xff1f