浅谈深度学习中的不同归一化层

news2024/11/25 9:06:49

引言

目前,深度学习已经彻底改变了自然语言处理、计算机视觉、机器人等许多子领域。深度学习当然涉及训练精心设计的深度神经网络,并且各种设计决策会影响这些深度网络的训练机制。其中一些设计决策包括

  • 网络中要使用的网络层类型,例如卷积层、线性层、循环层等,以及我们的网络应该有多少层?
  • 我们应该使用什么样的归一化层?
  • 正确的优化损失函数应该是什么?

这些设计决策主要取决于我们试图解决的基本任务,并且需要更深入地了解我们手头的不同选项。在这篇博文中,我将重点讨论第二点“深度学习中的不同归一化层”。概括地说,我将涵盖以下方法。

  • 批量归一化 (Batch Normalization)
  • 权重归一化 (Weight Normalization)
  • 层归一化 (Layer Normalization)
  • 组标准化 (Group Normalization)
  • 权重标准化 (Weight Standarization)

批量归一化 (BN)

批量归一化专注于标准化任何特定层的输入(即来自先前层的激活)。标准化输入意味着网络中任何层的输入应具有大约为零的均值和单位方差。从数学上来说,BN 层通过减去当前 mini-batch 中的输入均值并除以标准差来变换当前 mini-batch 中的每个输入。

但每一层不需要期望输入具有零均值和单位方差,相反,模型可能在使用其他均值和方差时表现更好。因此BN层还引入了两个可学习的参数 γ γ γ β β β

整个图层操作如下。它接受输入 x i x_i xi 并将其转换为 y i y_i yi,如下表所述。

在这里插入图片描述
问题是BN如何帮助NN训练?直观上,在梯度下降中,网络根据任意层的当前输入计算梯度,并在梯度指示的方向上减少权重。但由于各层是一个接一个地堆叠的,由于前一层的权重略有更新,任何特定层的输入数据分布变化太大,因此当前梯度可能会为网络产生次优信号。但 BN 将输入数据的分布限制在网络中的任何特定层(即前一层的激活),这有助于网络为权重更新产生更好的梯度。因此,BN 经常提供非常稳定和加速的培训制度。

然而,以下是批量归一化的一些缺点。

  • BN 在每次训练迭代中计算批量统计数据(小批量均值和方差),因此在训练时需要更大的批量大小,以便能够有效地逼近小批量的总体均值和方差。这使得 BN 更难训练网络用于对象检测、语义分割等应用,因为它们通常使用高输入分辨率(通常大至 1024x 2048),并且较大批量的训练在计算上不可行。
  • BN 不能很好地与 RNN 配合使用。问题是 RNN 与之前的时间戳有循环连接,并且需要为 BN 层中的每个时间步设置单独的 β 和 γ,这反而会增加额外的复杂性,并使 BN 与 RNN 一起使用变得更加困难。
  • 不同的训练和测试计算:在测试(或推理)期间,BN 层不会计算测试数据小批量的均值和方差(上面算法表中的步骤 1 和 2),而是使用根据训练数据计算出的固定均值和方差。这在使用 BN 时需要谨慎,并会带来额外的复杂性。在 pytorch 中,model.eval() 确保在评估模型中设置模型,因此 BN 层利用它来使用根据训练数据预先计算的固定均值和方差。

权重归一化 (WN)

由于Batch Normalization的缺点,T. Saliman和P. Kingma提出了Weight Normalization。他们的想法是将长度与权重向量的方向解耦,从而重新参数化网络以加速训练。

重新参数化对于权重归一化意味着什么?

权重归一化论文的作者建议使用两个参数 g(权重向量的长度)和 v(权重向量的方向)权重向量)代替 w 进行梯度下降,方法如下。
在这里插入图片描述
权重归一化与批量归一化类似,可以加快训练速度,并且与 BN 不同,它也适用于 RNN。但与批归一化相比,使用权重归一化训练深度网络的稳定性明显较差,因此在实践中并未广泛使用。

