深度学习基础—Batch Norm

        对于一个神经网络我们知道,归一化输入特征是加速网络训练的技巧之一,因为归一化后,损失函数的图像就会由狭长变得更圆,那么这是否启发我们,在深度更深模型中,对各层的输出进行归一化,有益于下一层的学习?毕竟上一层的输出是下一层的输入。这就是Batch Norm的核心作用。

        由于每一层的参数更新后,对于同一输入,输出的分布就会发生改变(这称之为Covariate shift:内部协变量偏移),这带来的影响是下一层需要不断适应上一层输出的分布,从而导致下一层与上一层之间的联系紧密(有点过拟合的意思),通过归一化就可以加强层与层之间的独立性,从而加速网络的学习。

1.Batch Norm的计算方式


        在此先讲讲Batch Norm和Mini-batch之间的关系。Mini-batch是Mini-batch梯度下降法的训练集的最小划分子集,而Batch Norm需要在Mini-batch上运行,即需要计算每一个Mini-batch的均值、方差,然后进行归一化。

深度学习基础—梯度问题与Mini-batch 梯度下降icon-default.png?t=N7T8http://t.csdnimg.cn/EBmIH

(1)计算Mini-batch 的均值

        其中,m为Mini-batch 上样本的数量。

(2)计算Mini-batch 的方差

        其中,m为Mini-batch 上样本的数量,注意是先平方再求和。

(3)归一化

        其中,z[l]是本层的输入经过w和b的计算结果,分母的ℇ是很小的一个数,防止分母为0。通过这样可以将z[l]归一化,从而化为均值为0,方差为1的分布。

(4)线性组合

        其中,γ和β是网络的参数,即和w、b一样需要经过训练更新值,从而适应网络。当γ=步骤(3)的分母,β=μ时,本步的结果是一个恒等式。

        为了加强网络的学习能力,使用这两个参数来改变分布的平均值。如果没有这两个参数,那么相当于所有的都暴力归一化,而我们知道类似sigmoid激活函数的图像如下,在靠近0的位置图像近似等于线性函数,那么网络的表达能力就会大大减弱,因此通过这两个网络参数加强网络的学习能力。

2.Batch Norm在网络中的具体应用

        如上图所示的网络,在没有进行归一化前,每层隐含层的计算是在下图中去除红框的剩余部分,g(z)是激活函数。在权重的线性组合后,激活函数前添加归一化的计算(为什么不在激活函数后添加,这点一直饱受争议,这里选择这种方式,无论是哪种方式,只要能对网络训练有帮助,就是不错的方法)。

        对于每一层隐含层,向前传播就是按照上图的流程进行计算,直到计算出损失,向后传播的过程中,可以使用优化算法:mini-batch梯度下降、动量梯度下降、Adam等等,对参数γ和β进行和w、b一样的更新方式。这里简化流程,使用mini-batch梯度下降,算法流程如下:

for i = 1......t{对X{i}向前传播在每个隐含层计算z[l],并用BN归一化计算带有正则项的损失函数向后传播,计算dw、db、dγ、dβ更新参数:w:=w-a*dw;b:=b-a*db;γ:=γ-a*dγ;β:=β-a*dβ;
}

        实际上,在网络的训练过程中,参数b和参数β发生了冲突,两者的作用相似。因为z=w*x+b,计算的平均值μ中就包含常数b,那在归一化步骤(3)中分子又减去了平均值,即减去了b。同时在步骤(4)中添加了参数β,此时b不发挥作用,发挥作用的是β。因此,实际训练中,为了减少参数个数,可以选择去除参数b,那么在优化算法是也可以不再优化这个参数。

3.Batch Norm在测试集的具体应用

        在测试集中,为了预测某个样本的输出结果,需要单独处理样本。这样就引入一个问题,单个样本的均值和方差没有意义,因此使用Batch Norm起不了作用,这就需要我们估计平均值和方差,于是可以使用指数加权移动平均值算法来进行估计。

        在训练网络的时候,我们可以运用指数加权移动平均值获得整个训练集的各层平均值μ[t][l]、方差σ[t][l]和z[t][l](t为Mini-batch的序号,l为层的序号),在测试的时候,用这些估值计算z[t][l]norm,从而计算测试样本的输出。这样做的本质其实是实现测试集和训练集来自同一分布的要求,因为在训练集都实现了Batch Norm,所以也要在测试集实现Batch Norm。        

