【动手学深度学习】7.5 批量规范化(个人向笔记)

  • 训练深层神经网络是十分困难的,特别是在较短的时间内使它们收敛更加棘手。而本节的批量规范化(batch normalization) 可以持续加速深层网络的收敛速度
  • 结合下节会介绍道德残差块,批量规范化使得研究人员能够训练100层以上的网络

1. 训练深层网络

  • 为什么要批量规范化层呢?下面回顾一下训练神经网络时出现的实际挑战
  • 首先,数据的预处理方式通常会对最终结果产生巨大影响。在前面我们预测房价实战中,我们第一步是标准化输入特征,使其均值为 0,方差为 1。这种标准化可以很好地配合我们的优化器,因为它可以将参数的量级进行同一
  • 对于 MLP 或 CNN。当我们训练时,中间层的变量可能有更广的变化范围:无论是沿着从输入到输出的层,跨同一层中的单元,或是随着时间的推移,模型参数随着训练更新变幻莫测
  • 批量规范化的发明者非正式地假设,这些变量分布中的这种偏移可能会阻碍网络收敛。如果一个层的可变值是另一个层的100倍,这可能需要学习率进行补偿
  • 更深层的网络很复杂,容易过拟合,这意味着正则化变得更加重要
  • 批量规范化可以应用于单个可选层,也可以应用到所有层。原理如下:在每次训练迭代中,我们首先规范化输入,即通过减去均值并除以标准差,其中两者均基于当前小批量处理。接下来我们应用比例系数和比例偏移。由于是基于批量统计的标准化,所以i叫批量规范化
  • 如果我们尝试使用大小为1的小批量应用批量规范化,我们将无法学到任何东西。这是因为在减去均值之后,每个隐藏单元将为0。 所以,只有使用足够大的小批量,批量规范化这种方法才是有效且稳定的。 请注意,在应用批量规范化时,批量大小的选择可能比没有批量规范化时更重要。
    在这里插入图片描述
  • 在训练过程中,中间层的变化幅度不能过于剧烈,而批量规范化将每一层主动居中,并将它们重新调整为给定的平均值和大小
    在这里插入图片描述
  • 由于某些尚未被明确的原因,优化中各种噪声源通常会导致更快的训练和较少的过拟合,这种变化似乎是正则化的一种形式
  • 另外,批量规范化层在”训练模式“(通过小批量统计数据规范化)和“预测模式”(通过数据集统计规范化)中的功能不同。 在训练过程中,我们无法得知使用整个数据集来估计平均值和方差,所以只能根据每个小批次的平均值和方差不断训练模型。 而在预测模式下,可以根据整个数据集精确计算批量规范化所需的平均值和方差。
  • 下面来看是如何在实践中工作的

2. 批量规范化层

  • 回想一下,批量规范化和其他层之间的一个关键区别是批量规范化在完整的小批量上运行,因此我们不能像以前在引入其他层时那样忽略批量大小。
  • 我们在下面讨论这两种情况:全连接层和卷积层,他们的批量规范化实现略有不同。

2.1 全连接层

在这里插入图片描述

2.2 卷积层

  • 对于卷积层,可以在卷积层之后和非线性激活函数之前进行批量规范化,每个通道都有自己的拉伸和偏移参数,两个参数都是标量
  • 假设我们的小批量包含 m 个样本,并且对于每个通道,卷积的输出具有高度 p和宽度 q。 那么对于卷积层,我们在每个输出通道的 mpq 个元素上同时执行每个批量规范化。 因此,在计算平均值和方差时,我们会收集所有空间位置的值,然后在给定通道内应用相同的均值和方差,以便在每个空间位置对值进行规范化。

2.3 预测过程中的批量规范化

  • 批量规范化在训练模式和预测模式下的行为通常不同
  • 将训练好的模型用于预测时,我们不再需要样本均值中的噪声以及在微批次上估计每个小批次产生的样本方差了
  • 我们可能需要使用我们的模型对逐个样本进行预测。 一种常用的方法是通过移动平均估算整个训练数据集的样本均值和方差,并在预测时使用它们得到确定的输出
  • 和暂退法一样,批量规范化层在训练模式和预测模式下的计算结果也是不一样的

3. 从零开始实现

  • 下面是实现代码
    在这里插入图片描述
    在这里插入图片描述

在这里插入图片描述

  • 我们现在可以创建一个正确的BatchNorm层。 这个层将保持适当的参数:拉伸gamma和偏移beta,这两个参数将在训练过程中更新
  • 我们的层将保存均值和方差的移动平均值,以便在模型预测期间随后使用
    在这里插入图片描述

4. 使用批量规范化层的LeNet

  • 为了更好地理解BatchNorm,下面我们将其应用于LeNet模型。批量规范化是在卷积层或全连接层之后、相应的激活函数之前应用的。
    在这里插入图片描述
  • 我们再在Fashion-MNIST数据集上训练网络,但不同的是学习率大得多,下面的补充内容会提到为什么可以上更大的学习率
    在这里插入图片描述

