深度学习500问——Chapter03:深度学习基础(3)

news2025/2/25 6:39:50

文章目录

3.5 Batch Size

3.5.1 为什么需要 Batch size

3.5.2 Batch Size 值的选择

3.5.3 在合理范围内,增大Batch Size有何好处

3.5.4 盲目增大 Batch Size有何坏处

3.5.5 调节Batch Size对训练效果影响到底如何

3.6 归一化

3.6.1 归一化含义

3.6.2 为什么要归一化

3.6.3 为什么归一化能提高求解最优解速度

3.6.4 3D图解未归一化

3.6.5 归一化有哪些类型

3.6.6 局部响应归一化作用

3.6.7 理解局部响应归一化

3.6.8 什么是批归一化(Batch Normalization)

3.6.9 批归一化(BN)算法的优点

3.6.10 批归一化(BN)算法流程

3.6.11 批归一化和群组归一化比较

3.6.12 Weight Normalization 和 Batch Normalization比较

3.6.13 Batch Normalization在什么时候用比较合适


3.5 Batch Size

3.5.1 为什么需要 Batch size

Batch的选择,首先决定的是下降的方向。

如果数据集比较小,可采用全数据集的形式,好处是:

  1. 由全数据集确定的方向能够更好地代表样本总体,从而更准确地朝向极值所在的方向。
  2. 由于不同权重的梯度值差别巨大,因此选取一个全局的学习率很困难。Full Batch Learning可以使用Rprop只基于梯度符号并且针对性单独更新各权值。

对于更大的数据集,假如采用全数据集的形式,坏处是:

  1. 随着数据集的海量增长和内存限制,一次性载入所有的数据进来变得越来越不可行。
  2. 以Rprop的方式迭代,会由于各个Batch之间的采样差异性,各次梯度修正值相互抵消,无法修正。这才有了后来的RMSProp的妥协方案。

3.5.2 Batch Size 值的选择

假如每次只训练一个样本,即Batch Size=1。线性神经元在均方误差代价函数的错误面是一个抛物面,横截面是椭圆。对于多层神经元、非线性网络,在局部依然近似是抛物面。此时,每次修正方向以各自样本的梯度方向修正,横冲直撞各自为政,难以达到收敛。

既然Batch Size为全数据集或者Batch Size=1都有各自缺点,可不可以选择一个适中的Batch Size值呢?

此时,可采用批梯度下降法(Mini-batches Learning)。因为如果数据集足够充分,那么用一半(甚至少得多)的数据训练算出来的梯度与用全部数据训练出来的梯度几乎是一样的。

3.5.3 在合理范围内,增大Batch Size有何好处

  1. 内存利用率提高了,大矩阵乘法的并行化效率提高。
  2. 跑完一次epoch(全数据集)所需的迭代次数减少,对于相同数据量的处理速度进一步加快。
  3. 在一定范围内,一般来说Batch Size越大,其确定的下降方向越准,引起训练震荡越小。

3.5.4 盲目增大 Batch Size有何坏处

  1. 内存利用率提高了,但是内存容量可能撑不住了。
  2. 跑完一次epoch(全数据集)所需的迭代次数减少,要想达到相同的精度,其所花费的时间大大增加了,从而对参数的修正也就显的更加缓慢。
  3. Batch Size增大到一定程度,其确定的下降方向已经基本不再变化。

3.5.5 调节Batch Size对训练效果影响到底如何

  1. Batch Size太小,模型表现效果极其糟糕(error飙升)。
  2. 随着Batch Size增大,处理相同数据量的速度越快。
  3. 随着Batch Size增大,达到相同精度所需要的epoch数量越来越多。
  4. 由于上述两种因素的矛盾,Batch Size增大到某个时候,达到时间上的最优。
  5. 由于最终收敛精度会陷入不同的局部极值,因此Batch Size增大到某些时候,达到最终收敛精度上的最优。

3.6 归一化

3.6.1 归一化含义

归纳统一样本的统计分布性。归一化在0-1之间是统计的概率分布,归一化在-1--+1之间是统计的坐标分布。

无论是为了建模还是为了计算,首先基本度量单位要统一,神经网络是以样本在事件中的统计分别几率来进行训练(概率计算)和预测,且sigmoid函数的取值是0到1之间的,网络最后一个节点的输出也是如此,所有经常要对样本是输出归一化处理。

归一化是统一在0-1之间的统计概率分布,当所有样本的输入信号都为正值时,与第一隐含层神经元相连的权值只能同时增加或减小,从而导致学习速度很慢。

