李沐pytorch学习-BatchNormalization

news2024/11/17 3:51:53

一、意义

        在使用较深的网络时,BatchNormalization(批量归一化)几乎是必需的,可以加速收敛。

         对于图1所示的全连接层神经网络,输出节点O_0的GroundTruth为R_0,损失函数为L\left(x\right),则损失对权重w_1的梯度为:

        \frac{\partial L\left ( R_0-O_0 \right)}{\partial w_1}=\frac{\partial L\left ( R_0-O_0 \right)}{\partial O_0}\cdot \frac{\partial O_0}{\partial w_1}

更新权重w_0的梯度为:

        \frac{\partial L\left ( R_0-O_0 \right)}{\partial w_0}=\frac{\partial L\left ( R_0-O_0 \right)}{\partial O_0}\cdot \frac{\partial O_0}{\partial H_0}\cdot\frac{\partial H_0}{\partial w_0}

图1. 网络结构

如果该网络有5个隐含层,那么更新底层权重w_0的梯度为:

        \frac{\partial L\left ( R_0-O_0 \right)}{\partial w_0}=\frac{\partial L\left ( R_0-O_0 \right)}{\partial O_0}\cdot \frac{\partial O_0}{\partial H_4}\cdot\frac{\partial H_4}{\partial H_3}\cdot\frac{\partial H_3}{\partial H_2}\cdot\frac{\partial H_2}{\partial H_1}\cdot\frac{\partial H_1}{\partial H_0}\cdot\frac{\partial H_0}{\partial w_0}

        从上面的推导可知,如果网络非常深,那么更新底层权重的梯度后面会乘很多偏导数,而偏导数一般比较小,小于1,所以网络底层的梯度会非常小,从而权重更新很慢,造成底层训练速度慢。

        而底层权重一旦改变,顶层权重也需要跟着改变,因此造成收敛变慢,网络训练速度慢。

         解决这个问题的思路为在学习网络底层时避免变化网络平顶层

 二、定义

        计算主要涉及如下公式:

{x_i}'=\gamma \frac{x_i-\mu}{\sigma}+\beta                         \gamma ,\beta 为可学习的参数,对应新的方差和均值。

        其中:

B=\left \{ x_0,x_1,...,x_{N-1} \right \}\\ \mu =\frac{1}{N}\sum \limits_{i=0 }^{N-1}x_i\\ \sigma^2=\frac{1}{N}\sum \limits_{i=0}^{N-1}\left ( x_i-\mu \right )^2+\epsilon\epsilon 是一个很小的数,用于防止分母为零

三、用法

可用位置:

# 全连接层和卷积层的输出上,激活函数前

# 全连接层和卷积层的输入上

对于全连接层,作用在特征维,即B=\left \{ x_1,x_2,...,x_N\right\}

对于卷积层,作用在通道维

四、总结

# 最好不要与DropOut组合使用

# 可以加速收敛,一般不会增加正确率

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

char *str 与char str[]的区别与联系

char *str 与char str[]的区别与联系 常用以下两种方式定义字符串:一种是字符数组,另一种是指向字符串的指针。 文章目录 char *str 与char str[]的区别与联系一、基本概念区别二、名称含义区别三、底层属性区别1.char *str "abcdefgh"2.cha…

MDK 5.xx.0 + STM32F10x 笔记

