为什么需要批量规范化层呢?

让我们来回顾一下训练神经网络时出现的一些实际挑战:

  • 首先,数据预处理的方式通常会对最终结果产生巨大影响。 回想一下我们应用多层感知机来预测房价的例子。使用真实数据时,我们的第一步是标准化输入特征,使其平均值为0,方差为1。 直观地说,这种标准化可以很好地与我们的优化器配合使用,因为它可以将参数的量级进行统一。

  • 第二,对于典型的多层感知机卷积神经网络,当我们训练时,中间层中的变量(例如,多层感知机中的仿射变换输出)可能具有更广的变化范围:不论是沿着从输入到输出的层,跨同一层中的单元,或是随着时间的推移,模型参数的随着训练更新变幻莫测。 批量规范化的发明者非正式地假设,这些变量分布中的这种偏移可能会阻碍网络的收敛。 直观地说,我们可能会猜想,如果一个层的可变值是另一层的100倍,这可能需要对学习率进行补偿调整。

  • 第三,更深层的网络很复杂,容易过拟合。 这意味着正则化变得更加重要。

批量规范化应用于单个可选层(也可以应用到所有层),其原理如下:

在每次训练迭代中,我们首先规范化输入,即通过减去其均值并除以其标准差,其中两者均基于当前小批量处理。 接下来,我们应用比例系数和比例偏移。 正是由于这个基于批量统计的标准化,才有了批量规范化的名称。

  • BatchNorm 在 一个 batch 的同一通道 内做归一化

  • LayerNorm 在 每条样本的 所有通道/特征 内做归一化

作用:把输入分布强行压成 零均值、单位方差,减轻 Internal Covariate Shift 内部协变量偏移,使优化曲面更平滑,从而让梯度更稳定、训练更快、更易收敛到较优的泛化解。

计算例子

下面用 3×4 的 RGB 小批次张量举例,并给出计算过程与差异对照:

数据形状约定:设输入 x 形状为 (B, C, H, W) = (2, 3, 2, 2):

  1. 2 张图片

  2. 3 个通道 (R, G, B)

  3. 每通道 2×2 像素

把每张图片展平后,张量变成:

batch0-0R: [[1, 3], [5, 7]]    → 4 个标量 1 3 5 7G: [[2, 4], [6, 8]]    → 2 4 6 8B: [[0, 2], [4, 6]]    → 0 2 4 6batch0-1R: [[2, 4], [6, 8]]G: [[3, 5], [7, 9]]B: [[1, 3], [5, 7]]

BatchNorm 的计算:BN是在同一个batch中不同样本之间的同一位置的神经元之间进行归一化。

  • 归一化维度:在 (B, H, W) 三个维度上求均值/方差,每个通道一组统计量。

  • 以 R 通道为例: 共有 2×2×2 = 8 个像素值:{1, 3, 5, 7, 2, 4, 6, 8}

    • μ_R = (1+3+5+7+2+4+6+8)/8 = 4.5

    • σ²_R = 平均((x−4.5)²) = 5.25

  • 归一化后每个像素先做 (x−μ)/√(σ²+ε),再进行 γ·x + β 的仿射。 G、B 通道同理,各自独立拥有一组 μ、σ、γ、β。

  • 参数:每个通道一对 (γ, β),共 3×2 = 6 个可学习标量。

  • 推理阶段:用滑动平均保存的全局 μ、σ,不再依赖 batch。

LayerNorm 的计算:LN是在同一个样本中不同神经元之间进行归一化。

  • 归一化维度:在 (C, H, W) 三个维度上求均值/方差,每条样本一组统计量。

  • 以 batch-0 为例: 把 3×2×2 = 12 个数拉成一条向量: {1, 3, 5, 7, 2, 4, 6, 8, 0, 2, 4, 6}

    • μ = 4.0

    • σ² = 平均((x−4)²) = 5.0

  • 归一化后再用 该样本独有 的 γ、β 做仿射。 batch-1 同理,用 batch-1 自己的 12 个数重新算 μ、σ。

  • 参数:每条样本一对 (γ, β),可共享或不共享,与 BatchNorm 不同。

为什么有效?

  • 输入:手写数字灰度图,只保留 2 个像素 → 输入 x 形状 (batch, 2)。

  • 网络:2 层线性 y = W₂ ReLU(W₁x)。

  • 任务:二分类 0/1,用 Sigmoid + BCE 损失。

  • 假设 batch = 4,像素值如下(故意把范围拉大):

    x = [[200, 190],[10,  5],[180, 170],[8,   4]]

  • 真实标签 y = [0,  1,  0,  1]

没有归一化时(裸网络)

  • 第一层输出 z₁ = W₁x,假设 W₁ 随机初始化后, z₁ 的均值≈180,方差≈6000。

  • 经过 ReLU 后,大多数值落在 0 或 >100 的区间 → 梯度在反向传播时: – 很大值那一端 → 梯度爆炸; – 很多 0 → 梯度消失。 结果:Loss 震荡剧烈,训练 10 个 epoch 仍降不下来。

