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

BatchNorm LayerNorm

0. Abstract

很早以前就遇到了 BatchNormLayerNorm, 当时只是粗略地知道它们是对数据进行了标准化: x = x − μ σ \bm{x} = \frac{\bm{x} - \bm{\mu}}{\bm{\sigma}} x=σxμ 这当然很简单, 但实际的数据是比较复杂的. 对于 CV 任务的数据 image 而言, 一个 batch 的数据通常是这样的: [B, C, H, W]; 对于 NLP 任务的数据 sentence 而言, 一个 batch 的数据通常是这样的: [B, T, D]. 那 XXNorm 是怎么算的? 肯定不是一下算整个 batch 的所有数的 μ \bm{\mu} μ σ \bm{\sigma} σ, 且它们是有区别的.

于是查阅了很多资料:

  • 《batchNormalization 与 layerNormalization 的区别》
  • 《NLP 中 batch normalization 与 layer normalization》
  • 《BatchNorm1d 与 BatchNorm2d》
  • 《基础 | BatchNorm详解》
  • 《Why do transformers use layer norm instead of batch norm?》

真是应了导师的话: 别去看那些乱七八糟的博客, 他们水平还不如你呢! 还是老外厉害, 仅仅是在评论区回答问题就把问题讲得清清楚楚.

1. 如何计算?

先从理论上说一下, 询问通义千问:

>>>>> 通义千问 >>>>>
layer norm 和 batch norm 的区别? 给出公式解释.

答: Layer Normalization (LayerNorm)Batch Normalization (BatchNorm) 都是用于加速神经网络训练的技术, 通过规范化层的输入或激活值, 使网络的学习更加稳定和高效. 但是, 它们在实施方式和适用场景上有所不同.

Batch Normalization (BatchNorm)
BatchNorm 主要在训练期间对一个 mini-batch 的数据进行规范化. 它的主要目标减少内部协变量移位(internal covariate shift), 即在网络的前向传播过程中, 中间层的输入分布随训练迭代而变化的现象. BatchNorm 通过计算当前 mini-batch 的均值和方差来规范化输入, 公式如下:
x \bm{x} x 是一个 mini-batch 内的输入向量, μ B \bm{\mu}_B μB σ B 2 \bm{\sigma}^2_B σB2 分别是该 mini-batch 的均值和方差, 则 BatchNorm 的输出 y \bm{y} y 可以表示为: x ^ = x − μ B μ B 2 + ϵ y ^ = γ x ^ + β \begin{aligned} \hat{\bm{x}} &= \frac{\bm{x} - \bm{\mu}_B}{\sqrt{\bm{\mu}_B^2 + \epsilon}} \\ \hat{\bm{y}} &= \gamma\hat{\bm{x}} + \beta \end{aligned} x^y^=μB2+ϵ xμB=γx^+β 其中, γ \gamma γ β \beta β 是可学习的参数, ϵ \epsilon ϵ 是一个很小的常数, 用于数值稳定性.

Layer Normalization (LayerNorm)
LayerNorm 目的是在每个样本级别上进行规范化, 而不依赖于 mini-batch 的统计信息. LayerNorm 更适用于序列模型(如 LSTMTransformer)等, 其中样本间可能存在依赖关系mini-batch 大小可能不是固定的. LayerNorm 计算每个样本特征的均值和方差, 公式如下:
x \bm{x} x 是单个样本的特征向量, μ L \bm{\mu}_L μL σ L 2 \bm{\sigma}^2_L σL2 分别是该样本特征的均值和方差, 则 LayerNorm 的输出 y \bm{y} y 可以表示为: x ^ = x − μ L μ L 2 + ϵ y ^ = γ x ^ + β \begin{aligned} \hat{\bm{x}} &= \frac{\bm{x} - \bm{\mu}_L}{\sqrt{\bm{\mu}_L^2 + \epsilon}} \\ \hat{\bm{y}} &= \gamma\hat{\bm{x}} + \beta \end{aligned} x^y^=μL2+ϵ xμL=γx^+β 这里同样, γ \gamma γ β \beta β 是可学习的参数, ϵ \epsilon ϵ 是一个很小的常数.