5. 简明实现

  • 我们可以直接使用深度学习框架中定义的BatchNorm。 代码看起来几乎与我们上面的代码相同。
    在这里插入图片描述

6. 补充

  • 下面是我在b站上看的一个视频的笔记,看了之后感觉清晰了很多:https://www.bilibili.com/video/BV12d4y1f74C/?spm_id_from=333.880.my_history.page.click&vd_source=bab99a4bc7d540abf82733d55fa02cca
  • 在网络学习的过程中,全一层的输出就是后一层的输入,因此由于参数的更新,每层的输入分布都在发生变化,这会导致网络很难收敛
    在这里插入图片描述
  • 而为了能够收敛,那么就需要:① 学习率不能太高。 ② 参数初始化准确。 ③ 网络层数不能太多。
  • 而神经网络的研究人员发现,这个现象是由于每层分布的差异过大,且无法预测而导致的。那么如果让每一个batch在每一层中都服从类似的分布,就可以解决这一的问题了
    在这里插入图片描述
  • 加上伽马和贝塔是因为我们不想每层输入的分布都相同
    在这里插入图片描述
  • 在加上了Batch Normalization,那么我们就可以:① 使用较大的学习率。 ② 参数初始化不敏感。 ③ 加快网络训练。
  • 在测试推理阶段,我们仍然可以使用训练得到的伽马和贝塔两个参数。但是训练集和测试集的样本分布不完全一致,并且我们可能只使用一个样本进行测试,无法计算均值和标准差。因此我们需要保存并使用训练过程中的结果来辅助运算
  • 假设我们有30个样本,每五个样本构成一个batch进行训练,完整遍历一次训练集就需要六个batch,那么对于第一层神经网络来说我们会得到六个均值的历史数值,那么接下来通过指数加权,获得这六个均值的平均值,下面的m可以看作是对历史的保留,非常类似于随机梯度下降中动量的概念,在torch框架中也直接将这个变量命名为 momentum,默认值为0.1
    在这里插入图片描述
  • Batch Normalization可以加速神经网络收敛。但是①仅在样本数量较多时有效。② 对RNN或序列数据性能较差。 ③ 分布式运算时影响效率

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

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

相关文章

el-input设置placeholder字体大小

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 一、el-input设置placeholder字体大小? 一、el-input设置placeholder字体大小? .el-input__inner::placeholder {font-size: 12px;}

nbsaas vue3管理后台框架

nbsaas vue3管理后台框架 一、项目概述 Nbsaas Admin Vue 是一个基于 Vue.js 3.0 构建的轻量级后台管理系统,结合了现代前端技术栈的最佳实践,旨在帮助开发者快速构建具有高可扩展性和良好用户体验的后台管理系统。该项目拥有简洁的 UI 设计&#xff0…

Hikyuu教程 | 滚动回测与滚动寻优系统

前面介绍了如何使用 hikyuu 进行策略回测参数优化,同时也提到了这种简单的参数优化本质其实是对历史数据的过拟合,通常并不具备直接使用的意义。那么有什么办法来减缓这种过拟合影响,让参数优化发挥实际的作用呢?答案是——使用滚…

使用shell脚本自动重启服务

服务器后台运行的一些服务,有的时候由于高压操作导致服务崩溃时,总是得远程登录服务器,然后重启服务。 可以写shell脚本自动检测服务是否在运行,如果崩溃了就重启。 使用nohup在后台启动服务: nohup 服务启动命令所…

ifconfig 和 ip addr

1. 工具所属套件 ifconfig:属于较老的 net-tools 套件。曾是 Unix 和 Linux 系统上广泛使用的工具。ip addr:属于较新的 iproute2 套件。它取代了 ifconfig,并逐渐成为现代 Linux 系统上更常用的工具。 2. 功能覆盖范围 ifconfig&#xff…

Java之数组详解

一、数组的概念 数组(Array)是多个相同类型数据按一定顺序排列的集合,并使用一个名字命名,通过编号(索引)的方式对这些数据进行统一管理。数组是程序设计中的一种基本数据结构,用于存储相同类型…

源码编译方式安装htppd软件

一.源码编译安装httpd软件 1.安装阿帕奇的依赖,安装apr软件,阿帕奇正常运行的环境这个环境就是apr。 2.安装apr-util软件,主要提供针对apr环境的管理工具, 3.安装阿帕奇软件即httpd软件。 如上图所示,就是三个软件的…

E38.【C语言】练习:数据结构时间复杂度的计算