层归一化 (LN)

受批量归一化结果的启发,Geoffrey Hinton 等人。提出了层归一化,它沿着特征方向而不是小批量方向对激活进行归一化。这通过消除对批次的依赖克服了 BN 的缺点,并且也更容易应用于 RNN。

本质上,层归一化将激活的每个特征归一化为零均值和单位方差。

组归一化 (GN)

与层归一化类似,组归一化也是沿特征方向应用,但与 LN 不同的是,它将特征分为一定的组,并分别对每个组进行归一化。在实践中,组标准化比层标准化表现更好,其参数num_groups被调整为超参数。

如果您觉得 BN、LN、GN 令人困惑,下图非常准确地总结了它们。给定形状(N、C、H、W)的激活,BN 标准化 N 方向,LN 和 GN 标准化 C 方向,但 GN 另外将 C 通道分组并单独标准化各组。

在这里插入图片描述
接下来让我们了解什么是权重标准化。

权重标准化 (WS)

权重标准化正在将任何层的权重转换为具有零均值和单位方差。该层可以是卷积层、RNN 层或线性层等。对于任何具有形状(N,*)的给定层,其中 * 表示 1 个或多个维度,权重标准化,沿 * 维度变换权重。

下面是在 pytorch 中实现 2D 卷积层权重标准化的示例代码。