另外在数据中常存在奇异样本数据,奇异样本数据存在所引起的网络训练时间增加,并可能引起网络无法收敛。为了避免出现这种情况及后面数据处理的方便,加快网络学习速度,可以对输入信号进行归一化,使得所有样本的输入信号其均值接近于0或与其均方差相比很小。

3.6.2 为什么要归一化

  1. 为了后面数据处理的方便,归一化的确可以避免一些不必要的数值问题。
  2. 为了程序运行时收敛加快。
  3. 同一量纲。样本数据的评价标准不一样,需要对其量纲化,统一评价标准。这算是应用层面的需求。
  4. 避免神经元饱和。啥意思?就是当神经元的激活在接近0或者1时会饱和,在这些区域,梯度几乎为0,这样,在反向传播过程中,局部梯度就会接近0,这会有效地“杀死”梯度。
  5. 保证输出数据中数值小的不被吞食。

3.6.3 为什么归一化能提高求解最优解速度

上图是代表数据是否均一化的最优解寻解过程(圆圈可以理解为等高线)。左图表示未经归一化操作的寻解过程,右图表示经过归一化后的寻解过程。

当使用梯度下降法寻求最优解时,很有可能走“之字形”路线(垂直等高线走),从而导致需要迭代很多次才能收敛;而右图对两个原始特征进行了归一化,其对应的等高线显得很圆,在梯度下降进行求解时能较快的收敛。

因此如果机器学习模型使用梯度下降法求解最优解时,归一化往往非常有必要,否则很难收敛甚至不能收敛。

3.6.4 3D图解未归一化

例子:

假设w1的范围在[-10, 10],而w2的范围在[-100, 100],梯度每次都前进1单位,那么在w1的方向上每次相当于前进了1/20,而在w2上只相当于1/200!某种意义上来说,在w2上前进的步长更小一些,而w1在搜素过程中会比w2“走”的更快。

这样会导致,在搜素过程中更偏向于w1的方向。走出了“L”形状,或者成为“之”字形。

3.6.5 归一化有哪些类型

1. 线性归一化

x' = \frac{x - \min(x)}{\max(x) - \min(x)}

适用范围:比较适用在数值比较集中的情况。

缺点:如果max和min不稳定,很容易使得归一化结果不稳定,使得后续使用效果也不稳定。

2. 标准差标准化

x' = \frac{x - \mu}{\sigma}

含义:经过处理的数据符合标准正态分布,即均值为0,标准差为1,其中\mu为所有样本数据的均值,\sigma为所有样本数据的标准差。

3. 非线性归一化

适用范围:经常用在数据分化比较大的场景,有些数值很大,有些很小。通过一些数学函数,将原始值进行映射。该方法包括log、指数、正切等。

3.6.6 局部响应归一化作用

LRN是一种提高深度学习准确度的技术方法。LRN一般是在激活、池化函数后的一种方法。

在AlexNet中,提出了LRN层,对局部神经元的活动创建竞争机制,使其中响应比较大对值变得相对更大,并抑制其他反馈较小的神经元,增强了模型的泛化能力。

3.6.7 理解局部响应归一化

​ 局部响应归一化原理是仿造生物学上活跃的神经元对相邻神经元的抑制现象(侧抑制),其公式如下:

b^i_{x,y} = a_{x,y}^{i} / \left( k + \alpha \sum_{j=\max(0, i-n/2)}^{\min(N-1,i+n/2)} (a_{x,j}^{j})^{2} \right)^{\beta}

其中,

1. a:表示卷积层(包括卷积操作和池化操作)后的输出结果,是一个四维数组[batch,height,width,channel]。

  • batch:批次数(每一批为一张图片)。
  • height:图片高度。
  • width:图片宽度。
  • channel:通道数。可以理解成一批图片中的某一个图片经过卷积操作后输出的神经元个数,或理解为处理后的图片深度。

2. a_{x,y}^i表示在这个输出结构中的一个位置[a,b,c,d],可以理解成在某一张图中的某一个通道下的某个高度和某个宽度位置的点,即第a张图的第d个通道下的高度为b宽度为c的点。

3. N:论文公式中的N表示通道数(channel)。

4. a,n/2,k分别表示函数中的 input,depth_radius,bias。参数 k, n, \alpha, \beta 都是超参数,一般设置 k=2, n=5, \alpha=1*e-4, \beta=0.75

5. \sum :\sum叠加的方向是沿着通道方向的,即每个点值的平方和是沿着 a 中的第 3 维 channel 方向的,也就是一个点同方向的前面 n/2 个通道(最小为第0 个通道)和后 n/2个通道(最大为第 d-1 个通道)的点的平方和(共n+1 个点)。而函数的英文注解中也说明了把 input 当成是 d个 3 维的矩阵,说白了就是把 input 的通道数当作 3 维矩阵的个数,叠加的方向也是在通道方向。