目录 1.二分法的时间复杂度 解: 2.求阶乘的时间复杂度 解: 3.递归实现斐波那契数,求时间复杂度 解: 4.时间复杂度的排名 备注:有关时间复杂度的讲解参见80.【C语言】数据结构之时间复杂度 1.二分法的时间复杂度 (代码来自E7.【C语言】练习:在一个有序数组中…

RK3568笔记六十六:Live555推流

若该文为原创文章,转载请注明原文出处。 前面移植了live555,记录使用rk3568推流 一、流程 推流过程是在前面RTMP工程上修改的。RTMP推流是采集摄像头数据,AI推理,编码成H264通过FFMEPG推流,现在把FFMPEG改成使用Live555. 步骤: 1、使用opencv采集摄像头数据 2、初始化…

CentOS 7 yum失效的解决办法

文章目录 一、CentOS 7停止维护导致yum失效的解决办法解决方案 提示:以下是本篇文章正文内容,下面案例可供参考 一、CentOS 7停止维护导致yum失效的解决办法 020 年,CentOS 项目与红帽联合宣布将全部投资转向 CentOS Stream,这是…

SpringBoot项目热部署-devtools

DevTools 会使用两个类加载器&#xff08;一个用于加载不变的类&#xff0c;一个用于加载可能会变化的类&#xff09;&#xff0c;每次重启只重新加载管理变化的类的加载器&#xff0c;因此会快很多 1.导入依赖 <dependency> <groupId>org.springframework.boot&l…

第28周:Transformer 实现文本分类 - Embedding版

目录 前言 一、前期准备 1.1 环境安装 1.2 加载数据 二、数据预处理 2.1 构建词典 2.2 进行one-hot编码 2.3 自定义数据集类 2.4 定义填充函数 2.5 构建数据集 三、模型构建 3.1 定义位置编码器 3.2 定义Transformer模型 3.3 定义训练函数 3.4 定义测试函数 四、…

RabbitMQ高级特性详解

前言 RabbitMQ是一款广泛使用的开源消息队列软件&#xff0c;它基于AMQP&#xff08;Advanced Message Queuing Protocol&#xff09;标准实现。本文将带你深入了解RabbitMQ的一些高级特性&#xff0c;包括消息确认、死信队列、延迟队列、事务处理以及消息分发策略等&#xff…

HCIE-Datacom题库_01_防火墙【18道题】

一、单选题 1.相比较于路由器、交接机&#xff0c;防火墙转发独有的模块为? 交换网板 MPU LPU SPU 解析&#xff1a; SFU&#xff08;Switch Fabric Unit&#xff09;&#xff1a;交换网板&#xff0c;负责整个系统的数据平面数据平面提供高速无阻塞数据通道&#xff0…

关于SOCKS协议的常见误区有哪些?

代理协议在设备与代理服务器之间的数据交换中起到了关键作用。在这方面&#xff0c;SOCKS代理协议是常见的选择之一&#xff0c;被广泛应用于下载、传输和上传网络数据的场景。然而&#xff0c;关于SOCKS代理协议存在一些常见的误解&#xff0c;让我们来逐一了解。 一、使用SO…

爬虫逆向-js进阶(续写,搭建网站)

1.搭建简单网站1 from flask import Flask,render_template import requests import json app Flask(name)# **location**的温度是**temp**度&#xff0c;天气状况&#xff1a;**desc**app.route(/) # 绑定处理函数 def index_url():location 101010100data get_weather(lo…

Whisper 音视频转写

Whisper 音视频转写 API 接口文档 api.py import os import shutil import socket import torch import whisper from moviepy.editor import VideoFileClip import opencc from fastapi import FastAPI, File, UploadFile, Form, HTTPException, Request from fastapi.respons…

Android中的内存泄漏及其检测方式

Android中的内存泄漏及其检测方式 一、Android内存泄漏概述 在Android开发中&#xff0c;内存泄漏是一个常见且严重的问题。内存泄漏指的是在应用程序中&#xff0c;由于某些原因&#xff0c;已经不再使用的对象仍然被引用&#xff0c;导致垃圾回收器&#xff08;Garbage Col…

图书管理新纪元:Spring Boot进销存系统

1系统概述 1.1 研究背景 随着计算机技术的发展以及计算机网络的逐渐普及&#xff0c;互联网成为人们查找信息的重要场所&#xff0c;二十一世纪是信息的时代&#xff0c;所以信息的管理显得特别重要。因此&#xff0c;使用计算机来管理图书进销存管理系统的相关信息成为必然。开…

使用 Elasticsearch Dump 工具进行生产环境到测试环境的数据迁移与备份

es-dump 是 Elasticsearch 的一个实用工具&#xff0c;专门用于从 Elasticsearch 集群中导出或导入数据&#xff0c;支持数据、映射、别名、模板等多种类型的数据操作。它在数据迁移、备份、恢复等场景中非常实用。本文将展示如何使用 es-dump 工具执行生产到测试环境的索引复制…