【归一化技术】层归一化和批归一化

归一化技术在深度学习中被广泛应用,以加速训练过程、稳定模型收敛,并减少梯度消失或爆炸问题。

一、 层归一化

**层归一化(Layer Normalization)**是一种归一化技术,广泛用于深度学习模型,尤其是在 Transformer 等自然语言处理和序列建模任务中,以加速训练、稳定模型收敛,并减少梯度消失或爆炸的问题。

层归一化是在每个样本的特征维度上计算均值和方差。在处理变长序列时效果更好,并且适合小批次甚至批次大小为 1 的情况。

假设输入张量的形状为 [batch_size, sequence_length, feature_dim],层归一化会在每个特征维度 feature_dim 上进行归一化操作。

1. 计算公式

给定输入张量 x,对于第 i 个特征的每个样本,层归一化的计算公式为:

在这里插入图片描述

其中:

  • μ 和 𝜎2 分别是 x 在特征维度上的均值和方差。
  • γ 和 𝛽 是可学习的缩放和平移参数。
  • ϵ 是一个小常数,用于防止除零错误。

2. 示例

在 PyTorch 中,可以通过 nn.LayerNorm 来使用层归一化。初始化时需要指定特征维度大小,表示在该维度上进行归一化。

import torch
import torch.nn as nn# 假设特征维度大小为 64
feature_dim = 64
layer_norm = nn.LayerNorm(feature_dim)# 输入张量 (batch_size, sequence_length, feature_dim)
x = torch.randn(32, 10, feature_dim)# 应用层归一化
output = layer_norm(x)
print(output.shape)  # 输出: torch.Size([32, 10, 64])

在此示例中,LayerNorm 对每个样本的最后一个维度(即特征维度 feature_dim)进行归一化。

3. 优势

  • 适用于变长序列:在 NLP 和序列建模任务中非常适用,因为它不依赖于批次大小。
  • 稳定模型训练:在 Transformer 等深度网络中,层归一化帮助缓解梯度消失或梯度爆炸问题,加快模型收敛速度。

二、批归一化

批归一化(Batch Normalization)是一种深度学习中的归一化技术,用于加速模型训练、稳定模型收敛,并减轻梯度消失或梯度爆炸问题。它通过在每个批次的样本上计算均值和方差,然后对每层的激活值进行归一化,确保每层输出的激活值在训练过程中保持相对稳定的分布。

1. 计算步骤

假设我们在训练神经网络,某一层的输出张量(激活值)是 x,其形状为 [batch_size, num_features]。批归一化的计算步骤如下:

  1. 计算均值和方差

    • 对当前批次的所有样本在特征维度上计算均值 μ 和方差 σ2。

    在这里插入图片描述

    在这里插入图片描述

    其中,m 是批次大小(batch_size),xi 是每个样本的激活值。

  2. 归一化

    • 使用均值和方差对每个激活值进行归一化,确保每层的激活值具有标准正态分布。

    在这里插入图片描述

    其中,𝜖 是一个小常数,用于防止除零错误。

  3. 缩放和平移

    • 引入可学习的缩放参数 γ 和偏移参数 𝛽,用于恢复模型的表达能力,使网络在归一化的基础上仍能灵活调整数据分布。

    在这里插入图片描述

    其中,γ 和 𝛽 是通过训练学习到的参数,用于控制归一化后的尺度和平移。

2. 示例

在 PyTorch 中,可以使用 nn.BatchNorm1d, nn.BatchNorm2d, 或 nn.BatchNorm3d 来实现批归一化。下面是一个简单的示例:

import torch
import torch.nn as nn# 定义批归一化层
batch_norm = nn.BatchNorm1d(num_features=4)# 输入张量 (batch_size, num_features)
x = torch.randn(8, 4)  # 批次大小为8,特征维度为4# 应用批归一化
output = batch_norm(x)
print(output)

3. 局限性

  • 对小批次的效果较差:当批次大小很小时,批次均值和方差的估计会不稳定,可能影响模型表现。
  • 对变长序列不适用:批归一化依赖批次的统计量,无法在序列建模或自然语言处理中的变长序列上直接使用,这时通常使用层归一化(Layer Normalization)。