加上 BatchNorm(放在第一层之后):

  1. 计算 batch 内每个通道的均值 μ、方差 σ²:

    • μ₁ = (200+10+180+8)/4 = 99.5

    • μ₂ = (190+5+170+4)/4 = 92.25

  2. 归一化:

    • ẑ₁ = (z₁ − μ₁)/√(σ₁²+ε)

    • ẑ₂ = (z₂ − μ₂)/√(σ₂²+ε)

  3. 现在所有值缩放到 ≈[-1,1] 区间。

  4. 再乘可学习 γ、β 做仿射,保持表达能力。

  5. 效果:

    • 第一层输出方差≈1,ReLU 后的分布不再极端

    • 反向传播时梯度大小稳定,loss 单调下降,3 个 epoch 就收敛。

加上 LayerNorm(放在第一层之后)

  • 对每条样本的所有特征一起算 μ、σ²:

    • 样本 0:μ = (200+190)/2 = 195

    • 样本 1:μ = (10+5)/2 = 7.5

    • …………

  • 每条样本内部做 (x−μ)/σ,再 γ、β。

    • 效果:

      • 即使 batch 大小变成 1 也能用(LN 不依赖 batch)。

      • 输入尺度被拉齐,梯度同样稳定,收敛速度与 BN 相近。

比较点

BatchNorm

LayerNorm

归一化范围

跨 batch 的同一通道

单条样本 内的全部特征

均值/方差维度

(B, H, W)

(C, H, W)

依赖 batch 大小

是(推理时用滑动平均)

典型场景

CNN、大 batch

RNN、Transformer、小 batch

参数量

每通道一对 γβ

每层/每样本一对 γβ

因此:

  • 在 CNN 里用 BatchNorm,你会看到“所有图片的 R 通道一起归一化”;

  • 在 Transformer 里用 LayerNorm,你会看到“每个 token 的所有维一起归一化”。

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

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

相关文章

机器学习-支持向量机器(SVM)

0.1 数字识别 from sklearn.svm import SVC from sklearn.metrics import silhouette_score import numpy as np import pandas as pd import matplotlib.pyplot as plt from sklearn.decomposition import PCA from sklearn.feature_extraction import DictVectorizer from sk…

昆山PCB板工厂有哪些?

在长三角电子信息产业版图中,昆山凭借完整的产业链配套和精湛的制造工艺,成为国内PCB(印制电路板)生产的重要基地。本文精选五家具有代表性的本土工厂,从技术实力到服务特色展开深度剖析,为行业客户提供精准…

rk3588 ubuntu20.04安装包经常出现的问题总结(chatgpt回复)

问题1 问题 我在rk3588 ubuntu20.04安装相关环境的时候经常出现下面类似的问题,如何系统的解决 The following packages have unmet dependencies : openssh-server : Depends: openssh-client ( 1:8.2p1-4ubuntu0.13) but 1:8.2p1-4ubuntu0.11 is to be installed …

从根源到生态:Apache Doris 与 StarRocks 的深度对比 —— 论开源基因与长期价值的优越性

在 OLAP 领域,Apache Doris 与 StarRocks 常被一同提及,两者有着深厚的技术渊源 ——StarRocks 源自 Apache Doris 的代码 Fork,却在后续发展中走向了不同的路径。本文将从代码根源、架构演进、社区生态、功能特性等多维度展开对比。 一、代…

【从零开始学习Redis】项目实战-黑马点评D1

项目实战-黑马点评 项目架构短信登录发送短信验证码 实现思路就是按照上图左一部分&#xff0c; 实现类如下 Slf4j Service public class UserServiceImpl extends ServiceImpl<UserMapper, User> implements IUserService {/*** 验证手机号发送验证码** param phone* pa…

自然语言处理的范式转变:从Seq2Seq模型到Transformer架构

Seq2Seq 定义 Seq2Seq是一个Encoder-Decoder结构的网络&#xff0c;它的输入是一个序列&#xff0c;输出也是一个序列&#xff0c; Encoder使用循环神经网络(RNN,GRU&#xff0c;LSTM等)&#xff0c;将一个可变长度的信号序列(输入句子)变为固定维度的向量编码表达&#xff0c;…

【博客系统测试报告】---接口自动化测试

目录 1、需求分析 2、挑选接口 3、设计博客系统的测试用例 4、设计自动化测试框架 test_add.py: test_detail.py: test_getAuthorInfo.py: test_getUserInfo: test_list.py: test_login.py: logger_util.py: request_util.py: yaml_util.py: 1、需求分析 根据业务…

Mysql数据库迁移到GaussDB注意事项

mysql数据库迁移高斯数据库 建议开启高斯数据库M模式&#xff0c;mysql兼容模式&#xff0c;可以直接使用mysql的建表语句&#xff0c;自增主键可以使用AUTO_INCREMENT&#xff0c;如果不开启M模式&#xff0c;只能使用高斯数据库的序列添加自增主键1&#xff1a;如果使用数据库…

苹果正计划大举进军人工智能硬件领域

