神经网络中使用Batch Normalization 解决梯度问题

BN本质上解决的是反向传播过程中的梯度问题。

详细点说,反向传播时经过该层的梯度是要乘以该层的参数的,即前向有:

h_l = w_l^Th_{l-1}

那么反向传播时便有:

\frac{\partial l}{\partial h_{l-1}} = \frac{\partial l}{\partial h_l} . \frac{\partial h_l}{\partial h_{l-1}} = \frac{\partial l}{\partial h_l} w_l

那么考虑从l层传到k层的情况,有:

\frac{\partial l}{\partial h_k} = \frac{\partial l}{\partial h_l} \prod _{i=k+1}^{l} w_i

上面这个 \prod_{i=k+1}^l w_i 便是问题所在。因为网络层很深,如果 w_i 大多小于1,那么传到这里的时候梯度会变得很小比如 0.9^{100} ;而如果 w_i 又大多大于1,那么传到这里的时候又会有梯度爆炸问题 比如1.1^{100} 。BN所做的就是解决这个梯度传播的问题,因为BN作用抹去了w的scale影响。

具体有:

h_l=BN(w_lh_{l-1}) = BN(\alpha w_lh_{l-1})

那么反向求导时便有了:

\frac{\partial h_l}{\partial h_{l-1}}=\frac{\partial BN w_lh_{l-1}}{\partial h_{l-1}} =\frac{\partial BN \alpha w_lh_{l-1}}{\partial h_{l-1}}

可以看到此时反向传播乘以的数不再和 w 的尺度相关,也就是说尽管我们在更新过程中改变了 w 的值,但是反向传播的梯度却不受影响。更进一步:

\frac{\partial h_l}{\partial w_l} = \frac{\partial BNw_lh_{l-1}}{\partial w_l} = \frac{1}{\alpha}.\frac{\partial BN \alpha w_l h_{l-1}}{\partial w_l}

即尺度较大的 w 将获得一个较小的梯度,在同等的学习速率下其获得的更新更少,这样使得整体 w 的更新更加稳健起来。

总结起来就是BN解决了反向传播过程中的梯度问题(梯度消失和爆炸),同时使得不同scale的 w 整体更新步调更一致。

 

转载于:https://www.cnblogs.com/mengxiangtiankongfenwailan/p/9895117.html

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

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

相关文章

基于matlab的图像分割,基于MATLAB的图像分割算法研究毕业论文

作者姓名 XXX学号指导教师 XX教授学科专业 计算机科学与技术所在学院 计算机学院提交日期结 论数字图像目标分割与提取是数字图像处理和计算机视觉领域中一个备受关注的研究分支,也是图像处理领域的一个经典难题。经过近二十年的不断研究和探讨&#xf…

项目管理(2):备战pmp

1项目阶段与项目生命周期 将每一个项目划分为若干个阶段(phases),以便提高管理控制,并提供与该项目实施组织的日常运作之间的联系 这些阶段合在一起称为项目生命周期 项目的生命周期用于定义一个项目的开始和结束 许多组织识别出一…

2018-2019-1 20189213《Linux内核原理与分析》第四周作业

《Linux内核原理与分析》第四周学习总结: 1.课本知识总结: 本章内容并不多,首先是介绍了一些Linux内核源代码的目录结构,并基于Linux内核源代码构造一个简单的操作系统MenuOS,同时在MenuOS启动过程中跟踪分析Linux内核…

matlab窗函数带通滤波器,Matlab结合窗函数法设计数字带通FIR滤波器

Matlab结合窗函数法设计数字带通FIR滤波器 课程设计任务书学生姓名: 专业班级: 通信工程 指导教师: 工作单位: 信息工程学院 题 目:利用 Matlab 仿真软件系统结合窗函数法设计一个数字带通 FIR 滤波器初始条件: 1.《数…

java学习(53):接口的定义和创建

定义一个computer类 package com.company; public interface computer{ /定义公告,静态,常量/ public static final int MAX_NUM5000; /接口中只允许定义公共的抽象方法/ public abstract double couunt(double num1,double num2,char tag); } 定义一个…

PHP动态设计的设计流程,《PHP设计模式介绍》第十四章 动态记录模式

到目前为止,您所看到的这些设计模式大大提高了代码的可读性与可维护性。然而,在WEB应用设计与开发中一个基本的需求与挑战:数据库应用,这些设计模式都没有涉及到。本章与接下来的两章—表数据网关与表数据映射,提供了三…