区别

  • 依赖于数据: BatchNorm 依赖于 mini-batch 的统计信息, 而 LayerNorm 依赖于单个样本的特征统计信息;
  • 应用场景: BatchNorm 更适用于计算机视觉任务, 而 LayerNorm 更适用于自然语言处理任务, 尤其是在处理序列数据时;
  • 计算效率: BatchNorm 在并行计算上可能更高效, 因为它可以利用 mini-batch 内的并行性, 而 LayerNorm 在每个样本上的计算独立, 更适合处理不同长度的序列数据.

这两种方法各有优劣, 选择哪种方法通常取决于具体的应用场景和数据特性.
<<<<< 通义千问 <<<<<

代码加图:

import torch
from torch import nnweight = torch.ones([1, 3, 1, 1])
bias = torch.zeros([1, 3, 1, 1])x = 10 * torch.randn(2, 3, 4, 4) + 100
mean = x.mean(dim=[0, 2, 3], keepdim=True)
std = x.std(dim=[0, 2, 3], keepdim=True, unbiased=False)
print(x)
print(mean)
print(std)y = (x - mean) / std
y = y * weight + bias
print(y)bnm2 = nn.BatchNorm2d(3)
z = bnm2(x)
print(z)
print(torch.norm(z - y, p=1))

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • WEB-INF 泄露-RoarCTF-2019-EasyJava(BUUCTF)
  • 05_四旋翼飞行器姿态表示
  • Python爬虫+数据分析+数据可视化图形-爬取高校排名数据
  • linux高级编程(OSI/UDP(用户数据报))
  • 【小沐学Python】在线web数据可视化Python库:Bokeh
  • python实现http get pos download
  • HTML集成优雅的实时输入清除功能
  • C++ 容器:pair tuple
  • MySQL性能优化篇之SQL语句优化
  • Windows桌面上透明的记事本怎么设置
  • HarmonyOS(43) @BuilderParam标签使用指南
  • 捷配生产笔记-细间距芯片的表面处理工艺:OSP与沉金工艺的重要性
  • android13 文件管理器无法安装apk 奔溃问题
  • android13 cat /proc/cupinfo没有Serial问题
  • 七款好用的公司电脑监控软件推荐|2024年电脑监控软件干货整理!
  • [LeetCode] Wiggle Sort
  • Angular 响应式表单之下拉框
  • canvas 高仿 Apple Watch 表盘
  • classpath对获取配置文件的影响
  • FastReport在线报表设计器工作原理
  • gulp 教程
  • MQ框架的比较
  • Netty+SpringBoot+FastDFS+Html5实现聊天App(六)
  • NSTimer学习笔记
  • Python十分钟制作属于你自己的个性logo
  • QQ浏览器x5内核的兼容性问题
  • Sublime text 3 3103 注册码
  • Twitter赢在开放,三年创造奇迹
  • vue2.0一起在懵逼的海洋里越陷越深(四)
  • Vue官网教程学习过程中值得记录的一些事情
  • Vue学习第二天
  • 大主子表关联的性能优化方法
  • 删除表内多余的重复数据
  • 一天一个设计模式之JS实现——适配器模式
  • 在 Chrome DevTools 中调试 JavaScript 入门
  • 新海诚画集[秒速5センチメートル:樱花抄·春]
  • ​字​节​一​面​
  • (a /b)*c的值
  • (二十四)Flask之flask-session组件
  • (七)理解angular中的module和injector,即依赖注入
  • (四)进入MySQL 【事务】
  • (一)认识微服务
  • (源码版)2024美国大学生数学建模E题财产保险的可持续模型详解思路+具体代码季节性时序预测SARIMA天气预测建模
  • (转)shell调试方法
  • (转)winform之ListView
  • .bat批处理(九):替换带有等号=的字符串的子串
  • .net core Swagger 过滤部分Api
  • .Net 垃圾回收机制原理(二)
  • .NET/MSBuild 中的发布路径在哪里呢?如何在扩展编译的时候修改发布路径中的文件呢?
  • .Net6使用WebSocket与前端进行通信
  • .NET企业级应用架构设计系列之应用服务器
  • .net下简单快捷的数值高低位切换
  • .NET中分布式服务
  • .Net中间语言BeforeFieldInit
  • :class的用法及应用