每周跟踪AI热点新闻动向和震撼发展 想要探索生成式人工智能的前沿进展吗&#xff1f;订阅我们的简报&#xff0c;深入解析最新的技术突破、实际应用案例和未来的趋势。与全球数同行一同&#xff0c;从行业内部的深度分析和实用指南中受益。不要错过这个机会&#xff0c;成为AI领…

Serverless 架构核心解析与应用实践

Serverless 的核心定义与优势‌‌核心定义Serverless&#xff08;无服务器架构&#xff09;是一种云计算模型&#xff0c;开发者无需关注底层服务器管理&#xff0c;由云服务商自动分配资源、弹性扩缩容&#xff0c;并按实际使用量计费‌。其核心特点包括&#xff1a;‌按需计算…

Redis持久化机制详解:RDB与AOF的全面对比与实践指南

目录 一、RDB持久化机制 1.1 RDB概述 1.2 RDB触发机制 1) 手动执行save命令 2) 手动执行bgsave命令 3) Redis正常关闭时 4) 自动触发条件满足时 1.3 RDB详细配置 1.4 RDB实现原理 1.5 RDB的优缺点分析 二、AOF持久化机制 2.1 AOF概述 2.2 AOF工作流程 2.3 AOF同步…

介绍一下jQuery的AJAX异步请求

目录 一、核心方法&#xff1a;$.ajax() 二、简化方法&#xff08;常用场景&#xff09; 1. $.get()&#xff1a;快速发送 GET 请求&#xff08;获取数据&#xff09; 2. $.post()&#xff1a;快速发送 POST 请求&#xff08;提交数据&#xff09; 3. $.getJSON()&#xf…

Win10系统Ruby+Devkit3.4.5-1安装

Win10系统RubyDevkit3.4.5-1安装安装步骤软件工具安装Ruby安装gem mysql2处理libmysql.dll验证mysql2安装步骤 软件工具 mysql-connector-c-6.1.11-winx64.zip rubyinstaller-devkit-3.4.5-1-x64.exe 安装Ruby 执行rubyinstaller-devkit-3.4.5-1-x64.exe&#xff0c;期间可…

社交工程:洞穿人心防线的无形之矛

在网络安全领域&#xff0c;一道无形的裂痕正在迅速蔓延。它不是复杂的零日漏洞&#xff0c;也不是精妙的恶意代码&#xff0c;而是利用人性弱点进行攻击的古老技艺——社交工程。当全球网络安全支出突破千亿美元大关&#xff0c;防火墙筑得越来越高&#xff0c;加密算法越来越…

Go 并发控制利器 ants 使用文档

https://github.com/panjf2000/ants1.1 什么是 ants ants 是一个高性能的 Go 语言 goroutine 池&#xff0c;它能复用已完成任务的 goroutine&#xff0c;避免频繁创建和销毁 goroutine&#xff0c;节省 CPU 与内存开销&#xff0c;并且能限制并发数量防止资源被耗尽。 1.2 安装…

Day57--图论--53. 寻宝(卡码网)

Day57–图论–53. 寻宝&#xff08;卡码网&#xff09; 今天学习&#xff1a;最小生成树。有两种算法&#xff08;Prim和Kruskal&#xff09;和一道例题。 prim 算法是维护节点的集合&#xff0c;而 Kruskal 是维护边的集合。 最小生成树&#xff1a;所有节点的最小连通子图&am…

解决海洋探测数据同步网络问题的新思路——基于智能组网技术的探索

随着海洋探测技术的不断发展&#xff0c;数据同步网络的稳定性和低延迟需求变得愈发重要。海洋探测数据来自多个分布式采集点&#xff0c;这些点需要高效的组网方式来实现实时数据传输。然而&#xff0c;由于海洋环境的特殊性&#xff08;如复杂的网络拓扑、高湿度和极端温度&a…

设计模式笔记_行为型_责任链模式

1. 责任链模式介绍责任链模式&#xff08;Chain of Responsibility&#xff09;是一种行为设计模式&#xff0c;它允许将多个处理器&#xff08;处理对象&#xff09;连接成一条链&#xff0c;并沿着这条链传递请求&#xff0c;直到有一个处理器处理它为止。职责链模式的主要目…

pygame的帧处理中,涉及键盘的有`pg.event.get()`与`pg.key.get_pressed()` ,二者有什么区别与联系?

一、pg.event.get() 返回的是一组事件 pg.event.get() 返回的是一组事件&#xff08;一个包含多个事件对象的列表&#xff09;。这是因为在游戏的“一帧”时间内&#xff08;通常1/60秒左右&#xff09;&#xff0c;用户可能会触发多个事件&#xff08;比如同时按下多个键、快速…

TF - IDF算法面试与工作常见问题全解析

在自然语言处理领域&#xff0c;TF - IDF算法是一个基础且重要的概念。无论是在求职面试还是在实际工作中&#xff0c;都经常会遇到与TF - IDF相关的问题。以下是一些常见的问题及其详细解答&#xff1a; 一、基本概念类问题 1. 什么是TF - IDF算法&#xff1f; TF - IDF&#…