简单的示意图如下:

3.6.8 什么是批归一化(Batch Normalization)

以前在神经网络训练中,只是对输入层数据进行归一化处理,却没有在中间层进行归一化处理。要知道,虽然我们对输入数据进行了归一化处理,但是输入数据经过\sigma(WX+b)这样的矩阵乘法以及非线性运算之后,其数据分布很可能被改变,而随着深度网络的多层运算之后,数据分布的变化将越来越大。如果我们能在网络的中间也进行归一化处理,是否对网络的训练起到改进作用呢?答案是 肯定的。

这种在神经网络中间层也进行归一化处理,使训练效果更好的方法,就是批归一化Batch Normalization(BN)。

3.6.9 批归一化(BN)算法的优点

  1. 减少人为选择参数。在某些情况下可以取消dropout和L2正则项参数,或者采取更小的L2正则项约束参数;
  2. 减少了对学习率的要求。现在我们可以使用初始很大的学习率或者选择较小的学习率,算法也能够快速训练收敛;
  3. 可以不再使用局部响应归一化。BN本身就是归一化网络(局部响应归一化在AlexNet网络中存在);
  4. 破坏原来的数据分布,一定程度上缓解过拟合(防止每批训练中某一个样本经常被挑选到,文献说这个可以提高1%的精度);
  5. 减少梯度消失,加快收敛速度,提高训练精度。

3.6.10 批归一化(BN)算法流程

下面给出BN算法在训练时的过程

输入:上一层输出结果X = {x_1, x_2, ..., x_m},学习参数\gamma, \beta

算法流程:

1. 计算上一层输入数据的均值

\mu_{\beta} = \frac{1}{m} \sum_{i=1}^{m} (x_{i})

其中,m是此次训练样本 batch 的大小。

2. 计算上一层输出数据的标准差

\sigma_{\beta}^{2} = \frac{1}{m} \sum_{i=1}^{m} (x_{i} - \mu_{\beta})^{2}

3. 归一化处理,得到

\hat{x}_{i} = \frac{x_{i} + \mu_{\beta}}{\sqrt{\sigma_{\beta}^{2} + \varepsilon}}

其中,\epsilon是为了避免分母为0而加进去的接近于0的很小值。

4. 重构,对经过上面归一化处理得到的数据进行重构,得到

y_{i} = \gamma \hat{x}_{i} + \beta

其中,\gamma, \beta为可学习参数。

注:上述是BN的训练过程,但是当在投入使用时,往往只是输入一个样本,没有所谓的均值\mu_{\beta}和标准差\sigma_{\beta}^2。此时,均值\mu_{\beta}是计算所有batch \mu_{\beta}值的平均值得到,标准差\sigma_{\beta}^2采用每个batch\sigma_{\beta}^2的无偏估计得到。

3.6.11 批归一化和群组归一化比较

名称特点
批量归一化(Batch Normalization,以下简称 BN)可让各种网络并行训练。但是,批量维度进行归一化会带来一些问题——批量统计估算不准确导致批量变小时,BN 的误差会迅速增加。在训练大型网络和将特征转移到计算机视觉任务中(包括检测、分割和视频),内存消耗限制了只能使用小批量的 BN。
群组归一化 Group Normalization (简称 GN)GN 将通道分成组,并在每组内计算归一化的均值和方差。GN 的计算与批量大小无关,并且其准确度在各种批量大小下都很稳定。
比较

在 ImageNet 上训练的 ResNet-50上,GN 使用批量大小为 2 时的错误率比 BN 的错误率低 10.6% ;当使用典型的批量时,GN 与 BN 相当,并且优于其他标归一化变体。而且,GN 可以自然地从预训练迁移到微调。

在进行 COCO 中的目标检测和分割以及 Kinetics 中的视频分类比赛中,GN 可以胜过其竞争对手,表明 GN 可以在各种任务中有效地取代强大的 BN。

3.6.12 Weight Normalization 和 Batch Normalization比较

​ Weight Normalization 和 Batch Normalization 都属于参数重写(Reparameterization)的方法,只是采用的方式不同。

​ Weight Normalization 是对网络权值W进行 normalization,因此也称为 Weight Normalization;

​ Batch Normalization 是对网络某一层输入数据进行 normalization。

