更改

添加3,735字节 、 2026年7月22日 (星期三)
1. 调整目录结构 2. NIS相关表述修正 3. 重写了算法框架章节、重绘了多尺度架构图 4. 插入 `仿射耦合.png`;移除与 `Realnvp flow anim.gif` 内容重复的 `Coupling anim.gif` 5. 降低 gif 分辨率 6. 调整语言
第1行: 第1行:  
'''RealNVP'''('''Real-valued Non-Volume Preserving''',实值非体积保持变换)是一类基于标准化流(normalizing flows)的深度生成模型,由 Laurent Dinh、Jascha Sohl-Dickstein 与 Samy Bengio 于 2017 年提出<ref name="Dinh2017">{{cite journal|author1=Dinh L.|author2=Sohl-Dickstein J.|author3=Bengio S.|title=Density Estimation Using Real NVP|journal=International Conference on Learning Representations (ICLR)|year=2017|url=https://arxiv.org/abs/1605.08803}}</ref>。它的核心思想可以概括为:'''用一个完全可逆的神经网络,将复杂的数据分布逐步变换为简单的高斯分布。由于变换可逆,模型既可正向精确计算数据的概率密度,也可反向直接从高斯分布采样生成新数据。'''
 
'''RealNVP'''('''Real-valued Non-Volume Preserving''',实值非体积保持变换)是一类基于标准化流(normalizing flows)的深度生成模型,由 Laurent Dinh、Jascha Sohl-Dickstein 与 Samy Bengio 于 2017 年提出<ref name="Dinh2017">{{cite journal|author1=Dinh L.|author2=Sohl-Dickstein J.|author3=Bengio S.|title=Density Estimation Using Real NVP|journal=International Conference on Learning Representations (ICLR)|year=2017|url=https://arxiv.org/abs/1605.08803}}</ref>。它的核心思想可以概括为:'''用一个完全可逆的神经网络,将复杂的数据分布逐步变换为简单的高斯分布。由于变换可逆,模型既可正向精确计算数据的概率密度,也可反向直接从高斯分布采样生成新数据。'''
 
[[文件:Realnvp flow anim.gif|缩略图|332x332像素|上图示意 RealNVP 的正向与反向流程:正向通过复合可逆变换将数据分布映射为标准高斯分布;反向则从高斯分布采样并逐层逆变换还原为数据。]]
 
[[文件:Realnvp flow anim.gif|缩略图|332x332像素|上图示意 RealNVP 的正向与反向流程:正向通过复合可逆变换将数据分布映射为标准高斯分布;反向则从高斯分布采样并逐层逆变换还原为数据。]]
−
更形式化地说,RealNVP 将一系列可逆映射 <math>f_1, \dots, f_n</math> 复合为整体变换 <math>f = f_n \circ \cdots \circ f_1</math>,将服从复杂分布的 <math>\mathbf{x}</math> 映射到标准正态分布 <math>\mathbf{z} = f(\mathbf{x}) \sim \mathcal{N}(0, \mathbf{I})</math>。由于可逆性,生成样本时只需从正态分布采样 <math>\mathbf{z}</math>,再通过逆映射 <math>\mathbf{x} = f^{-1}(\mathbf{z})</math> 还原为数据。而 RealNVP 的关键设计在于:'''每一层变换的雅可比行列式都能高效解析计算''',因此整体对数似然 <math>\log p_X(\mathbf{x})</math> 可直接求出,无需借助变分下界或对抗训练。
+
= 原理概述 =
   −
在因果涌现的研究框架中,RealNVP 起到重要作用。在 [[NIS]](神经信息挤压器)和 [[NIS+]] 中,它被选作可逆编码器(INN)的实现载体,负责将微观状态无损地映射到潜在空间,再从中粗粒化出宏观状态。理解 RealNVP 的机制,是理解 NIS 系列工作如何实现信息不丢、参数复用、维度可控的技术前提。
+
RealNVP 是一类标准化流:它将一系列可逆映射 <math>f_1, \dots, f_n</math> 复合为整体变换 <math>f = f_n \circ \cdots \circ f_1</math>,从而将数据 <math>\mathbf{x}</math> 映射到标准正态分布 <math>\mathbf{z} = f(\mathbf{x}) \sim \mathcal{N}(0, \mathbf{I})</math>。由于可逆性,生成样本时只需从正态分布采样 <math>\mathbf{z}</math>,再通过逆映射 <math>\mathbf{x} = f^{-1}(\mathbf{z})</math> 还原为数据。每一层变换的雅可比行列式都能高效解析计算,因此整体对数似然 <math>\log p_X(\mathbf{x})</math> 可直接求出,无需借助变分下界或对抗训练。
 +
 
 +
在因果涌现的研究中,RealNVP 常被用作可逆编码器(INN)的实现载体。以 NIS 和 NIS+ 为例,编码器被分解为两步:先用 RealNVP 的耦合层将微观状态 <math>\mathbf{x}_t</math> 无损地映射到等维潜在空间 <math>\mathbf{x}'_t</math>(信息转换),再通过投影算子 <math>\chi_{p,q}</math> 丢弃 <math>p-q</math> 个维度,得到宏观状态 <math>\mathbf{y}_t</math>(信息丢弃)。因此,RealNVP 的可逆性、参数共享和解析雅可比行列式,是 NIS 系列实现“可控维度、双向编码—解码”的技术基础;需要强调的是,宏观粗粒化本身是有损的,真正无损的仅是 INN 内部的信息转换阶段。更详细的 NIS/NIS+ 应用见后文。
    
= 历史渊源 =
 
= 历史渊源 =
第11行: 第13行:  
第一条主线是可逆变换的"分层堆叠"思想。从 1990 年代的独立成分分析(ICA),到 2000 年 Chen 与 Gopinath 的'''高斯化'''(Gaussianization)<ref name="Chen2000">{{cite conference|author1=Chen S. S.|author2=Gopinath R. A.|title=Gaussianization|conference=Advances in Neural Information Processing Systems (NIPS)|year=2000}}</ref>,研究者一直尝试用可逆变换将复杂数据"归一化"到简单分布。2010 年,Tabak 与 Vanden-Eijnden 正式提出了"标准化流"(normalizing flow)的数学框架——通过一系列可逆映射,让基分布像水流一样"流动"成目标分布<ref name="Tabak2010">{{cite journal|author1=Tabak E. G.|author2=Vanden-Eijnden E.|title=Density Estimation by Dual Ascent of the Log-Likelihood|journal=Communications in Mathematical Sciences|year=2010|volume=8|issue=1|pages=217-233}}</ref>。
 
第一条主线是可逆变换的"分层堆叠"思想。从 1990 年代的独立成分分析(ICA),到 2000 年 Chen 与 Gopinath 的'''高斯化'''(Gaussianization)<ref name="Chen2000">{{cite conference|author1=Chen S. S.|author2=Gopinath R. A.|title=Gaussianization|conference=Advances in Neural Information Processing Systems (NIPS)|year=2000}}</ref>,研究者一直尝试用可逆变换将复杂数据"归一化"到简单分布。2010 年,Tabak 与 Vanden-Eijnden 正式提出了"标准化流"(normalizing flow)的数学框架——通过一系列可逆映射,让基分布像水流一样"流动"成目标分布<ref name="Tabak2010">{{cite journal|author1=Tabak E. G.|author2=Vanden-Eijnden E.|title=Density Estimation by Dual Ascent of the Log-Likelihood|journal=Communications in Mathematical Sciences|year=2010|volume=8|issue=1|pages=217-233}}</ref>。
   −
第二条主线是耦合层的发明与升级。2014 年,Dinh 等人提出了 '''NICE'''(Non-linear Independent Components Estimation),首次使深度可逆网络可训练<ref name="NICE2014">{{cite journal|author1=Dinh L.|author2=Krueger D.|author3=Bengio Y.|title=NICE: Non-linear Independent Components Estimation|journal=ICLR 2015 Workshop|year=2014|url=https://arxiv.org/abs/1410.8516}}</ref>。NICE 的核心 trick 是'''加性耦合层''':将输入分成两半,其中一半直接保持不变,另一半则加上一个以第一半为条件的神经网络输出。由于该变换的雅可比行列式恒为 1,它'''保持体积'''(volume preserving),但表达能力因此受限。
+
第二条主线是耦合层的发明与升级。2014 年,Dinh 等人提出了 '''NICE'''(Non-linear Independent Components Estimation),首次使深度可逆网络可训练<ref name="NICE2014">{{cite journal|author1=Dinh L.|author2=Krueger D.|author3=Bengio Y.|title=NICE: Non-linear Independent Components Estimation|journal=ICLR 2015 Workshop|year=2014|url=https://arxiv.org/abs/1410.8516}}</ref>。NICE 的关键创新是'''加性耦合层''':将输入分成两半,其中一半直接保持不变,另一半则加上一个以第一半为条件的神经网络输出。由于该变换的雅可比行列式恒为 1,它'''保持体积'''(volume preserving),但表达能力因此受限。
    
2017 年的 RealNVP 将加性耦合扩展为仿射耦合,即以前一半变量为条件,对后一半变量先进行缩放再进行平移。这一改动使变换不再保持体积(non-volume preserving),增强了模型的表达能力,同时保留了计算上的便利性。后续的理论工作(Draxler et al., 2024)证明:体积保持的流'''不是'''分布的普适逼近器,而仿射耦合流在良好条件下是<ref name="Draxler2024">{{cite journal|author1=Draxler F.|author2=Wahl S.|author3=Schnörr C.|author4=Köthe U.|title=On the Universality of Volume-Preserving and Coupling-Based Normalizing Flows|journal=Proceedings of the 41st International Conference on Machine Learning (ICML)|year=2024|publisher=PMLR 235}}</ref>。这从理论上解释了 RealNVP 相对于 NICE 的优势。
 
2017 年的 RealNVP 将加性耦合扩展为仿射耦合,即以前一半变量为条件,对后一半变量先进行缩放再进行平移。这一改动使变换不再保持体积(non-volume preserving),增强了模型的表达能力,同时保留了计算上的便利性。后续的理论工作(Draxler et al., 2024)证明:体积保持的流'''不是'''分布的普适逼近器,而仿射耦合流在良好条件下是<ref name="Draxler2024">{{cite journal|author1=Draxler F.|author2=Wahl S.|author3=Schnörr C.|author4=Köthe U.|title=On the Universality of Volume-Preserving and Coupling-Based Normalizing Flows|journal=Proceedings of the 41st International Conference on Machine Learning (ICML)|year=2024|publisher=PMLR 235}}</ref>。这从理论上解释了 RealNVP 相对于 NICE 的优势。
第19行: 第21行:  
= 算法框架 =
 
= 算法框架 =
   −
RealNVP 的完整架构由四种模块递归堆叠而成:'''仿射耦合层'''、'''掩码卷积分区'''、'''多尺度压缩与分解''',以及'''耦合层批量归一化'''。正向传播(编码)流程为:
+
RealNVP 把若干可逆模块按顺序堆叠,形成从数据空间到潜在空间的完整映射。其网络主体由四个功能模块组成:'''仿射耦合层'''(coupling)负责可逆的特征变换,每个耦合层输出后接'''批量归一化'''(batch normalization)以稳定训练;'''压缩'''(squeeze)负责降低空间分辨率并把信息重排到通道;'''变量分解'''(factor out)负责在每个尺度末尾抽取一部分变量作为潜在编码。其中,仿射耦合层通过 空间棋盘(checkerboard)与通道级(channel-wise)两种掩码实现,二者交替使用。
 +
 
 +
[[文件:Realnvp multiscale.svg|缩略图|center|RealNVP 多尺度分层架构示意图。]]
 +
 
 +
如上图所示,输入图像 <math>\mathbf{x}</math> 首先进入 Scale 1。每个非末尺度内部依次经过 3 个 checkerboard 掩码的耦合层(每个耦合层输出后接批量归一化)、Squeeze 压缩块、再 3 个 channel-wise 掩码的耦合层(同样每个后接批量归一化),最后通过 Factor Out 把当前特征一分为二;末尺度则只经过 4 个 checkerboard 耦合层(同样每个后接批量归一化)就进行 Factor Out。一半结果作为 <math>\mathbf{z}^{(i)}</math> 抽出,另一半 <math>\mathbf{h}^{(i)}</math> 继续传入下一尺度。不同尺度之间通过折线连接,最终把每个 <math>\mathbf{z}^{(i)}</math> 展平为向量后按顺序拼接成完整潜变量 <math>\mathbf{z}</math>。虽然各 <math>\mathbf{z}^{(i)}</math> 的展平长度不同(依次为 <math>HWC/2, HWC/4, \dots, HWC/2^{L-1}</math>),但它们的总和恰好等于输入维度 <math>HWC</math>,因此整体变换保持维度不变。这种分层设计的意图是:早期尺度保留高分辨率的局部细节,后期尺度处理低分辨率的全局结构,并通过逐步分解减少后续层的计算量。
 +
 
 +
正向流程可概括为:
    
<math>
 
<math>
第25行: 第33行:  
</math>
 
</math>
   −
[[文件:Realnvp multiscale.svg]]
+
由于每个压缩和分解步骤都要对空间或通道维度进行对半划分,各尺度的空间尺寸与通道数都必须是偶数;实际应用中通常把图像尺寸调整为偶数,或通过填充、裁剪等预处理满足该条件。
−
 
  −
如上图所示,RealNVP 的多尺度编码从原始图像 <math>\mathbf{x}</math> 开始,逐尺度交替使用 checkerboard 与 channel-wise 掩码的仿射耦合层,并通过 Squeeze 减半空间分辨率;每个尺度末端的 Factor Out 将一半变量作为 <math>\mathbf{z}^{(i)}</math> 抽出,另一半继续进入下一尺度。最终所有 <math>\mathbf{z}^{(i)}</math> 拼接为完整潜变量 <math>\mathbf{z}</math>。
      
== 仿射耦合层:可逆的"条件变形" ==
 
== 仿射耦合层:可逆的"条件变形" ==
   −
仿射耦合层是 RealNVP 的基本单元。给定 <math>D</math> 维输入 <math>\mathbf{x}</math>,输入被分为两部分:前 <math>d</math> 维"被动"(不变),后 <math>D-d</math> 维"主动"(被变形):
+
图中的 '''Coupling''' 块即仿射耦合层,它是 RealNVP 的基本可逆变换单元。
    
{{NumBlk|:|
 
{{NumBlk|:|
第41行: 第47行:  
</math>
 
</math>
 
|{{EquationRef|1}}}}
 
|{{EquationRef|1}}}}
−
[[文件:Coupling anim.gif|缩略图|332x332像素|仿射耦合层的前向与逆向过程示意]]
   
这里 <math>\mathbf{s}</math>(scale,缩放)和 <math>\mathbf{t}</math>(translation,平移)是两个深度神经网络(通常是 CNN)。<math>\odot</math> 为逐元素乘积。由于 <math>\mathbf{s}</math> 和 <math>\mathbf{t}</math> 的输入只来自不变的那一半,输出只作用在可变的那一半,整个变换的雅可比矩阵是下三角块结构,行列式即为对角线元素的乘积——计算复杂度从 <math>O(D^3)</math> 降到 <math>O(D)</math>。此外,逆变换为:
 
这里 <math>\mathbf{s}</math>(scale,缩放)和 <math>\mathbf{t}</math>(translation,平移)是两个深度神经网络(通常是 CNN)。<math>\odot</math> 为逐元素乘积。由于 <math>\mathbf{s}</math> 和 <math>\mathbf{t}</math> 的输入只来自不变的那一半,输出只作用在可变的那一半,整个变换的雅可比矩阵是下三角块结构,行列式即为对角线元素的乘积——计算复杂度从 <math>O(D^3)</math> 降到 <math>O(D)</math>。此外,逆变换为:
   第52行: 第57行:  
</math>
 
</math>
 
|{{EquationRef|2}}}}
 
|{{EquationRef|2}}}}
 +
 +
[[文件:仿射耦合.png|缩略图|center|仿射耦合层示意图:正向(从左到右)将输入分块并变换,反向(从右到左)逐块还原。]]
    
无需对 <math>\mathbf{s}</math> 或 <math>\mathbf{t}</math> 求逆,只需按逆变换公式进行减法和除法即可。因此'''编码(求密度)和解码(采样)同样高效'''。
 
无需对 <math>\mathbf{s}</math> 或 <math>\mathbf{t}</math> 求逆,只需按逆变换公式进行减法和除法即可。因此'''编码(求密度)和解码(采样)同样高效'''。
第59行: 第66行:  
== 掩码卷积的两种分区模式 ==
 
== 掩码卷积的两种分区模式 ==
   −
上述将输入分成两部分的操作可以按不同方式实现。针对图像数据,RealNVP 设计了两种掩码:
+
仿射耦合层要先把输入分成两部分。针对图像数据,RealNVP 使用两种掩码来决定划分方式:
    
* '''空间棋盘模式'''(checkerboard masking):像国际象棋棋盘一样,按坐标 <math>(i+j)</math> 的奇偶性决定像素是否属于"被动"集合。相邻像素被分到不同集合,能充分利用局部相关性。
 
* '''空间棋盘模式'''(checkerboard masking):像国际象棋棋盘一样,按坐标 <math>(i+j)</math> 的奇偶性决定像素是否属于"被动"集合。相邻像素被分到不同集合,能充分利用局部相关性。
第70行: 第77行:  
== 多尺度架构:分层打包潜在变量 ==
 
== 多尺度架构:分层打包潜在变量 ==
   −
直接对高维图像(如 <math>64\times64\times3</math>)进行全维度耦合计算代价较高。RealNVP 采用 VGG 网络"降采样同时加深通道"的策略,引入两个关键操作:
+
多尺度架构依赖两个关键操作:压缩(Squeeze)与变量分解(Factor Out)。
    
'''压缩'''(squeezing):将空间上每个 <math>2\times2</math> 的小块在通道方向上重排,将 <math>s\times s\times c</math> 重排为 <math>s/2 \times s/2 \times 4c</math>。空间分辨率减半,通道数四倍——信息被重新排列,但没有丢失。
 
'''压缩'''(squeezing):将空间上每个 <math>2\times2</math> 的小块在通道方向上重排,将 <math>s\times s\times c</math> 重排为 <math>s/2 \times s/2 \times 4c</math>。空间分辨率减半,通道数四倍——信息被重新排列,但没有丢失。
   −
'''变量分解'''(factoring out):在每个尺度结束时,将当前表示的一半维度提取为潜在变量 <math>\mathbf{z}^{(i)}</math>,剩下的一半 <math>\mathbf{h}^{(i)}</math> 继续进入下一尺度。最终所有 <math>\mathbf{z}^{(i)}</math> 拼接成完整的潜在编码 <math>\mathbf{z}</math>。
+
'''变量分解'''(factoring out):在每个尺度结束时,将当前表示的一半维度提取为潜在变量 <math>\mathbf{z}^{(i)}</math>,剩下的一半 <math>\mathbf{h}^{(i)}</math> 继续进入下一尺度。最终所有 <math>\mathbf{z}^{(i)}</math> 展平后拼接成完整的潜在编码 <math>\mathbf{z}</math>,其总维度与输入维度相等。
    
该设计具有以下优势:
 
该设计具有以下优势:
 
# '''层次化表示''':早期提取的 <math>\mathbf{z}</math> 对应局部纹理(如边缘、颜色),后期提取的对应全局语义(如物体姿态、场景结构)。
 
# '''层次化表示''':早期提取的 <math>\mathbf{z}</math> 对应局部纹理(如边缘、颜色),后期提取的对应全局语义(如物体姿态、场景结构)。
 
# '''梯度分散''':损失信号能直接传递到所有尺度,避免梯度在深层消失。
 
# '''梯度分散''':损失信号能直接传递到所有尺度,避免梯度在深层消失。
−
# '''计算减负''':越早提取的维度越多,后续层需要处理的特征图越小。
+
# '''降低计算负担''':越早提取的维度越多,后续层需要处理的特征图越小。
    
<!-- 图4:多尺度架构流程图 -->
 
<!-- 图4:多尺度架构流程图 -->
第85行: 第92行:  
== 批量归一化:训练深层的稳定器 ==
 
== 批量归一化:训练深层的稳定器 ==
   −
在耦合层之间插入批量归一化(BatchNorm),对每个维度做线性缩放:
+
批量归一化(BatchNorm)应用于每个耦合层的输出之后,用于稳定深层训练。
    
<math>
 
<math>
第119行: 第126行:  
</math>
 
</math>
   −
采样时通过逆向进行:<math>\mathbf{z} \sim p_Z</math>,<math>\mathbf{x} = g(\mathbf{z}) = f_1^{-1} \circ \cdots \circ f_K^{-1}(\mathbf{z})</math>,所有步骤均可并行。
+
采样时通过逆向进行:<math>\mathbf{z} \sim p_Z</math>,<math>\mathbf{x} = g(\mathbf{z}) = f_1^{-1} \circ \cdots \circ f_K^{-1}(\mathbf{z})</math>,每层内部运算可并行,因此整体采样速度高于自回归模型。
    
== 仿射耦合的雅可比行列式与可逆性 ==
 
== 仿射耦合的雅可比行列式与可逆性 ==
第179行: 第186行:     
损失函数包含两项:
 
损失函数包含两项:
−
* '''先验项''' <math>\log p_Z(f(\mathbf{x}))</math>:促使编码后的 <math>\mathbf{z}</math> 聚集在 Gaussian 中心附近,相当于对潜在空间的正则化。
+
* '''先验项''' <math>\log p_Z(f(\mathbf{x}))</math>:促使编码后的 <math>\mathbf{z}</math> 聚集在标准正态分布中心附近,相当于对潜在空间的正则化。
 
* '''行列式项''':促使模型在数据密集的区域扩张体积、在稀疏区域收缩体积——这与信息论中将码空间分配给高概率事件的原则一致。
 
* '''行列式项''':促使模型在数据密集的区域扩张体积、在稀疏区域收缩体积——这与信息论中将码空间分配给高概率事件的原则一致。
   第242行: 第249行:  
<!-- 图7:标准化流发展谱系简图 -->
 
<!-- 图7:标准化流发展谱系简图 -->
   −
= 应用/实例 =
+
= 应用 =
    
== 自然图像密度估计与生成 ==
 
== 自然图像密度估计与生成 ==
第307行: 第314行:  
= 参考文献 =
 
= 参考文献 =
   −
<references />
+
# Dinh L., Sohl-Dickstein J., Bengio S. Density Estimation Using Real NVP. International Conference on Learning Representations (ICLR), 2017. https://arxiv.org/abs/1605.08803
 +
# Chen S. S., Gopinath R. A. Gaussianization. Advances in Neural Information Processing Systems (NIPS), 2000.
 +
# Tabak E. G., Vanden-Eijnden E. Density Estimation by Dual Ascent of the Log-Likelihood. Communications in Mathematical Sciences, 2010, 8(1): 217-233.
 +
# Dinh L., Krueger D., Bengio Y. NICE: Non-linear Independent Components Estimation. ICLR 2015 Workshop, 2014. https://arxiv.org/abs/1410.8516
 +
# Draxler F., Wahl S., Schnörr C., Köthe U. On the Universality of Volume-Preserving and Coupling-Based Normalizing Flows. Proceedings of the 41st International Conference on Machine Learning (ICML), PMLR 235, 2024.
 +
# Ho J., Chen X., Srinivas A., Duan Y., Abbeel P. Flow++: Improving Flow-Based Generative Models with Variational Dequantization and Architecture Design. ICML, 2019.
 +
# Kingma D. P., Dhariwal P. Glow: Generative Flow with Invertible 1×1 Convolutions. NeurIPS, 2018.
 +
# Rezende D. J., Mohamed S. Variational Inference with Normalizing Flows. ICML, 2015.
 +
# Papamakarios G., Pavlakou T., Murray I. Masked Autoregressive Flow for Density Estimation. NIPS, 2017.
 +
# Grathwohl W., Chen R. T. Q., Bettencourt J., Sutskever I., Duvenaud D. FFJORD: Free-form Continuous Dynamics for Scalable Reversible Generative Models. ICLR, 2019.
 +
# Chen R. T. Q., Behrmann J., Duvenaud D., Jacobsen J.-H. Residual Flows for Invertible Generative Modeling. NeurIPS, 2019.
 +
# Papamakarios G., Nalisnick E., Rezende D. J., Mohamed S., Lakshminarayanan B. Normalizing Flows for Probabilistic Modeling and Inference. Journal of Machine Learning Research, 2021, 22(57): 1-64.
 +
# Zhang J., Liu K. Neural Information Squeezer for Causal Emergence. Entropy, 2022, 25(1): 26.
 +
# Yang M., Wang Z., Liu K., Rong Y., Yuan B., Zhang J. Finding Emergence in Data by Maximizing Effective Information. National Science Review, 2025, 12(1): nwae279.
    
= 署名 =
 
= 署名 =
50

个编辑