当前位置: 首页 > article >正文

深度学习|表示学习|Instance Normalization 全面总结|26

如是我闻:

1. Instance Normalization(IN)

Instance Normalization(IN)最早由 Ulyanov et al.(2017) 提出,主要用于 风格迁移(Style Transfer) 任务。它的核心思想是 对每个样本的每个通道 ( C ) (C) (C) 单独计算均值和方差,然后进行归一化。

与 Batch Normalization(BN)不同,IN 不依赖 mini-batch 统计信息,所以更适用于小 batch size 甚至 batch size = 1 的情况。

数学公式

对于一个输入特征 x t i l m x_{tilm} xtilm,其中:

  • t t t 表示 batch 维度(样本索引)
  • i i i 表示通道索引(C)
  • l , m l, m l,m 分别表示特征图的空间坐标 H × W H × W H×W
均值计算

μ t i = 1 H W ∑ l = 1 W ∑ m = 1 H x t i l m \mu_{ti} = \frac{1}{HW} \sum_{l=1}^{W} \sum_{m=1}^{H} x_{tilm} μti=HW1l=1Wm=1Hxtilm

方差计算

σ t i 2 = 1 H W ∑ l = 1 W ∑ m = 1 H ( x t i l m − μ t i ) 2 \sigma^2_{ti} = \frac{1}{HW} \sum_{l=1}^{W} \sum_{m=1}^{H} (x_{tilm} - \mu_{ti})^2 σti2=HW1l=1Wm=1H(xtilmμti)2

归一化

y t i l m = x t i l m − μ t i σ t i 2 + ϵ y_{tilm} = \frac{x_{tilm} - \mu_{ti}}{\sqrt{\sigma^2_{ti} + \epsilon}} ytilm=σti2+ϵ xtilmμti

💡 计算范围:
Instance Normalization 只在 单个样本的单个通道 (H×W 维度) 内计算均值和方差,而不会跨通道或跨样本计算。


2. Layer Normalization(LN)

概念

Layer Normalization(LN)由 Ba et al.(2016) 提出,最初用于 RNN 和 Transformer 结构,后来也在 CNN 中被广泛使用。它的核心思想是 对整个样本的所有通道 (C×H×W) 计算均值和方差,然后进行归一化。

不同于 Batch Normalization(BN),LN 不依赖 batch 维度,适用于 NLP 和 Transformer 任务,特别是在 batch size 变化较大的情况下,仍能保持稳定的效果。

数学公式

