09aaa-LayerNorm是什么?

09aaa-LayerNorm是什么?📊

本文档详细解释层归一化(Layer Normalization, LayerNorm)的核心概念,涵盖数学定义、计算步骤、与 BatchNorm 的核心区别,以及 Transformer 选择 LayerNorm 的原因,最后提供 PyTorch 代码示例 🛠️

1. 什么是 LayerNorm?🤔

本章解释 LayerNorm 的基本概念和核心思想

Layer Normalization(层归一化) 是一种对神经网络的每一层输出进行归一化的技术,由 Jimmy Lei Ba、Jamie Ryan Kiros 和 Geoffrey E. Hinton 于 2016 年提出。

它的核心思想非常简单:对单个样本的所有特征维度计算均值和方差,进行 Z-score 标准化,再通过可学习的缩放参数 <math xmlns="http://www.w3.org/1998/Math/MathML"> γ \gamma </math>γ 和偏移参数 <math xmlns="http://www.w3.org/1998/Math/MathML"> β \beta </math>β 恢复表达能力。

直观理解:假设一个 token 的特征向量为 <math xmlns="http://www.w3.org/1998/Math/MathML"> x = [ x 1 , x 2 , ... , x d ] \mathbf{x} = [x_1, x_2, \ldots, x_d] </math>x=[x1,x2,...,xd],LayerNorm 先把这个向量变成均值为 0、方差为 1 的标准形式,然后让网络自己学习怎么缩放( <math xmlns="http://www.w3.org/1998/Math/MathML"> γ \gamma </math>γ)和平移( <math xmlns="http://www.w3.org/1998/Math/MathML"> β \beta </math>β)到最佳位置。

2. 核心公式 📝

本章给出 LayerNorm 的完整数学表达式并拆解每一步

LayerNorm 的计算分为三步:

第1步:计算均值
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> μ = 1 d ∑ i = 1 d x i \mu = \frac{1}{d} \sum_{i=1}^{d} x_i </math>μ=d1i=1∑dxi

第2步:计算方差
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> σ 2 = 1 d ∑ i = 1 d ( x i − μ ) 2 \sigma^2 = \frac{1}{d} \sum_{i=1}^{d} (x_i - \mu)^2 </math>σ2=d1i=1∑d(xi−μ)2

第3步:归一化 + 仿射变换
<math xmlns="http://www.w3.org/1998/Math/MathML" display="block"> LayerNorm ( x ) = γ ⊙ x − μ σ 2 + ϵ + β \text{LayerNorm}(\mathbf{x}) = \gamma \odot \frac{\mathbf{x} - \mu}{\sqrt{\sigma^2 + \epsilon}} + \beta </math>LayerNorm(x)=γ⊙σ2+ϵ x−μ+β

其中:

  • <math xmlns="http://www.w3.org/1998/Math/MathML"> d d </math>d 是特征维度的大小
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> μ \mu </math>μ 是该样本所有特征的均值, <math xmlns="http://www.w3.org/1998/Math/MathML"> σ 2 \sigma^2 </math>σ2 是方差
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> ϵ \epsilon </math>ϵ 是很小的常数(如 <math xmlns="http://www.w3.org/1998/Math/MathML"> 1 0 − 5 10^{-5} </math>10−5),防止除以零
  • <math xmlns="http://www.w3.org/1998/Math/MathML"> γ \gamma </math>γ(缩放)和 <math xmlns="http://www.w3.org/1998/Math/MathML"> β \beta </math>β(偏移)是可学习参数,形状与特征维度相同

3. 计算示例 🔍

本章通过一个具体数值演示 LayerNorm 的计算过程

假设输入向量 <math xmlns="http://www.w3.org/1998/Math/MathML"> x = [ 2.0 , 4.0 , 6.0 ] \mathbf{x} = [2.0, 4.0, 6.0] </math>x=[2.0,4.0,6.0], <math xmlns="http://www.w3.org/1998/Math/MathML"> ϵ = 1 0 − 5 \epsilon = 10^{-5} </math>ϵ=10−5:

  • 均值 : <math xmlns="http://www.w3.org/1998/Math/MathML"> μ = 2.0 + 4.0 + 6.0 3 = 4.0 \mu = \frac{2.0 + 4.0 + 6.0}{3} = 4.0 </math>μ=32.0+4.0+6.0=4.0
  • 方差 : <math xmlns="http://www.w3.org/1998/Math/MathML"> σ 2 = ( 2.0 − 4.0 ) 2 + ( 4.0 − 4.0 ) 2 + ( 6.0 − 4.0 ) 2 3 ≈ 2.667 \sigma^2 = \frac{(2.0-4.0)^2 + (4.0-4.0)^2 + (6.0-4.0)^2}{3} \approx 2.667 </math>σ2=3(2.0−4.0)2+(4.0−4.0)2+(6.0−4.0)2≈2.667
  • 归一化 : <math xmlns="http://www.w3.org/1998/Math/MathML"> x ^ = [ 2.0 , 4.0 , 6.0 ] − 4.0 2.667 + 1 0 − 5 ≈ [ − 1.225 , 0 , 1.225 ] \hat{\mathbf{x}} = \frac{[2.0, 4.0, 6.0] - 4.0}{\sqrt{2.667 + 10^{-5}}} \approx [-1.225, 0, 1.225] </math>x^=2.667+10−5 [2.0,4.0,6.0]−4.0≈[−1.225,0,1.225]
  • 仿射变换 : <math xmlns="http://www.w3.org/1998/Math/MathML"> y = γ ⊙ [ − 1.225 , 0 , 1.225 ] + β \mathbf{y} = \gamma \odot [-1.225, 0, 1.225] + \beta </math>y=γ⊙[−1.225,0,1.225]+β