java学习(54):接口之间的继承

定义一个接口类 //接口 interface interface4 { public abstract void fly(); public abstract void eat(); } //定义一个老鹰类 public class interface3 implements interface4{ public void fly(){ System.out.println(“我是老鹰,我会飞”); } public void eat…

php addall,深入解析thinkphp中的addAll方法

原因:在做中控系统中遇到了一个给用户批量分配角色的问题,刚开始想到的是循环插入,但立马给否定了,循环操作数据库开发者的大忌啊,于是查找手册找到数据写入看到批量操作:addAll(),测试成功,以为…

Java排查问题随笔

常言道:“好记性不如烂笔头”,确实很有道理。在日常工作中,偶尔处理下线上问题还是很常见的,经常出现的情况就是忘记一些常用命令(套路)的用法了,因此整理下来非常用必要,以便关键时…

java学习(55):定义一个抽象类的继承

不同的是定义一个抽象类先 //抽象类 public abstract class interface4 { public abstract void fly(); public abstract void eat(); } //定义老鹰类继承 /定义一个老鹰类 public class interface3 extends interface4{ public void fly(){ System.out.println(“我是老鹰&…

可持久化线段树学习笔记

可持久化线段树,即主席树。 每次修改的时候不修改原来的节点,暴力建新节点,充分运用了函数式编程的思想。 模板题:给定一个数列,\(m\) 次询问求区间 \([l,r]\) 内的第 \(k\) 大。 利用前缀和思想: #include…

wordpress functions.php 在哪,在functions.php中定义变量并在WordPress中的函数钩子中访问它们...

我想更详细地了解Wordpress结构.正如我所知,使用全局关键字并不是一个好主意.这是我想要完成的:Inside functions.php$affID 12334; //defining a variableadd_shortcode(affiliate_link, function() {$newLink https://example.com?id . $affID;return $newLink…

java学习(56):接口之间的继承续

//定义一个接口,里面放置多个方法 public interface CountManagement { double count(double n,double m,char tag); double count(double up,double down,double h); double eqAax(double num1,double num2); } //定义一个接口,里面需要实现多个方法 pu…

[UE4]单机游戏改网络游戏,不完全清单

把Actor的复制打开中腰数据的复制打开,且只在服务器修改(比如角色属性血量)需要同步的Actor,不在客户端Spawn客户端的操作,先报告到服务器,服务器再广播到所有客户端某些逻辑只在服务器运行(比如…

java学习(57):内部类

/** 2 * 1.内部类可以直接访问外部类的成员,包括私有 3 * 2.外部类要访问内部类的成员必须创建对象 4 * author jjz 5 * 6 */ public class outer { //外部定义的方法 public void play(){ System.out.println(“我喜欢打篮球”); } public static void main(String…

php对接ai图片处理,php – 使用imagick将.psd和.ai转换为PNG / JPG

我解决了它,并将与世界分享!它会将.ai,.psd,.jpg,.png,.gif转换为缩略图.这是一个需要4个参数的函数:$dir – 要保存的目录.$tmpName – 命名不包括扩展名的文件的名称.$fileType – 自解释.$size – 大或小.function thumbGenerator($dir,$tmpName,$fil…

python初识

1.python的简介   python是一门解释型,弱类型 高级开发编程语言. 2.python安装 (1)python3.x  https://www.python.org/downloads/ (2)pycharm  https://www.jetbrains.com/pycharm/ 3、编写第一个python程序 符号:英文 编码方式:“utf-8…

java学习(58):私有内部类后访问

私有化外部方法访问 public class outer { //外部定义的方法 private class student { public void play() { System.out.println(“只有学生才会喜欢打篮球”); } } public void teacher() { student stu new student(); stu.play(); } public static void main(String[] arg…

java学习(59):static修饰内部类

class Outer { private int num 10; private static int num2 100; //内部类用静态修饰是因为内部类可以看出是外部类的成员public static class Inner {public void show() {//System.out.println(num);System.out.println(num2);}public static void show2() {//System.out…

Python_自定义关键字的使用

1.在Python中新建一个套件MOSAPP(一般为APP名称):New Suite→Directory 2.在套件下新建个资源文件My:New Resource:My 3.在My资源文件库下新建个关键字Mytest:New User KeyWord:Mytest 4.在01smoke下新建一…