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

Note2.4 机器学习:Batch Normalization Introduction

Batch Normalization(批标准化,BN)通过标准化数据的操作,使得损失函数的优化地形(optimization landscape)更加平滑,从而达到更好地训练效果。BN常用于卷积神经网络(CNN)等。

1.原理

一般的gradient descend局限很大,RMSProp、small Batch、momentum等方法都是通过改变参数更新的策略实现优化,而Batch Normalization直接改变error surface

使各个feature处于同一范围的方法有很多,统称Feature Normalization,以下呈现的只是其中一种

2.实现

术语

standard deviation:标准差,variance:方差,tilde:波浪符号,converge:收敛

不仅是feature要标准化,中间的每层都需要标准化。标准化放在激活函数之前和之后效果相差不大。但是如果选择sigmoid,最好在sigmoid前标准化,因为sigmoid为s型,标准化后数据都在0附近,计算的gradient会更大,收敛会更快;否则收敛非常慢。

 

注意:下面标准化涉及的运算都是element-wise,对每个元素分别操作,而不是对向量处理。(比如求μ和σ)

一个有趣的事情是标准化后,Z1和后面所有的中间值关联起来了(图中标注了三角形的量)。但实际上不会选择full batch,把所有data一起丢进去训练,而是采用mini batch,所以这个方法叫做Batch Normalization。注意:batch size必须较大,因为只有batch里面的data足以表示整个训练集的分布时,才能用batch的Normalization近似代替训练集的Normalization。 

 这一步表示γ和作element-wise的乘法再加上β,目的:标准化强制数据均值为0、方差为1,但这种分布可能不符合实际任务的需求(例如,某些特征可能需要非线性的分布),通过 γγ 和 ββ 重新缩放和平移模型能够自适应地学习适合当前任务的分布,避免标准化对特征的过度约束。

开始时一般γ设为全1的向量,而β设为零向量。

3.实际运行的处理

上述方法中都是对batch标准化,但在inference(即testing)阶段,很可能没有batch,而是一个个单独的数据,所以必须调整策略

事实上在testing时并不需要自己处理,pytorch内部已经处理好了:使用moving average代替average。moving average即移动平均:一种通过使用过去若干时间段的平均值计算得出的平均值。移动平均值会定期变化,最早的数值会被基于最新数据的数值所替代。

 

4.实验结果 

蓝色的点表示相同的错误率,从图中可以看出Batch Normalization确实加快了训练速度。

粉色的线表示先进行Batch Normalization后sigmoid的结果,至于为什么没有先sigmoid,后Batch Normalization,作者说收敛速度太慢,训练不起来。

5. 有效性的解释

  

6.拓展:其他Normalization方法

BN不是唯一的Feature Normalization的方法,方法非常多:

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

相关文章:

  • 【go】初学者入门环境配置,GOPATH,GOROOT,GOCACHE,以及GoLand使用配置注意
  • LNA设计
  • 【安卓Sensor框架-1】SensorService 的启动流程
  • iOS 使用 SceneKit 实现全景图
  • MCPA2APPT:基于 A2A+MCP+ADK 的多智能体流式并发高质量 PPT 智能生成系统
  • 微处理原理与应用篇---STM32寄存器控制GPIO
  • Unity2D 街机风太空射击游戏 学习记录 #16 道具父类提取 旋涡道具
  • FPGA内部资源介绍
  • Python爬虫实战:研究sanitize库相关技术
  • 笔记07:网表的输出与导入
  • SQL关键字三分钟入门:RANK() —— 窗口函数
  • Java AI 新纪元:Spring AI 与 Spring AI Alibaba 的崛起
  • JavaScript正则表达式之正向先行断言(Positive Lookahead)深度解析
  • 第8章-财务数据
  • 某音Web端消息体ProtoBuf结构解析
  • TCP 在高速网络下的大数据量传输优化:拥塞控制、效率保障与协议演进​
  • Linux更改国内镜像源
  • InnoDB的undo日志涉及的页结构
  • C语言二级指针与多级指针
  • 国内公司把数据湖做成了数据库
  • uni-app项目实战笔记27--uniapp搜索页面的实现
  • 手势-handpose的pipeline介绍
  • nt!IoSynchronousPageWrite函数分析之atapi!IdeReadWrite----非常重要
  • 视频序列中的帧间匹配技术 FrameMatcher 详解
  • 智能制造——56页2025 智慧工厂解决方案【附全文阅读】
  • zookeeper Curator(3):Watch事件监听
  • 从单体架构到微服务:微服务架构演进与实践
  • 从台式电脑硬件架构看前后端分离开发模式
  • Spring Boot 3 多数据源改造全流程:Druid、HikariCP 与 dynamic-datasource 实战总结
  • 内网横向-工作流