如果 <math xmlns="http://www.w3.org/1998/Math/MathML"> γ = [ 1 , 1 , 1 ] \gamma = [1,1,1] </math>γ=[1,1,1], <math xmlns="http://www.w3.org/1998/Math/MathML"> β = [ 0 , 0 , 0 ] \beta = [0,0,0] </math>β=[0,0,0],则输出为 <math xmlns="http://www.w3.org/1998/Math/MathML"> [ − 1.225 , 0 , 1.225 ] [-1.225, 0, 1.225] </math>[−1.225,0,1.225]------均值为 0,方差为 1。网络通过训练 <math xmlns="http://www.w3.org/1998/Math/MathML"> γ \gamma </math>γ 和 <math xmlns="http://www.w3.org/1998/Math/MathML"> β \beta </math>β 来适应不同数据的需要。

4. LayerNorm vs BatchNorm ⚔️

本章对比 LayerNorm 和 BatchNorm 的核心区别

两者的本质区别在于归一化的维度不同

特性 BatchNorm LayerNorm
归一化维度 沿 batch 维度 沿 特征维度
统计量依赖 依赖 batch 中其他样本 仅依赖当前样本
受 batch size 影响 是(batch 小时效果差)
训练/推理行为 不同(需 running stats) 一致
适用领域 CV(图像分类等) NLP(Transformer、RNN 等)

为什么 Transformer 选择 LayerNorm?

在 NLP 任务中,语义特征是由上下文决定的------同一个词在不同句子中含义不同。LayerNorm 只在单个样本内部归一化,保留了句内各 token 特征之间的相对关系,不破坏语义结构。而 BatchNorm 沿 batch 方向归一化,会混合不同句子的特征,破坏了句内语义。

此外,NLP 中句子长度不一致、batch size 通常较小,LayerNorm 不受这些因素影响。

5. PyTorch 代码示例 💻

本章通过一个简单的代码示例展示 LayerNorm 的使用

python 复制代码
import torch                                              # 导入 PyTorch 核心库,提供张量运算
import torch.nn as nn                                     # 导入神经网络模块,包含 LayerNorm 层

# 使用 PyTorch 原生 LayerNorm
d_model = 512                                             # 特征维度大小,示例:Transformer 中 d_model=512
layernorm = nn.LayerNorm(normalized_shape=d_model)        # 创建 LayerNorm 层,示例:对 512 维特征归一化

# 模拟输入:batch_size=2, seq_len=10, d_model=512
x = torch.randn(2, 10, d_model)                           # 随机生成输入张量,形状 [2,10,512]
output = layernorm(x)                                     # 前向传播,数据流动:[2,10,512] → [2,10,512]

# 验证归一化效果:取第一个 batch 第一个 token 的特征向量
print(f"均值: {output[0,0].mean():.4f}")                  # 应接近 0.0000
print(f"方差: {output[0,0].var():.4f}")                   # 应接近 1.0000

在 Transformer 的编码器结构CSDN)中,LayerNorm 出现在每个子层之后的 Add & Norm 操作中,负责稳定训练过程。


最后更新时间:2026-05-25

相关推荐
这是谁的博客?5 小时前
AI Agent 安全架构设计:漏洞分析与防护策略深度解析
人工智能·安全·网络安全·ai·agent·安全架构·架构设计
人月神话-Lee5 小时前
【图像处理】Sobel 边缘检测——让机器“看见“轮廓
图像处理·人工智能·计算机视觉·ios·ai编程·swift
冬奇Lab5 小时前
Agent系列(四):工具调用深度解析——Agent 的手和眼
人工智能·llm
Black蜡笔小新5 小时前
自动化AI算法训练服务器DLTM助力医学影像分析进入AI智能分析新时代
人工智能·算法·自动化
冬奇Lab6 小时前
一天一个开源项目(第111篇):Understand Anything - 把代码库变成可探索知识图谱的 AI 引擎
人工智能·开源·llm
猿饵块6 小时前
git--github
人工智能
黎阳之光6 小时前
黎阳之光:以视频孪生重构智慧防火,打造“天空地人智”一体化森林防火新范式
大数据·运维·人工智能·物联网·安全
why技术6 小时前
AI Coding开始进入第四个时代,我还没上车呢!
前端·人工智能·后端
java1234_小锋6 小时前
Spring AI 2.0 开发Java Agent智能体 - MCP(模型上下文协议)
java·人工智能·spring·spring ai