​ Weight Normalization相比Batch Normalization有以下三点优势:

  1. Weight Normalization 通过重写深度学习网络的权重W的方式来加速深度学习网络参数收敛,没有引入 minbatch 的依赖,适用于 RNN(LSTM)网络(Batch Normalization 不能直接用于RNN,进行 normalization 操作,原因在于:1) RNN 处理的 Sequence 是变长的;2) RNN 是基于 time step 计算,如果直接使用 Batch Normalization 处理,需要保存每个 time step 下,mini btach 的均值和方差,效率低且占内存)。
  2. Batch Normalization 基于一个 mini batch 的数据计算均值和方差,而不是基于整个 Training set 来做,相当于进行梯度计算式引入噪声。因此,Batch Normalization 不适用于对噪声敏感的强化学习、生成模型(Generative model:GAN,VAE)使用。相反,Weight Normalization 对通过标量 g 和向量 v 对权重 W 进行重写,重写向量v 是固定的,因此,基于 Weight Normalization 的 Normalization 可以看做比 Batch Normalization 引入更少的噪声。
  3. 不需要额外的存储空间来保存 mini batch 的均值和方差,同时实现 Weight Normalization 时,对深度学习网络进行正向信号传播和反向梯度计算带来的额外计算开销也很小。因此,要比采用 Batch Normalization 进行 normalization 操作时,速度快。 但是 Weight Normalization 不具备 Batch Normalization 把网络每一层的输出 Y 固定在一个变化范围的作用。因此,采用 Weight Normalization 进行 Normalization 时需要特别注意参数初始值的选择。

3.6.13 Batch Normalization在什么时候用比较合适

 在CNN中,BN应作用在非线性映射前。在神经网络训练时遇到收敛速度很慢,或梯度爆炸等无法训练的状况时可以尝试BN来解决。另外,在一般使用情况下也可以加入BN来加快训练速度,提高模型精度。

​ BN比较适用的场景是:每个mini-batch比较大,数据分布比较接近。在进行训练之前,要做好充分的shuffle,否则效果会差很多。另外,由于BN需要在运行过程中统计每个mini-batch的一阶统计量和二阶统计量,因此不适用于动态的网络结构和RNN网络。

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

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

相关文章

大模型知识库

一种利用 langchain 思想实现的基于本地知识库的问答应用,目标期望建立一套对中文场景与开源模型支持友好、可离线运行的知识库问答解决方案。 1. 下载Langchain-chatchat git clone https://github.com/chatchat-space/Langchain-Chatchat/ 2. 下载大模型和embe…

打开Railway神奇大门:Railway免费注册部署全面教程

🧙‍♂️ 诸位好,吾乃斜杠君,编程界之翘楚,代码之大师。算法如流水,逻辑如棋局。 📜 吾之笔记,内含诸般技术之秘诀。吾欲以此笔记,传授编程之道,助汝解技术难题。 &#…

React——开发者工具

浏览器插件:谷歌浏览器插件react-devtools 方式1:chrome应用商店添加 方式2:下载安装包放在浏览器上

Redis缓存穿透的几种解决方案

目录 缓存穿透原理: 缓存穿透一般有几种解决方案: 1.缓存空值 2.使用锁 3.布隆过滤器 优缺点 布隆过滤器误判理解 布隆过滤器的简单使用流程 4.组合方案 那么当我们高并发的访问短链接或者人为的去穿透的时候呢? 最近做项目遇到了缓…

SpringBoot自动配置

EnableAutoConfiguration源码解析SpringBoot常用条件注解源码解析SpringBoot之Mybatis自动配置源码解析SpringBoot之AOP自动配置源码解析SpringBoot Jar包启动过程源码解析 SpringBoot2.6.6源码地址:SpringBoot-2.6.6: SpringBoot2.6.6 注解详解 SpringBootConfig…

【技术栈】Spring Cache 简化 Redis 缓存使用

​ SueWakeup 个人主页:SueWakeup 系列专栏:学习技术栈 个性签名:保留赤子之心也许是种幸运吧 ​ 本文封面由 凯楠📸 友情提供 目录 本栏传送门 1. Spring Cache 介绍 2. Spring Cache 常用注解 注:手机端浏览本文章…

java入门 -输入和输出

输入输出 开发中大量会使用输入和输出,今天来总结一下Java语法阶段常使用的输入和输出。 输出 System.out 控制台输出信息。 不换行显示一行: System.out.print( ); System.out.print("hello "); System.out.print("java!");运行结…

如何强健“伙伴+华为”体系?华为用六大升级给出答案

聚拢企业内部资源,可以成事;而聚拢企业内外资源,则可成势。 华为如何在NA、商业和分销三大赛道聚拢伙伴之力成势?伙伴又如何与华为一起顺势而为,获得发展和收益?这是在一年一度的“华为中国合作伙伴大会”…

