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

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

一、 层归一化

**层归一化(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,实现技术赋能实体资产。 “两链一桥“…

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

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

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的优化算法,有种方法叫“图优化”,以前学习算法的时候还有一个优化方法…

【建造&机械】木材运输车辆检测系统源码&数据集全套:改进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…

部署RocketMQ, 其实很简单 (带图, 附启动命令)

目录 一 下载 RocketMQ 二 上传解压 2.1 文件上传 2.2 文件解压 三 配置RocketMQ 3.1 修改runserver.sh 3.2 修改runbroker.sh 3.3 配置环境变量 四 启动RocketMQ 4.1 启动namesrv服务 4.2 启动broker 服务 五 关闭RocketMQ 一 下载 RocketMQ 官网下载…

双十一有哪些值得入手的好物?盘点五款优惠又好用的好物推荐!

一眨眼,2024年双十一已经到来。自古以来,双十一不仅是购物狂欢的节日,更是消费者们尽情享受优惠和好物的绝佳时机。在这个热潮中,很多人都会提前准备好购物清单,寻觅心仪的商品。为了帮助大家在这个购物节中不空手而归…

【AIGC】ChatGPT提示词Prompt精确控制指南:Scott Guthrie的建议详解与普通用户实践解析

博客主页: [小ᶻZ࿆] 本文专栏: AIGC | ChatGPT 文章目录 💯前言💯斯科特古斯里(Scott Guthrie)的建议解读人机交互设计的重要性减轻用户认知负担提高Prompt的易用性结论 💯普通用户视角的分析普通用户…

MySQL(2)【库的操作】

阅读导航 引言一、创建数据库1. 基本语法2. 创建数据库案例📌创建名为db1的数据库📌创建一个使用utf8字符集的db2数据库📌创建一个使用utf8字符集,并带校对规则的db3数据库 二、字符集和校验规则1. 查看系统默认字符集以及校验规则…

铜业机器人剥片 - SNK施努卡

SNK施努卡有色行业电解车间铜业机器人剥片 铜业机器人剥片技术是针对传统人工剥片效率低下、工作环境恶劣及生产质量不稳定的痛点而发展起来的自动化解决方案。 面临人工剥片的诸多挑战,包括低效率、工作环境差、人员流动大以及产品质量控制不精确等问题。 人工剥片…

电机学习-空间矢量合成

一、标量转换理论 设三相标量为 x a , x b , x c x_a,x_b,x_c xa​,xb​,xc​,且满足 x a x b x c 0 x_ax_bx_c 0 xa​xb​xc​0,则有变换: X o u t x a a x b a 2 x c , 其中 a e j 2 3 π , a 2 e − j 2 3 π X_{out}x_aax_ba^2…

深度学习调参大法

目录 trick 1:深度学习调参核心点trick 2:关于 深度学习Model选型问题trick 3:关于数据trick 4:关于调参 4.1 关于 Loss function 调参策略4.2 关于 Learning rate 和 batch size 调参策略4.3 关于 Epoch number 和 early stoppi…

华为ensp静态路由,浮动路由,缺省路由讲解及配置

🏡作者主页:点击! 🤖网络通信基础TCP/IP专栏:点击! ENSP专栏:点击! ⏰️创作时间:2024年10月24日0点15分 祝大家程序员节快乐~ 路由的选择与管理至关重要。静态路由…

医院信息化与智能化系统(10)

医院信息化与智能化系统(10) 这里只描述对应过程,和可能遇到的问题及解决办法以及对应的参考链接,并不会直接每一步详细配置 如果你想通过文字描述或代码画流程图,可以试试PlantUML,告诉GPT你的文件结构,让他给你对应…

使用 Python 的 BeautifulSoup(bs4)解析复杂 HTML

使用 Python 的 BeautifulSoup(bs4)解析复杂 HTML:详解与示例 在 Web 开发和数据分析中,解析 HTML 是一个常见的任务,尤其是当你需要从网页中提取数据时。Python 提供了多个库来处理 HTML,其中最受欢迎的就…