对于一个输入特征 x i j k l x_{ijkl} xijkl,其中:

  • i i i 表示 batch 维度(样本索引)
  • j j j 表示通道索引( C C C
  • k , l k, l k,l 分别表示特征图的空间坐标( H × W H × W H×W
均值计算

μ l = 1 C H W ∑ j = 1 C ∑ k = 1 H ∑ l = 1 W x i j k l \mu^l = \frac{1}{CHW} \sum_{j=1}^{C} \sum_{k=1}^{H} \sum_{l=1}^{W} x_{ijkl} μl=CHW1j=1Ck=1Hl=1Wxijkl

方差计算

σ l 2 = 1 C H W ∑ j = 1 C ∑ k = 1 H ∑ l = 1 W ( x i j k l − μ l ) 2 \sigma^2_l = \frac{1}{CHW} \sum_{j=1}^{C} \sum_{k=1}^{H} \sum_{l=1}^{W} (x_{ijkl} - \mu^l)^2 σl2=CHW1j=1Ck=1Hl=1W(xijklμl)2

归一化

y i j k l = x i j k l − μ l σ l 2 + ϵ y_{ijkl} = \frac{x_{ijkl} - \mu^l}{\sqrt{\sigma^2_l + \epsilon}} yijkl=σl2+ϵ xijklμl

💡 计算范围:
Layer Normalization 在整个样本的所有通道 (C×H×W) 维度上计算均值和方差,不同通道之间的归一化统计量是共享的。


3. 计算示例

假设我们有一个输入 特征图大小为 2 × 2 2 \times 2 2×2,batch size 为 1,通道数 C = 2,即:
X = [ Channel 1 : [ 1 2 3 4 ] , Channel 2 : [ 5 6 7 8 ] ] X = \begin{bmatrix} \text{Channel 1}: & \begin{bmatrix} 1 & 2 \\ 3 & 4 \end{bmatrix}, \quad \text{Channel 2}: & \begin{bmatrix} 5 & 6 \\ 7 & 8 \end{bmatrix} \end{bmatrix} X=[Channel 1:[1324],Channel 2:[5768]]

Instance Normalization

IN 对 每个通道 ( C C C) 独立归一化,计算均值和方差:

  • Channel 1 均值:
    μ 1 = 1 + 2 + 3 + 4 4 = 2.5 \mu_1 = \frac{1+2+3+4}{4} = 2.5 μ1=41+2+3+4=2.5
    方差:
    σ 1 2 = ( 1 − 2.5 ) 2 + ( 2 − 2.5 ) 2 + ( 3 − 2.5 ) 2 + ( 4 − 2.5 ) 2 4 = 1.25 \sigma_1^2 = \frac{(1-2.5)^2 + (2-2.5)^2 + (3-2.5)^2 + (4-2.5)^2}{4} = 1.25 σ12=4(12.5)2+(22.5)2+(32.5)2+(42.5)2=1.25
    归一化:
    Y 1 = X 1 − 2.5 1.25 + ϵ Y_1 = \frac{X_1 - 2.5}{\sqrt{1.25 + \epsilon}} Y1=1.25+ϵ X12.5

  • Channel 2 均值:
    μ 2 = 5 + 6 + 7 + 8 4 = 6.5 \mu_2 = \frac{5+6+7+8}{4} = 6.5 μ2=45+6+7+8=6.5
    归一化后:
    Y 2 = X 2 − 6.5 1.25 + ϵ Y_2 = \frac{X_2 - 6.5}{\sqrt{1.25 + \epsilon}} Y2=1.25+ϵ X26.5


Layer Normalization

LN 对 整个样本的所有通道 (C×H×W) 归一化,计算:

  • 总均值:
    μ = 1 + 2 + 3 + 4 + 5 + 6 + 7 + 8 8 = 4.5 \mu = \frac{1+2+3+4+5+6+7+8}{8} = 4.5 μ=81+2+3+4+5+6+7+8=4.5
  • 总方差:
    σ 2 = ( 1 − 4.5 ) 2 + ⋯ + ( 8 − 4.5 ) 2 8 = 5.25 \sigma^2 = \frac{(1-4.5)^2 + \dots + (8-4.5)^2}{8} = 5.25 σ2=8(14.5)2++(84.5)2=5.25
  • 归一化:
    Y = X − 4.5 5.25 + ϵ Y = \frac{X - 4.5}{\sqrt{5.25 + \epsilon}} Y=5.25+ϵ X4.5

4. 主要区别

归一化方法计算均值/方差的范围归一化的单位适用场景
Instance Normalization (IN)每个通道 (H×W) 计算均值和方差每个通道独立归一化风格迁移、GAN、计算机视觉任务
Layer Normalization (LN)整个样本 (C×H×W) 计算均值和方差所有通道一起归一化NLP、Transformer、RNN/CNN 任务

5. 总结

  • IN 适用于图像任务(如风格迁移),可以帮助去除特定风格信息。
  • LN 适用于 NLP 和 CNN 任务,因为它不会受到 batch size 影响,在 Transformer 和 RNN 里表现更稳定。

希望这篇文章能帮助你理解 Instance Normalization 和 Layer Normalization 的核心概念及其不同应用!🎯


http://www.kler.cn/a/542414.html

相关文章:

  • 本地部署DeepSeek Nodejs版
  • bug-ant下拉框解决下拉框跟随表单容器(指定下拉框挂载容器):getPopupContainer=“p=>p.parentNode“
  • 1.【线性代数】——方程组的几何解释
  • Vue3(1)
  • [学习笔记] Kotlin Compose-Multiplatform
  • pytest测试专题 - 1.2 如何获得美观的测试报告
  • 互联网大厂面试高频题-操作系统部分
  • Node.js开发属于自己的npm包(发布到npm官网)
  • deepseek+kimi一键生成PPT
  • 爬取豆瓣电影 Top250 数据的脚本及调整方法
  • 怎么保证设计的API是安全的
  • 车载DoIP框架 --- 怎么样给 tester 定义特定 TCP 源端口
  • DeepSeek与ChatGPT正在改写学历规则?2025教育革命深度解析
  • 接口测试Day12-持续集成、git简介和安装、Gitee远程仓库、jenkins集成
  • react项目引入tailwindcss不生效解决方案
  • 2.11-背包问题
  • flink cdc2.2.1同步postgresql表
  • k8s中Network Policy的设计原理和实现方式?
  • 拾取丢弃物品(结构体/数组/子UI/事件分发器)
  • Python 面向对象(类,对象,方法,属性,魔术方法)
  • 提升LCP(Largest Contentful Paint)
  • LogicFlow自定义节点:矩形、HTML(vue3)
  • 【愚公系列】《循序渐进Vue.js 3.x前端开发实践》068-商业项目:电商后台管理系统实战(主页模块开发)
  • kafka的架构和工作原理
  • NO.14十六届蓝桥杯备战|switch语句|break|default|2道练习(C++)
  • Java的直接内存(Direct Memory)是什么意思?