4.如何理解Batch Norm

        (1)Batch Norm可以对每一层的输出进行归一化,这样每一层的输入就更加稳定,从而可以选择较大的学习率加速网络的训练。

        (2)减少过拟合风险,提高模型泛化能力,同时让各层保持相对独立,提高学习能力。这就像抄作业,学霸每次给的作业如果详细程度不一样,比如这次给详细版,下次只给有关键词的,那么学渣就会特别依赖学霸,因为学渣无法从抄作业中获取如何解题的思路。但是如果学霸每次都给学渣详细版或简略版作业,由于作业风格一致,学渣就能从多次作业中找到作业的风格(至少可以学会些如何解题的规律或模版),从而提高学渣独立思考的能力。

        (3)类似dropout,dropout随机消除神经元,从而为网络添加噪音,让神经元不再相互依赖。而Batch Norm由于对均值的缩放和在mini-batch上计算,也会为网络添加噪音,同时让各层相对独立,不再相互依赖。因此有一定的正则化效果,减轻过拟合。但是不要把这种方法当做正则化的手段,而是加速学习的技巧。

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

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

相关文章

day6 测试基础知识积累

JMeter 服务端系统性能测试是针对服务器端应用程序或服务 在特定负载下的运行能力和稳定性进行评估的方法。 产品文档应该有产品的性能指标,做性能测试前,如果需求文档没有性能指标则要向产品团队要。服务端系统性能测试 的常见指标有:TPS、…

ebpf教程(4.1):XDP程序的加载

文章目录 前言环境准备加载XDP程序源码构建过程运行 前言 前置阅读要求: ebpf教程(3):使用cmake构建ebpf项目-CSDN博客[译] [论文] XDP (eXpress Data Path):在操作系统内核中实现快速、可编程包处理(ACM,2018)xdp-t…

kubeadm搭建生产环境高可用集群