三、归一化如何减少梯度消失或爆炸问题

1. 梯度消失和梯度爆炸的原因

在深层神经网络中,梯度消失和梯度爆炸问题会因为层数增加而被放大,主要原因包括:

  • 梯度消失:反向传播过程中,梯度逐层相乘,如果激活值的梯度接近 0,会导致后面的梯度趋向 0,模型难以更新参数。
  • 梯度爆炸:同样的,在反向传播中,如果激活值梯度过大,会导致梯度在逐层相乘时逐渐放大,参数更新变得不稳定。

这两种问题使得深层网络在训练过程中收敛缓慢,甚至无法收敛。

2. 归一化如何缓解这些问题

归一化通过对每一层的激活值进行归一化,使每层输出的激活值都具有相似的分布,这样可以有效缓解梯度消失和爆炸的问题。具体来说,归一化在每一层的激活上计算均值和方差,将激活值标准化。通过这种标准化操作:

  • 保持激活值分布稳定:归一化确保每层的激活值具有相似的分布,减少了由于初始值或数据分布不当导致的梯度不稳定。
  • 保持梯度在合理范围内:梯度在每一层的激活上进行归一化时,反向传播过程中也会保持较为稳定的范围,防止梯度消失或爆炸。

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

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

相关文章

RWA“两链一桥”平台在香港金融科技周亮相

第九届香港金融科技周今日开幕,记者在主题为Trust Bridge的论坛上获悉,蚂蚁数科旗下蚂蚁链在此次金融科技周首次公开了其为RWA业务打造的“两链一桥”平台,旨在帮助更多内地新能源资产赴港RWA,实现技术赋能实体资产。 “两链一桥“…

二叉树前序遍历的 Java 实现,包括递归和非递归两种方式

二叉树前序遍历是一种遍历树节点的方式,遵循特定的顺序。其基本过程可以总结为以下几个步骤: 前序遍历的顺序 访问根节点:首先处理当前节点。 递归遍历左子树:然后依次访问左子树。 递归遍历右子树:最后访问右子树。 …

简记Vue3(二)—— computed、watch、watchEffect

个人简介 👀个人主页: 前端杂货铺 🙋‍♂️学习方向: 主攻前端方向,正逐渐往全干发展 📃个人状态: 研发工程师,现效力于中国工业软件事业 🚀人生格言: 积跬步…

C++的汉诺塔

汉诺塔(Tower of Hanoi)是一个经典的递归问题。问题的描述如下: 有三根杆(通常称为 A、B、C),以及一系列大小不同、穿在一根杆上的圆盘。这些圆盘可以滑动到任何一根杆上,但是每次只能移动一个圆盘,且不能将较大的圆盘放在较小的圆盘上。目标是将所有圆盘从杆 A 移动到…

Android Gradle

#1024程序员节|征文# Gradle 是一款强大的自动化构建工具,广泛应用于 Android 应用开发。它通过灵活的配置和丰富的插件系统,为项目构建提供了极大的便利。本文只是简单的介绍 Gradle 在 Android 开发中的使用,包括其核心概念、构…

Go 语言基础教程:7.Switch 语句