天才脑袋比不上烂笔头, 写给自己看, 自用资料。 安装MDK STM32环境 Download MDK安装 MDK -> c:\keil_v5 用默认路径下载 ARMCC V5.06 Update 7 (build960) <- 长期稳定支持版本安装至 c:\keil_v5\arm\ARMCC开启 uVision.设定 预设编译程序版本 : V5.06 Update 7 (bui…

C# 学习笔记--个人学习使用 <1>

C# 学习笔记 Chapter 1 C# 比较软的基础部分Section 1 类与命名空间Part 1 命名空间 NameSpacePart 2 类 Class Section 2 基本元素Section 3 数据类型Part 1 什么是类型&#xff1f;Part 2 类型在 C Sharp 中的作用Part 3 C Sharp 中的数据类型 Section 4 变量、对象与内存Par…

GIthub 无法访问使用Watt Toolkit加速

一、使用 Watt Toolkit Watt Toolkit 是一款加速软件&#xff0c;原名是 Steam&#xff0c;后来改名为 Watt Toolkit&#xff0c;其可以让原本无法访问的 Steam 游戏社区、 GitHub 、谷歌验证码等国内难以访问的网页正常访问。 三种下载方式&#xff1a; Watt Toolkit 官网下…

STM32的时钟系统

今天&#xff0c;学习了STM32的时钟系统&#xff0c;如下为stm32的时钟树。

[牛客复盘] 牛客周赛 Round 9 20230827

[牛客复盘] 牛客周赛 Round 9 20230827 总结小美的外卖订单编号1. 题目描述2. 思路分析3. 代码实现 小美的加法1. 题目描述2. 思路分析3. 代码实现 小美的01串翻转1. 题目描述2. 思路分析3. 代码实现 小美的数组操作1. 题目描述2. 思路分析3. 代码实现 六、参考链接 总结 又是…

Linux c++开发-02-g++命令行编译

有如下的文件目录结构 格式一 swap.h swap.cpp main.cpp 编译方法和结果如下&#xff1a; 格式二 swap.cpp main.cpp 使用命令&#xff1a;g main.cpp src/swap.cpp -o main.exe 解决方法使用参数 -I 格式三-将swap.cpp生成一个静态库然后链接到main.cpp中 生成…

某人事系统架构搭建设计记录

首发博客地址 https://blog.zysicyj.top/ 先大致列一下基础情况 架构必须是微服务 场景上涉及大量查询操作&#xff0c;分析操作 并发并不高 对高可用要求较高&#xff0c;不能挂掉 对安全要求高 要能过等保测试等三方测试 使用人数并不多&#xff0c;十万内 涉及很多在线编辑&…

多线程学习之解决线程同步的实现方法

一、卖票的多线程实现 需求&#xff1a;共有100张票&#xff0c;而它有3个窗口卖票&#xff0c;请设计一个程序模拟该电影院卖票 代码实现&#xff1a; /*** Author&#xff1a;kkoneone11* name&#xff1a;SellTicket1* Date&#xff1a;2023/8/26 11:32*/ public class S…

mit s0681 lab2 Trace系统调用实现

实验一 实现一个用户级别的程序&#xff0c;功能为&#xff0c;指定系统调用后&#xff0c;跟踪程序的系统调用情况 分析实验 实验目标为实现一个程序去跟踪指定程序的系统调用。因此目标有两个 实现一个程序跟踪目标程序的系统调用 实现1&#xff0c;就需要在用户这边实…

六、Json 数据的交互处理

文章目录 一、JSON 数据的交互处理1、为什么要使用 JSON2、JSON 和 JavaScript 之间的关系3、前端操作 JSON3.1 JavaScript 对象与 JSON 字符串之间的相互转换 4、JAVA 操作 JSON4.1 Json 的解析工具&#xff08;Gson、FastJson、Jackson&#xff09;4.2 ResponseBody 注解、Re…

爬虫(bilibili热门课程记录)

什么是爬虫&#xff1f;程序蜘蛛&#xff0c;沿着互联网获取相关信息&#xff0c;收集目标信息。 一、python环境安装 1、先从Download Python | Python.org中下载最新版本的python解释器 2、再从Download PyCharm: Python IDE for Professional Developers by JetBrains中下…

关于msvcp140.dll丢失的解决方法,分享最简单详细的解决方法

今天&#xff0c;我将为大家详细介绍一种常见的问题——msvcp140.dll丢失&#xff0c;并提供四种不同的解决方法。希望通过这次分享&#xff0c;能够帮助大家解决这个问题&#xff0c;提高电脑使用效率。 首先&#xff0c;让我们来了解一下msvcp140.dll文件。msvcp140.dll是Mi…

JavaScript中的事件循环(Event Loop)

1. 概述 javaScript是单线程的&#xff0c;意味着它一次只能执行一个任务。然而&#xff0c;许多操作&#xff0c;如网络请求、定时器等&#xff0c;都会导致延迟&#xff0c;如果程序在等待这些操作完成时&#xff0c;可能会操作一个阻塞的效果&#xff0c;影响用户体验。这个…

设计模式之命令模式(Command)的C++实现

1、命令模式的提出 在软件开发过程中&#xff0c;“行为请求者”和“行为实现者”通常呈现一种“紧耦合”&#xff0c;如果行为的实现经常变化&#xff0c;则不利于代码的维护。命令模式可以将行为的请求者和行为的实现者进行解耦。具体流程是将行为请求者封装成一个对象&…

Git企业开发控制理论和实操-从入门到深入(六)|多人协作开发

前言 那么这里博主先安利一些干货满满的专栏了&#xff01; 首先是博主的高质量博客的汇总&#xff0c;这个专栏里面的博客&#xff0c;都是博主最最用心写的一部分&#xff0c;干货满满&#xff0c;希望对大家有帮助。 高质量博客汇总 然后就是博主最近最花时间的一个专栏…

c语言实现堆

提示&#xff1a;文章写完后&#xff0c;目录可以自动生成&#xff0c;如何生成可参考右边的帮助文档 文章目录 前言一、树1、树的概念2、树的相关概念3、树的表示 二、二叉树1、二叉树概念2、特殊的二叉树3、二叉树的性质4、二叉树的顺序结构5、二叉树的链式结构 三、堆(二叉树…

基于VHDL语言的汽车测速系统设计_kaic

摘 要 汽车是现代交通工具。车速是一项至关重要的指标。既影响着汽车运输的生产率,又关乎着汽车行驶有没有超速违章&#xff0c;还影响着汽车行驶时人们的人身安全。而伴随着我国国民的安全防范意识的逐步增强&#xff0c;人们也开始越来越关心因为汽车的超速而带来的极其严重…

2005-2022年全国各地级市经济增长目标约束

2005-2022年全国各地级市经济增长目标约束 1、时间&#xff1a;2005-2022年 2、来源&#xff1a;政府工作报告 3、指标&#xff1a;省份、城市、年份、经济增长目标硬约束、经济增长目标软约束 4、范围&#xff1a;地级市&#xff0c;每年具体城市数量参看下面图片 5、指标…

C语言_通过函数调用改变指针参数的指向

C语言_通过函数调用改变指针参数的指向 函数的参数为指针类型&#xff0c;对一般指针参数执行间接访问操作是允许函数修改原先的数组元素的&#xff0c;但是函数所接收到的参数是原参数的一份拷贝&#xff0c;所以函数对参数进行操作而不会影响实际的参数&#xff0c;就是说正常…