前言 搞了好多天(今天是20240819),中途遇到各种各样的问题,总算是可以用了 我这里用的vmware开了5台服务器做学习实践 K8S因为直接使用的 pkgs.k8s.io 仓库,所以直接拉取的最新release版(v1.31&#xff09…

SIRA-PCR: Sim-to-Real Adaptation for 3D Point Cloud Registration 论文解读

目录 一、导言 二、 相关工作 1、三维点云配准工作 2、无监督域适应 三、SIRA-PCR 1、FlyingShape数据集 2、Sim-to-real自适应方法 3、配准 4、损失函数 一、导言 该论文来自于ICCV2023,论文提出了一种新的方法SIRA-PCR,通过利用合成数据Flying…

网易云音乐故障 2 小时,这次到底谁背锅?(今天记得领补偿)

大家好,我是程序员鱼皮,8 月 19 日下午,网易云音乐突发严重故障,并登顶微博热搜,跟黑神话悟空抢了热度。 根据用户的反馈,故障的具体表现为:用户无法登录、歌单加载失败、播放信息获取失败、无法…

了解数据库中常用存储引擎数据结构(2)

目录 深入了解B树及其变种 BTree BTree B*Tree BTree并发机制 B-Link Tree 深入了解B树及其变种 先把我们要解释的B树变种都列出来,B树的变种主要有B树、B*树、B-Link树、COW B树、惰性B树、Bw树等。 下面具体来分析这些变种的优势和发展趋势。 BTree 下图…

Taro+Vue 创建微信小程序

TaroVue 创建微信小程序 一、全局安装 tarojs/cli二、项目初始化三、现在去启动项目吧 一、全局安装 tarojs/cli npm install -g tarojs/cli //安装 npm info tarojs/cli //查看安装信息 如果正常显示版本说明成功了,就直接跳到第二步吧官网说:…

AI产品经理如何入门?零基础入门到精通,收藏这一篇就够了

现在做产品经理,真的挺累的。 现在产品越来越难做,晋升困难,工资迟迟不涨……公司裁员,产品经理首当其冲!! 做产品几年了,还没升职,就先到了“职业天花板”。 想凭工作几年积累的…

BFS解决单源最短路问题

目录 迷宫中离入口最近的出口 最小基因变化 单词接龙 为高尔夫比赛砍树 迷宫中离入口最近的出口 题目 思路 使用宽度优先遍历解决这道题,需要一个二维数组标记是否被遍历过,也需要一个队列辅助完成宽度优先遍历,类似于水波纹一样&#x…

JAVA基础:File类

目录 前言 file对象的创建 file的常用方法 前言 file类表示的是系统中的一个文件或者文件夹 file类和系统中的文件或者文件夹不需要是一一对应的,我们可以在file类中写你系统中不存在的文件或文件夹 file类中存储的实际上是文件或文件夹的抽象路径&#xff0c…

面试经典算法150题系列-最长公共前缀

最长公共前缀 编写一个函数来查找字符串数组中的最长公共前缀。 如果不存在公共前缀,返回空字符串 ""。 示例 1: 输入:strs ["flower","flow","flight"] 输出:"fl"示例 2&…

软件测试 - 自动化测试(概念)(Java)(自动化测试分类、web自动化测试、驱动、selenium自动化测试工具的安装)

一、自动化的概念 ⾃动洒⽔机,主要通上⽔就可以⾃动化洒⽔并且可以⾃动的旋转。 ⾃动洗⼿液,免去了⼿动挤压可以⾃动感应出洗⼿液 超市⾃动闸⻔,不需要⼿动的开⻔关⻔ ⽣活中的⾃动化案例有效的减少了⼈⼒的消耗,同时也提⾼了⽣…

C语言程序设计(初识C语言后部分)

代码是一门艺术&#xff0c;键盘是我的画笔。 3.递归和迭代&#xff08;循环就是一种迭代&#xff0c;迭代不仅仅是循环&#xff09; 求n&#xff01; 递归方式&#xff1a; n!---> 1 (n1); n*(n-1)! (n>1) #include <stdio.h> //n!-->递归方式 int fac(in…

Kafka运行机制(一):Kafka集群启动,controller选举,生产消费流程

前置知识 Kafka基本概念https://blog.csdn.net/dxh9231028/article/details/141270920?spm1001.2014.3001.5501 1. Kafka集群启动 Kafka在启动集群中的各个broker时&#xff0c;broker会向controller注册自己&#xff0c;并且从controller节点同步集群元数据。 broker是Kaf…

C++入门——16C++11新特性

1.列表初始化 初始化列表时&#xff0c;可添加等号()&#xff0c;也可不添加。 struct Point {int _x;int _y; };int main() {int x1 1;int x2{ 2 };int array1[]{ 1, 2, 3, 4, 5 };int array2[5]{ 0 };Point p{ 1, 2 };// C11中列表初始化也可以适用于new表达式中int* pa …

jstack结果提取特定线程池线程的堆栈

这里假设你已经知道如何定位java进程PID&#xff0c;以及如何执行jstack命令进行导出&#xff0c;下面仅提供相关命令&#xff0c;及示例 ps aux|grep java jstack 8229 > jstack_output.log v1版本 grep second jstack_output.log 如果此时我们想重点关注一下下面这个线程…

高性价比全屋智能家居解决方案,提升生活幸福感!

在快节奏的城市生活中&#xff0c;公司、住宅两点一线的上班族不在少数。近年来&#xff0c;随着物联网、大数据技术的不断发展与5G的广泛普及&#xff0c;生活品质的提升成为上班族新的关注焦点。忙碌的工作时间结束后&#xff0c;智慧家居系统打造便捷、安全、智能、舒适的居…

(javaweb)SpringBootWeb案例(毕业设计)案例--部门管理

目录 1.准备工作 2.部门管理--查询功能 3.前后端联调 3.部门管理--新增功能 1.准备工作 mapper数据访问层相当于dao层 根据页面原型和需求分析出接口文档--前后端必须遵循这种规范 大部分情况下 接口文档由后端人员来编写 前后端进行交互基于restful风格接口 http的请求方式…

文书智能助手

背景 司法、医疗等行业存在着大量的文书&#xff0c;一份文书或者卷宗少则几十页&#xff0c;多则几万页。在查看和检查这些文书时&#xff0c;会遇到大量的信息。当需要查询进一步的详细内容时&#xff0c;往往需要选择一下文字&#xff0c;然后再在各种系统中 查询详细的信息…

日拱一卒(4)——leetcode学习记录:路径总和

一、任务&#xff1a; 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径&#xff0c;这条路径上所有节点值相加等于目标和 targetSum 。如果存在&#xff0c;返回 true &#xff1b;否则&#xff0c;返回 false 。 叶…