在这篇教程中,我们将学习 Go 语言中的 switch 语句,它是条件分支的重要结构。我们将通过一个示例程序逐步解析 switch 的不同用法。 package mainimport ("fmt""time" )func main() {i : 2fmt.Print("Write ", i, " …

拖拽盖章处理

进行元素拖拽:同类章替换、删除已盖章 1.复制对应元素,在onmousemove中left和top一直在变化 2.onmouseup时,计算出在pdf显示区域内的left,top,removeChild删除原先复制的元素,再appendChild到pdf显示区域的…

高翔【自动驾驶与机器人中的SLAM技术】学习笔记(十二)拓展图优化库g2o(一)框架

【转载】理解图优化,一步步带你看懂g2o框架 文章来源:理解图优化,一步步带你看懂g2o框架 小白:师兄师兄,最近我在看SLAM的优化算法,有种方法叫“图优化”,以前学习算法的时候还有一个优化方法…

机器翻译技术:AI 如何跨越语言障碍

大家好,我是Shelly,一个专注于输出AI工具和科技前沿内容的AI应用教练,体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具,拥抱AI时代的到来。 AI工具集1:大厂AI工具【共23款…

装饰器模式的适用场景示例

1. 动态扩展和撤销类的功能 假设我们有一个 ApiRequest 类,用于发送 HTTP 请求。在某些场景下,我们希望对传输的数据进行加密以提高安全性,但在其他场景下不需要加密。通过装饰器模式,可以轻松地在需要时动态扩展这个功能&#x…

【建造&机械】木材运输车辆检测系统源码&数据集全套:改进yolo11-GhostHGNetV2

改进yolo11-SPPF-LSKA等200全套创新点大全:木材运输车辆检测系统源码&数据集全套 1.图片效果展示 项目来源 人工智能促进会 2024.10.28 注意:由于项目一直在更新迭代,上面“1.图片效果展示”和“2.视频效果展示”展示的系统图片…

C++与现代开发实践第三节:多线程与并发编程

第四章:C与现代开发实践 第三节:多线程与并发编程 在这一课中,我们将详细探讨多线程与并发编程的各个方面,特别是从线程的创建、管理到高级的优化技术,并且通过复杂的实战案例来展示如何应对并发问题。最后&#xff…

python实现放烟花效果庆祝元旦

马上就要2025年元旦啦,提前祝大家新年快乐 完整代码下载地址:https://download.csdn.net/download/ture_mydream/89926458

Prompt提示词设计:如何让你的AI对话更智能?

Prompt设计:如何让你的AI对话更智能? 在人工智能的世界里,Prompt(提示词)就像是一把钥匙,能够解锁AI的潜力,让它更好地理解和响应你的需求。今天,我们就来聊聊如何通过精心设计的Pr…

使用 Spring Doc 为 Spring REST API 生成 OpenAPI 3.0 文档

Spring Boot 3 整合 springdoc-openapi 概述 springdoc-openapi 是一个用于自动生成 OpenAPI 3.0 文档的库,它支持与 Spring Boot 无缝集成。通过这个库,你可以轻松地生成和展示 RESTful API 的文档,并且可以使用 Swagger UI 或 ReDoc 进行…

数据仓库建设 : 主题域简介

在数据仓库建设中,主题域(Subject Area)是根据业务需求和数据特点划分的数据区域,每个主题域代表一个特定的业务领域或功能模块。 主题域是数据模型的一个重要概念,它帮助构建逻辑清晰、层次分明的数据结构。主题域的设…

在数据库访问中,使用localhost、127.0.0.1和IP地址有什么差异

在数据库访问中,使用127.0.0.1和IP地址(在本地环境中通常指的是局域网IP或环回地址)的速度差异,实际上是非常微小的,甚至在很多情况下可以忽略不计。不过,为了更深入地理解这个问题,我们可以从以…

用python将pdf转成图片转换成对应的word文件

*科管系统**报告只能上传word,但是有些盖章文件只有pdf版本,因此有这个需求,目前市面上没这软件,只能自己python写一个。 要将PDF中的页面以图片的形式存储到Word文档中,你需要完成以下几个步骤: 从PDF中…

Java虚拟机的历程(jvm01)

Java虚拟机的历程(jvm01) Java虚拟机(JVM)作为Java语言的核心技术之一,自诞生以来经历了多次迭代与演变。不同的虚拟机在性能、功能以及适用场景上各有侧重。本文将介绍Java虚拟机发展历程中的一些重要虚拟机&#xf…

【设计模式】Liskov替换原则

文章目录 LSP原则的定义关键点示例遵循LSP原则的示例示例2结论 Liskov替换原则(Liskov Substitution Principle,简称LSP)是面向对象设计中的五大基本原则之一,由Barbara Liskov在1987年提出。LSP原则的核心思想是: 子…