Transformer——Q61 LayerNorm归一化公式 (x-μ)/σ ⊙ γ +β 的梯度推导

 该问题归类到Transformer架构问题集——残差与归一化——归一化技术。请参考

Q61 推导 LayerNorm 归一化公式 \frac{x - \mu}{\sigma} \bigodot \gamma + \beta 的梯度

1. 引言

在大型语言模型(LLM)的蓬勃发展中,各类数学工具与技术犹如璀璨星辰,照亮模型性能提升与优化的道路。LayerNorm 归一化作为其中的关键技术,凭借其在稳定模型训练、加速收敛等方面的卓越表现,备受瞩目。深入探究其梯度推导过程,不仅能让我们洞悉技术背后的数学奥秘,更有助于在 LLM 应用中精准驾驭这一技术。接下来,我们将从基础概念入手,逐步剖析 LayerNorm 归一化公式梯度的推导过程,分析其优缺点、优化策略,并结合实际应用案例给出代码示例,全面且深入地探索这一重要内容。

2. 基础概念回顾

<think>我们被要求解释批归一化(BatchNorm)和层归一化(LayerNorm)的区别。根据引用[1]和[2],我们可以知道BatchNorm和LayerNorm是两种不同的归一化方法。引用[3]和[4]提供了更多关于它们在训练和推理阶段的不同以及应用场景的信息。 主要区别可以从以下几个方面进行阐述: 1. 归一化的维度(即统计量的计算维度) 2. 适用场景(如BatchNorm适用于CNN,LayerNorm适用于RNN和Transformer) 3. 训练和推理时的行为差异 4. 对batch大小的依赖程度 我们按照这些方面来组织回答,并给出一个对比表格。 注意:在回答中,我们需要引用站内引用,但注意引用标识要放在相关内容的后面,并且引用标识要正确对应。 同时,根据系统指令,数学公式要使用正确的LaTeX格式,行内公式用$...$,独立公式用$$...$$。 最后,生成相关问题。</think>### 批归一化(BatchNorm)与层归一化(LayerNorm)的区别 批归一化(BatchNorm)和层归一化(LayerNorm)是深度学习中两种核心的归一化技术,主要区别体现在归一化维度和应用场景上: #### 1. **归一化维度不同**(核心区别) - **BatchNorm**: 沿**批量维度**归一化,对每个特征通道独立计算统计量 $$ \mu_c = \frac{1}{N}\sum_{i=1}^{N} x_{i,c} \quad \sigma_c^2 = \frac{1}{N}\sum_{i=1}^{N} (x_{i,c} - \mu_c)^2 $$ 其中$N$是批量大小,$c$是特征通道索引。对每个样本的每个特征进行归一化:[^1][^3] - **LayerNorm**: 沿**特征维度**归一化,对每个样本独立计算统计量 $$ \mu_n = \frac{1}{C}\sum_{c=1}^{C} x_{n,c} \quad \sigma_n^2 = \frac{1}{C}\sum_{c=1}^{C} (x_{n,c} - \mu_n)^2 $$ 其中$C$是特征维度大小,$n$是样本索引。对整个特征向量进行归一化[^1][^2] #### 2. **应用场景对比** | 特性 | BatchNorm | LayerNorm | |---------------------|------------------------------------|------------------------------------| | **最佳网络类型** | CNN(图像处理) | RNN/Transformer(序列数据) | | **batch大小依赖** | 敏感(小batch表现差) | 不敏感(适应动态batch) | | **训练/推理差异** | 需存储全局$\mu/\sigma$[^3] | 直接使用当前样本统计量 | | **特征独立性** | 保持通道间差异 | 消除特征间量纲差异 | | **典型应用** | ResNet, VGG等CNN | BERT, GPT等Transformer | #### 3. **计算图示对比 假设输入张量维度$[N, C, H, W]$: ``` BatchNorm计算过程: 对于每个通道c: 计算N个样本在c通道的均值μ_c 用μ_c归一化所有样本的c通道数据 LayerNorm计算过程: 对于每个样本n: 计算该样本所有C通道的均值μ_n 用μ_n归一化该样本的全部通道数据 ``` #### 4. **具体示例 考虑文本处理场景(batch_size=2, 特征维度=3): ```python import torch import torch.nn as nn # 输入数据:2个样本,每个样本3维特征 inputs = torch.tensor([[1.0, 2.0, 3.0], [4.0, 5.0, 6.0]]) # BatchNorm计算 (沿batch维度) # 通道0: μ=(1+4)/2=2.5, σ²=((1-2.5)²+(4-2.5)²)/2=2.25 # 归一化: (1-2.5)/√2.25≈-1.0, (4-2.5)/√2.25≈1.0 bn = nn.BatchNorm1d(3) print(bn(inputs)) # 输出: [[-1.2247, -1.2247, -1.2247], # [ 1.2247, 1.2247, 1.2247]] # LayerNorm计算 (沿特征维度) # 样本0: μ=(1+2+3)/3=2.0, σ²=((1-2)²+(2-2)²+(3-2)²)/3≈0.67 # 归一化: (1-2)/√0.67≈-1.22, (2-2)/√0.67=0, (3-2)/√0.67≈1.22 ln = nn.LayerNorm(3) print(ln(inputs)) # 输出: [[-1.2247, 0.0000, 1.2247], # [-1.2247, 0.0000, 1.2247]] ``` #### 5. **选择建议** - 选择 **BatchNorm** 当: - 处理图像数据(CNN架构) - Batch大小稳定且足够大(通常>16) - 需要通道级别特征增强[^4] - 选择 **LayerNorm** 当: - 处理序列数据(RNN/Transformer- Batch大小不稳定或很小 - 需要样本级别特征平衡(如NLP任务)[^2][^4] > BatchNorm通过通道级归一化增强特征区分度,LayerNorm通过样本级归一化提升特征一致性,两者共同解决了内部协变量偏移问题但适用场景不同[^1][^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

墨顿

唵嘛呢叭咪吽

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值