MyBatis3源码深度解析(十六)SqlSession的创建与执行(三)Mapper方法的调用过程

文章目录 前言5.9 Mapper方法的调用过程5.10 小结 前言 上一节【MyBatis3源码深度解析(十五)SqlSession的创建与执行(二)Mapper接口和XML配置文件的注册与获取】已经知道,调用SqlSession对象的getMapper(Class)方法,传入指定的Mapper接口对应的Class对象…

BUU [MRCTF2020]套娃

BUU [MRCTF2020]套娃 开题&#xff0c;啥也没有。 查看网页源代码发现后端源代码&#xff1a; <?php //1st $query $_SERVER[QUERY_STRING];if( substr_count($query, _) ! 0 || substr_count($query, %5f) ! 0 ){die(Y0u are So cutE!); }if($_GET[b_u_p_t] ! 23333 &am…

Vue核心知识点 -Vue2响应式系统是基于什么实现的、以及会产生什么问题和解决方案

一、概念 在Vue 2中&#xff0c;响应式系统是基于Object.defineProperty实现的。它通过劫持对象的属性来实现数据的响应式更新。 当你将一个对象传递给Vue实例的data选项时&#xff0c;Vue会遍历对象的每个属性&#xff0c;并使用Object.defineProperty方法将其转换为getter和s…

项目总结报告-word

2 项目工作成果 2.1 交付给用户的产品 2.2 交付给研发中心的产品 2.2.1 代码部分 2.2.2 文档部分 2.3 需求完成情况与功能及性能符合性统计 2.3.1 需求完成情况统计 2.3.2 功能符合性分析 2.3.3 性能符合性分析 3 项目工作分析 3.1 项目计划与进度实施分析 3.1.1 开发进度 3.1.…

2000-2021年各省研发强度数据(原始数据+计算结果)(无缺失)

2000-2021年各省研发强度数据&#xff08;原始数据计算结果&#xff09;&#xff08;无缺失&#xff09; 1、时间&#xff1a;2000-2021年 2、指标&#xff1a;RD经费内部支出&#xff08;万元&#xff09;、国内生产总值、研发强度 3、范围&#xff1a;31省 4、来源&#…

【源码阅读】EVMⅢ

参考[link](https://blog.csdn.net/weixin_43563956/article/details/127725385 大致流程如下&#xff1a; 编写合约 > 生成abi > 解析abi得出指令集 > 指令通过opcode来映射成操作码集 > 生成一个operation 以太坊虚拟机的工作流程&#xff1a; 由solidity语言编…

数据库系统概论-练手题集合【期末复习|考研复习】

前言 总结整理不易&#xff0c;希望大家点赞收藏。 给大家整理了一下数据库系统概论中的练手题&#xff0c;以供大家期末复习和考研复习的时候使用。 数据库系统概论系列文章传送门&#xff1a; 第一章 绪论 第二/三章 关系数据库和标准语言SQL 第四/五章 数据库安全性和完整性…

linux:线程互斥

个人主页 &#xff1a; 个人主页 个人专栏 &#xff1a; 《数据结构》 《C语言》《C》《Linux》 文章目录 前言一、线程互斥问题解释互斥量的接口 二、加锁的原理三、 死锁死锁四个必要条件避免死锁 总结 前言 本文是对于线程互斥的知识总结 一、线程互斥 问题 我们先看下面…

Division by Invariant Integers using Multiplication

在处理器中&#xff0c;整数除法的成本通常是整数乘法的几倍&#xff1a; 流水线式的组合乘法器通常在不到10个周期内完成操作&#xff1b;而对于整数除法则没有硬件支持&#xff0c;或者使用的迭代除法器比乘法器慢几倍。 表 1.1 比较了一些处理器上乘法和除法的时间。这张表…

c++多长时间会被Python或者其他语言取代?

c多长时间会被Python或者其他语言取代&#xff1f; 如果不考虑市场因素&#xff0c;C#今天就可以取代C。 自.NET跨平台至今&#xff0c;C能做的工作&#xff0c;C#都能做了&#xff0c;且性能差别不大。 在C最有优势的嵌入式UI方面&#xff0c;C#可以拿出Avalonia替代QT。用 …

存储器的层次结构和局部性原理

前言 大家好我是jiantaoyab&#xff0c;这是我所总结作为学习的笔记第19篇&#xff0c;在这里分享给大家&#xff0c;这篇文章讲存储器的一部分内容。 存储器的层次结构 SRAM 静态随机存取存储器的芯片&#xff0c;SRAM 之所以被称为“静态”存储器&#xff0c;是因为只要处…