class Conv2d(nn.Conv2d):
  def __init__(self, in_channels, out_channels, kernel, **kwargs):
    super().__init__(in_channels, out_channels, kernel, **kwargs)
  
  def forward(self, x):        
    weight = self.weight
    weight_mean = weight.mean(dim=(1,2,3), keepdim=True)
    std = weight.std(dim=(1,2,3) + 1e-5
    weight = (weight - weight_mean)/ std
    return F.conv2d(x, weight, self.bias, self.stride, self.padding, self.dilation, self.groups)

基本思想是仅在前向传递期间变换权重并相应地计算激活。 Pytorch 将立即处理向后传递。类似地,它也可以应用于线性层。

最近,Siyun Qiao等人在他们的论文“Micro-Batch Training with Batch-Channel Normalization and Weight Standardization”中介绍了权重标准化,并发现当组归一化与权重标准化混合时,可以即使批量大小小至 1,其性能也优于或与 BN 相当。如下图所示,作者在 Imagenet 分类和 MS COCO 目标检测任务上训练了 GN、BN、GN+WS 与 Resnet50 和 Resnet101 的组合,发现:即使批量比 BN 使用的小得多,GN+WS 的性能始终优于 BN 版本。这在语义分割、实例分割等密集预测任务中引起了人们的关注,由于内存限制,这些任务通常无法使用较大的批量大小进行训练。

在这里插入图片描述
总之,模型中的归一化层通常有助于加速和稳定学习过程。如果大批量训练不是问题并且网络没有任何循环连接,则可以使用批量归一化。对于较小批量或复杂层(例如 LSTM、GRU)的训练,可以尝试使用权重标准化进行组标准化,而不是批量标准化。

需要注意的一件重要事情是,在实践中,归一化层用于 Linear/Conv/RNN 层和 ReLU 非线性(或双曲正切等)之间,以便当激活达到非线性激活函数时,激活同样以零为中心。这可能会避免由于错误的随机初始化而永远不会被激活的死亡神经元,因此可以改善训练。

以下是本文使用的参考文献列表:

  • Ioffe, Sergey, and Christian Szegedy. “Batch Normalization: Accelerating Deep Network Training by Reducing Internal Covariate Shift.” arXiv preprint arXiv:1502.03167 (2015).
  • Salimans, Tim, and Durk P. Kingma. “Weight normalization: A simple reparameterization to accelerate training of deep neural networks.” Advances in neural information processing systems 29 (2016): 901-909.
  • Ba, Jimmy Lei, Jamie Ryan Kiros, and Geoffrey E. Hinton. “Layer normalization.” arXiv preprint arXiv:1607.06450 (2016).
  • Qiao, Siyuan, et al. “Weight standardization.” arXiv preprint arXiv:1903.10520 (2019)

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

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

相关文章

【python】深拷贝和浅拷贝

能使用.copy()的对象: 需要是能改变元素的对象比如 list 和 set 就可以改变对象,可以使用copy函数但是类似于 一个整数 a10 或者 元组 就不能使用copy函数,因为他们是不可改变的对象 深拷贝和浅拷贝 浅拷贝就是这能复制第一层元素&#xff0…

12V转24V10A升压同步整流芯片:高效能解决方案

12V转24V10A升压同步整流芯片:高效能解决方案 随着现代电子设备的日益普及,对电源管理的要求也越来越高。其中,升压同步整流芯片在提高电源转换效率方面发挥着重要作用。本文将为您介绍一款12V转24V10A升压同步整流芯片,其优异的…

Kafka 基础快速入门

1、生产者 1、生产者发送消息流程 配置生产者参数属性和创建生产者对象 构建消息:ProducerRecord 发送消息:Send 关闭生产者 2、消费者 1、消费者接受消息流程 配置消费者参数属性和创建消费者对象 订阅主题 拉取消息并进行消费处理 提交消费偏移量,关闭消费者 2、消费者和…

前后端传参中遇见的问题

前后端传参经常容易出错,本文记录开发springBootMybatis-plusvuecli项目中出现的传参问题及解决办法 1.前后端没有跨域配置,报错 解决方法:后端进行跨域配置,拷贝CorsConfig类 package com.example.xxxx.config;import org.spr…

基于springboot实现的销售评价系统

一、系统架构 前端:html | js | css | jquery 后端:springboot | springdata-jpa | thymeleaf 环境:jdk1.7 | mysql | maven 二、代码及数据库 三、功能介绍 01. 登录页 02. 业务模块-评分结果 03. 业务模块-评分管理 04. 基础模块-…

SLAM学习笔记002

严格意义上讲,ROS只是一套通信框架而已ros的几个特性: 元操作系统分布式通信机制松耦合软件框架丰富的开源功能库等 ros实际上是运行在ubuntu上的亚操作系统,或者说软件框架。但提供硬件抽象、函数调用、进程管理这些类似操作系统的功能ros…

火狐浏览器无法打开有道云笔记网页解决

User-Agent Switcher and Manager 安装插件:User-Agent Switcher and Manager 可以直接在火狐插件管理中搜索,或者打开 https://addons.mozilla.org/zh-CN/firefox/addon/user-agent-string-switcher/?utm_sourceaddons.mozilla.org&utm_mediumre…

华为交换机,配置OSPF与BFD联动示例

OSPF简介 定义 开放式最短路径优先OSPF(Open Shortest Path First)是IETF组织开发的一个基于链路状态的内部网关协议(Interior Gateway Protocol)。 OSPF把自治系统AS(Autonomous System)划分成逻辑意义上…

vue3引入高德地图报错Uncaught Error: Invalid Object: LngLat(NaN, NaN

问题&#xff1a; 原因&#xff1a;容器高度未设置 解决&#xff1a; 地图容器添加高度。 <style scoped> #map {width: 100%;height: 800px; } </style>

Agilent安捷伦33220A函数信号发生器

是德科技33220A(安捷伦)函数发生器为函数和波形提供了不折不扣的性能。有11个标准波形加上脉冲和任意波形&#xff0c;它是同类产品中频率最稳定和失真最低的函数发生器之一。 前面板允许用一两个键访问所有主要功能。旋钮或数字键盘可用于调整频率、振幅、偏移和其他参数。内…

代码随想录第三十四天(一刷C语言)|不同路径不同路径II

创作目的&#xff1a;为了方便自己后续复习重点&#xff0c;以及养成写博客的习惯。 一、不同路径 思路&#xff1a;参考carl文档 机器人每次只能向下或者向右移动一步&#xff0c;机器人走过的路径可以抽象为一棵二叉树&#xff0c;叶子节点就是终点。 1、确定dp数组&#…

高可用接入层技术演化及集群概述

集群概述 集群的介绍及优势 集群&#xff1a;将多台服务器通过硬件或软件的方式组合起来&#xff0c;完成特定的任务&#xff0c;而这些服务器对外表现为一个整体。集群的优势 高可靠性&#xff1a;利用集群管理软件&#xff0c;当主服务器故障时&#xff0c;备份服务器能够自…

为什么MCU在ADC采样时IO口有毛刺?

大家在使用MCU内部ADC进行信号采样一个静态电压时&#xff0c;可能在IO口上看到这样的波形。这个时候大家一般会认识是信号源有问题&#xff0c;但仔细观察会发现这个毛刺的频率是和ADC触发频率一样的。 那么为什么MCU在ADC采样时IO口会出现毛刺呢&#xff1f;这个毛刺对结果有…

APT80DQ60BG-ASEMI大电流二极管APT80DQ60BG

编辑&#xff1a;ll APT80DQ60BG-ASEMI大电流二极管APT80DQ60BG 型号&#xff1a;APT80DQ60BG 品牌&#xff1a;ASEMI 封装&#xff1a;TO-247 特性&#xff1a;插件、快恢复二极管 最大平均正向电流&#xff1a;80A 最大重复峰值反向电压&#xff1a;600V 恢复时间&am…

使用VBA快速统计词组词频(多单词组合)(2/2)

实例需求&#xff1a;产品清单如A列所示&#xff0c;现在如下统计多单词组合词组词频。 在上一篇博客中《使用VBA快速统计词组词频(多单词组合)&#xff08;1/2&#xff09;》讲解了如何实现双词的词频统计。 本文将讲解如何实现3词的词频统计&#xff0c;掌握实现方法之后&a…

从人的安全价值观看企业的安全发展

文章目录 每日一句正能量前言感受之一&#xff0c;安全价值观是体现个人人生价值的最高境界&#xff0c;是人与企业和谐发展的基本保障&#xff0c;也是企业安全发展的理论导向。感受之二&#xff0c;安全价值观是企业承担社会责任的主要表现&#xff0c;是体现企业价值的根基&…

容器技术:从虚拟机到轻量级容器的革命

一、引言 首先&#xff0c;什么是容器&#xff1f; 容器是一种沙盒技术&#xff0c;主要目的是为了将应用运行在其中&#xff0c;与外界隔离&#xff1b;及方便这个沙盒可以被转移到其它宿主机器。本质上&#xff0c;它是一个特殊的进程。通过名称空间&#xff08;Namespace&a…

Axure RP - 交互设计的强大引擎

目录 前言 1. 交互设计&#xff1a;连接用户与产品的纽带 2. 情景设计&#xff1a;预测用户行为的未来 3. 演示和共享&#xff1a;让设计活起来 我的其他博客 前言 在数字化时代&#xff0c;用户体验的重要性日益突显&#xff0c;而交互设计成为塑造产品与用户互动的关键。…

php-使用wangeditor实现富文本-遇见问题

一、在 PowerShell 中使用 npm install 命令时&#xff0c;命令行解析器可能会将 符号解释为特殊字符&#xff0c;导致出现错误。 报错 解决 方法一&#xff1a;使用反引号&#xff08;&#xff09;将包名括起来&#xff0c;以避免特殊字符的解析。修改命令为&#xff1a; …

对管理的一些思考

记得21年的时候&#xff0c;学习过《初探技术管理》&#xff0c;现在看来仍然是很有价值。 怎么判断自己是否有基础走上管理岗&#xff0c;我觉得最最基础的一点&#xff0c;是判断自己是否成为团队的主程。主程一般意味着对目前的系统有广泛、深入的了解&#xff0c;能够担任中…