更改

删除5,703字节 、 2026年9月6日 (星期日)
术语规范:保留"基分布"译名,首次出现处加注(base distribution,变换起点的简单分布,通常取标准高斯,与目标分布相对)——会议共识为不换词、加英文注释;"普适逼近器"改为"通用逼近器(universal approximator)"并补全原句谓语("……而仿射耦合流在一定的良好条件下则是");棋盘掩码、通道级掩码在首次出现处就地给出一句直觉解释,落实"术语首次出现均需解释"的原则。 结构更名:原"= 算法框架 ="一节更名"= 模型架构 =",避免"框架"一词暗示 RealNVP 与标准化流平级。 历史渊源重写:整节由"两条主线"改为"需求—框架—实现"三层叙事——先讲生成建模的需求与变量替换公式这一数学工具(ICA、高斯化为先驱),再讲 Tabak & Vanden-Eijnden 2010 正式提出标准化流框架、Rezende & Mohamed 2015 推广该术语,最后讲 NICE、RealNVP 等具体实现;节末新增术语史段落:RealNVP 原文未自称"标准化流",归类由 Kobyzev et al.(TPAMI 2021)与 Papamakarios
第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 属于[[耦合流]](coupling flow)分支,与 [[NICE]]、[[Glow]] 同属一支,三者构成"[[加性耦合]]→仿射耦合→引入可逆 <math>1\times1</math> 卷积"的演进序列。RealNVP 的贡献也体现在两个层面:作为完整模型,它是标准化[[耦合流]]这一派的代表作;而其标志性的'''[[仿射耦合层]]'''又常被单独取出,作为通用可逆模块应用于标准化流之外的场合(见"应用"一节)。
+
'''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 的正向与反向流程:正向通过复合可逆变换将数据分布映射为标准高斯分布;反向则从高斯分布采样并逐层逆变换还原为数据。]]
   第5行: 第5行:  
= 历史渊源 =
 
= 历史渊源 =
 
​
 
​
−
RealNVP 的历史可以按"需求—框架—实现"三层来梳理:先有[[密度估计]]的建模需求与[[变量替换公式]]这一数学工具,再有标准化流框架的正式提出,最后才有 NICE、RealNVP 等具体实现方案。
+
RealNVP 建立在早期标准化流工作之上,其发展有两条主线。
 
​
 
​
    
​
 
​
−
'''需求与原理''':深度[[生成建模]]的一个核心需求,是既能精确计算数据的概率密度,又能从模型中高效采样。满足这一需求的数学工具是概率论中的[[变量替换公式]]:若变换可逆,变换前后的密度便由[[雅可比行列式]]精确联系。用[[可逆变换]]把复杂数据"[[归一化]]"到简单分布的尝试由来已久——从 1990 年代的[[独立成分分析]](Independent Component Analysis,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>,都是这一思路的先驱。
+
第一条主线是可逆变换的"分层堆叠"思想。从 1990 年代的独立成分分析(Independent Component Analysis,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>。
 
​
 
​
    
​
 
​
−
'''框架''':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>:通过一系列可微可逆映射的复合,让'''[[基分布]]'''(base distribution,变换起点的简单分布,通常取标准高斯;与变换要逼近的目标分布相对)像水流一样"流动"成目标分布,密度则由变量替换公式精确给出。2015 年,Rezende 与 Mohamed 将这一框架引入[[变分推断]]<ref name="Rezende2015" />,"标准化流"一词由此流行。作为一种建模范式,标准化流只规定变换必须可逆、基分布必须指定、密度由变量替换公式计算,而不限定变换的具体结构——这为不同的实现方案留出了空间。
+
第二条主线是耦合层的发明与升级。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=2015|url=https://arxiv.org/abs/1410.8516}}</ref>。NICE 的关键创新是'''[[加性耦合层]]''':将输入分成两半,其中一半直接保持不变,另一半则加上一个以第一半为条件的神经网络输出。由于该变换的雅可比行列式恒为 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=2015|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)证明:[[体积保持]]的流'''不是'''分布的[[通用逼近器]](universal approximator),而仿射耦合流在一定的良好条件下'''则是'''<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 的优势。除耦合流一支外,标准化流还有自回归流、连续流等其他实现路线(见"与相关框架的关系"一节);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> 还原为数据。每一层变换的[[雅可比行列式]]都能高效解析计算,因此整体[[对数似然]] <math>\log p_X(\mathbf{x})</math> 可直接求出,无需借助变分下界或对抗训练。
−
'''术语史''':RealNVP 原论文通篇并未自称"标准化流"——该词在全文中仅出现于参考文献的标题里,作者当时将模型定位为基于[[变量替换公式]]、可精确计算[[似然]]的概率模型。将 RealNVP 正式归入标准化流大类下的耦合流分支,是由后来的综述文献确立的分类<ref name="Kobyzev2021">{{cite journal|author1=Kobyzev I.|author2=Prince S. J. D.|author3=Brubaker M. A.|title=Normalizing Flows: An Introduction and Review of Current Methods|journal=IEEE Transactions on Pattern Analysis and Machine Intelligence|year=2021|volume=43|issue=11|pages=3964-3979|url=https://arxiv.org/abs/1908.09257}}</ref><ref name="Papamakarios2021" />。
  −
​
      +
RealNVP 把若干可逆模块按顺序堆叠,形成从数据空间到潜在空间的完整映射。其网络主体由四个功能模块组成:'''[[仿射耦合层]]'''(affine coupling layer)负责可逆的特征变换,每个耦合层输出后接'''[[批量归一化]]'''(batch normalization)以稳定训练;'''[[压缩]]'''(squeeze)负责降低空间分辨率并把信息重排到通道;'''[[变量分解]]'''(factor out)负责在每个尺度末尾抽取变量作为潜在变量。其中,仿射耦合层通过空间[[棋盘掩码]](checkerboard masking)与[[通道级掩码]](channel-wise masking)实现,二者交替使用。
 
​
 
​
−
= 模型架构 =
     −
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>\log p_X(\mathbf{x})</math> 可直接求出,无需借助变分下界或对抗训练。由于可逆性,生成样本时只需从正态分布采样 <math>\mathbf{z}</math>,再通过逆映射 <math>\mathbf{x} = f^{-1}(\mathbf{z})</math> 还原为数据。
+
RealNVP 的多尺度架构如下图所示。输入图像 <math>\mathbf{x}</math> 首先进入第 1 尺度。每个非末尺度内部依次经过 3 个空间棋盘掩码的耦合层(每个耦合层输出后接批量[[归一化]])、压缩块、再 3 个通道级掩码的耦合层(同样每个后接批量归一化),最后进行变量分解;末尺度则只经过 4 个空间棋盘掩码耦合层(同样每个后接批量归一化),随后把全部变量抽出作为 <math>\mathbf{z}^{(L)}</math>,不再保留传递变量。非末尺度的变量分解把当前特征一分为二:一半作为 <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>,因此整体变换保持维度不变。这种分层设计的意图是:早期尺度保留高分辨率的局部细节,后期尺度处理低分辨率的全局结构,并通过逐步分解减少后续层的计算量。
−
 
  −
RealNVP 把若干可逆模块按顺序堆叠,形成从数据空间到潜在空间的完整映射。其网络主体由四个功能模块组成:'''[[仿射耦合层]]'''(affine coupling layer)负责可逆的特征变换,每个耦合层输出后接'''[[批量归一化]]'''(batch normalization)以稳定训练;'''[[压缩]]'''(squeeze)负责降低空间分辨率并把信息重排到通道;'''[[变量分解]]'''(factor out)负责在每个尺度末尾抽取变量作为[[潜在变量]]。其中,[[仿射耦合层]]通过两种掩码实现输入的对半划分:'''空间[[棋盘掩码]]'''(checkerboard masking)像国际象棋棋盘一样按像素坐标的奇偶性把像素分成两组,'''[[通道级掩码]]'''(channel-wise masking)则按通道把变量分成前后两半;二者交替使用。
  −
​
  −
 
  −
RealNVP 的[[多尺度架构]]如下图所示。输入图像 <math>\mathbf{x}</math> 首先进入第 1 尺度。每个非末尺度内部依次经过 3 个空间[[棋盘掩码]]的耦合层(图中标为 3 × (Coupling (checkerboard) → BN);凡是耦合层,输出后均接批量[[归一化]](即块内的 BN),下文不再重复)、[[压缩]]块(图中 Squeeze)、再 3 个[[通道级掩码]]的耦合层(图中 3 × (Coupling (channel-wise) → BN)),最后进行[[变量分解]](图中 Factor Out);末尺度则只经过 4 个空间棋盘掩码耦合层(图中 4 × (Coupling (checkerboard) → BN)),随后把全部变量抽出作为 <math>\mathbf{z}^{(L)}</math>,不再保留传递变量。非末尺度的变量分解把当前特征一分为二:一半作为 <math>\mathbf{z}^{(i)}</math> 抽出,另一半 <math>\mathbf{h}^{(i)}</math> 继续传入下一尺度。最终把每个 <math>\mathbf{z}^{(i)}</math> 展平为向量后按顺序拼接(图中 Concatenation)成完整潜在变量 <math>\mathbf{z}</math>。虽然各 <math>\mathbf{z}^{(i)}</math> 的展平长度不同(依次为 <math>HWC/2, HWC/4, \dots, HWC/2^{L-1}</math>,其中末尺度因全部抽出而与其前一尺度等长),但它们的总和恰好等于输入维度 <math>HWC</math>,因此整体变换保持维度不变。这种分层设计的意图是:早期尺度保留高分辨率的局部细节,后期尺度处理低分辨率的全局结构,并通过逐步分解减少后续层的计算量。
   
​
 
​
   第49行: 第41行:  
由于每个压缩和分解步骤都要对空间或通道维度进行对半划分,各尺度的空间尺寸与通道数都必须是偶数;实际应用中通常把图像尺寸调整为偶数,或通过填充、裁剪等预处理满足该条件。
 
由于每个压缩和分解步骤都要对空间或通道维度进行对半划分,各尺度的空间尺寸与通道数都必须是偶数;实际应用中通常把图像尺寸调整为偶数,或通过填充、裁剪等预处理满足该条件。
 
​
 
​
−
[[文件:realnvp_multiscale_v2.png|缩略图|RealNVP 多尺度分层架构示意图。每个尺度(Scale)内数据自上而下流动,尺度间自左向右推进。图中 Coupling 即正文的仿射耦合层(括号内 checkerboard、channel-wise 分别为棋盘掩码与通道级掩码),块内"→ BN"表示每个耦合层输出后接批量归一化;Squeeze 为压缩,Factor Out 为变量分解,Concatenation 为拼接;h⁽ⁱ⁾、z⁽ⁱ⁾ 与正文符号一致。|替代=|848x848px|居中]]
+
[[文件:Realnvp multiscale.svg|缩略图|RealNVP 多尺度分层架构示意图。批量归一化(Batch Normalization,BN)为图中归一化操作的简写。|替代=|848x848px|居中]]
 
== [[仿射耦合层]]:可逆的"条件变形" ==
 
== [[仿射耦合层]]:可逆的"条件变形" ==
 
​
 
​
−
下图给出两个交替堆叠的仿射耦合层的前向流程。仿射耦合层是 RealNVP 的基本可逆变换单元;图中左半部分的符号与公式 (1) 一一对应。[[文件:仿射耦合_公式对齐.png|缩略图|两个交替堆叠的仿射耦合层(正向,从左到右):左半与公式 (1) 一一对应——<math>\mathbf{x}_1</math> 直通(即 <math>\mathbf{y}_1=\mathbf{x}_1</math>),<math>\mathbf{x}_2</math> 经 <math>\mathbf{s}</math>、<math>\mathbf{t}</math> 给出的缩放与平移得到 <math>\mathbf{y}_2</math>;右半为下一耦合层(网络记为 <math>\mathbf{s}',\mathbf{t}'</math>),两半角色互换,输出 <math>\mathbf{y}'</math>。反向(从右到左)阅读即公式 (2) 的逆变换。|替代=|626x626px]]{{NumBlk|:|
+
下图给出了仿射耦合层的前向流程。图中的耦合层块即仿射耦合层,它是 RealNVP 的基本可逆变换单元。[[文件:仿射耦合.png|缩略图|仿射耦合层示意图:正向(从左到右)将输入分块并变换,反向(从右到左)逐块还原。|替代=|626x626px]]{{NumBlk|:|
 
<math>
 
<math>
 
\begin{cases}
 
\begin{cases}
−
\mathbf{y}_1 = \mathbf{x}_1 \\[6pt]
+
\mathbf{y}_{1:d} = \mathbf{x}_{1:d} \\[6pt]
−
\mathbf{y}_2 = \mathbf{x}_2 \odot \exp\!\bigl(\mathbf{s}(\mathbf{x}_1)\bigr) + \mathbf{t}(\mathbf{x}_1)
+
\mathbf{y}_{d+1:D} = \mathbf{x}_{d+1:D} \odot \exp\!\bigl(\mathbf{s}(\mathbf{x}_{1:d})\bigr) + \mathbf{t}(\mathbf{x}_{1:d})
 
\end{cases}
 
\end{cases}
 
</math>
 
</math>
−
|{{EquationRef|1}}}}这里 <math>\mathbf{s}</math>(scale,缩放)和 <math>\mathbf{t}</math>(translation,平移)是两个深度神经网络(可以是任意结构;图像任务中通常用[[卷积神经网络]](Convolutional Neural Network,CNN))。<math>\odot</math> 为逐元素乘积。其中 <math>\mathbf{x}_1</math>、<math>\mathbf{x}_2</math> 并非第 1、2 个坐标,而是由掩码划分出的两个'''子向量''':<math>\mathbf{x}_1</math> 是保持不变的被动部分,<math>\mathbf{x}_2</math> 是被变换的主动部分。通道级掩码下二者即前、后两半通道,棋盘掩码下则是按坐标奇偶性分出的两组像素;具体规则见下文"两种掩码分区模式"。由于 <math>\mathbf{s}</math> 和 <math>\mathbf{t}</math> 的输入只来自不变的那一半,输出只作用在可变的那一半,整个变换的[[雅可比矩阵]]是下三角块结构,行列式即为对角线元素的乘积——一般的 <math>D</math> 维矩阵求行列式需要 <math>O(D^3)</math> 的计算量,而这里只需把对角元相乘,[[计算复杂度]]降为 <math>O(D)</math>。此外,逆变换为:
+
|{{EquationRef|1}}}}这里 <math>\mathbf{s}</math>(scale,缩放)和 <math>\mathbf{t}</math>(translation,平移)是两个深度神经网络(可以是任意结构;图像任务中通常用[[卷积神经网络]](Convolutional Neural Network,CNN))。<math>\odot</math> 为逐元素乘积。由于 <math>\mathbf{s}</math> 和 <math>\mathbf{t}</math> 的输入只来自不变的那一半,输出只作用在可变的那一半,整个变换的[[雅可比矩阵]]是下三角块结构,行列式即为对角线元素的乘积——一般的 <math>D</math> 维矩阵求行列式需要 <math>O(D^3)</math> 的计算量,而这里只需把对角元相乘,[[计算复杂度]]降为 <math>O(D)</math>。此外,逆变换为:
 
​
 
​
 
{{NumBlk|:|
 
{{NumBlk|:|
 
<math>
 
<math>
 
\begin{cases}
 
\begin{cases}
−
\mathbf{x}_1 = \mathbf{y}_1 \\[6pt]
+
\mathbf{x}_{1:d} = \mathbf{y}_{1:d} \\[6pt]
−
\mathbf{x}_2 = \bigl(\mathbf{y}_2 - \mathbf{t}(\mathbf{y}_1)\bigr) \odot \exp\!\bigl(-\mathbf{s}(\mathbf{y}_1)\bigr)
+
\mathbf{x}_{d+1:D} = \bigl(\mathbf{y}_{d+1:D} - \mathbf{t}(\mathbf{y}_{1:d})\bigr) \odot \exp\!\bigl(-\mathbf{s}(\mathbf{y}_{1:d})\bigr)
 
\end{cases}
 
\end{cases}
 
</math>
 
</math>
第108行: 第100行:     
​
 
​
−
其中 <math>\tilde{\boldsymbol{\mu}}</math>、<math>\tilde{\boldsymbol{\sigma}}</math> 为均值与标准差——训练时按当前批次估计,推理时改用滑动平均(原因见下文)。由于 BN 对每个维度独立地缩放和平移,它本身也是一个可逆变换:其雅可比矩阵为对角阵,[[雅可比行列式]]即各维度缩放因子的乘积,可直接加入[[对数似然]]——这使 BN 可以像耦合层一样作为流中的一层。引入 BN 主要是为了稳定深层训练:它抑制了由缩放参数 <math>\exp(\mathbf{s})</math> 引起的数值爆炸,使梯度稳定传播。使用 BN 有一个容易忽略的细节:训练时均值与方差是从当前这一批样本中估计的,因此单个样本的输出会依赖同批次的其他样本——此时的 BN 并不是严格意义上逐样本的可逆变换,其行列式也与整个批量耦合。只有在推理阶段改用训练过程中滑动平均得到的固定统计量,BN 才成为逐样本的、严格可逆的仿射变换,其行列式才能精确计入[[对数似然]]。换言之,用训练好的模型评估密度时若忘了做这一切换,同一个输入会因同批样本不同而得到不同的密度值,结果既不可复现也不正确。
+
其中 <math>\tilde{\boldsymbol{\mu}}</math>、<math>\tilde{\boldsymbol{\sigma}}</math> 为均值与标准差——训练时按当前批次估计,推理时改用滑动平均(原因见下文)。由于 BN 对每个维度独立地缩放和平移,它本身也是一个可逆变换:其雅可比矩阵为对角阵,[[雅可比行列式]]即各维度缩放因子的乘积,可直接加入[[对数似然]]——这使 BN 可以像耦合层一样作为流中的一层。引入 BN 主要是为了稳定深层训练:它抑制了由缩放参数 <math>\exp(\mathbf{s})</math> 引起的数值爆炸,使梯度稳定传播。使用 BN 有一个容易忽略的细节:训练时均值与方差是从当前这一批样本中估计的,因此单个样本的输出会依赖同批次的其他样本——此时的 BN 并不是严格意义上逐样本的可逆变换,其行列式也与整个批量耦合。只有在推理阶段改用训练过程中滑动平均得到的固定统计量,BN 才成为逐样本的、严格可逆的仿射变换,其行列式才能精确计入对数似然。换言之,用训练好的模型评估密度时若忘了做这一切换,同一个输入会因同批样本不同而得到不同的密度值,结果既不可复现也不正确。
 
​
 
​
    
= 数学原理 =
 
= 数学原理 =
 
​
 
​
−
RealNVP 的数学原理可分为两个层次。其一是[[标准化流]]的'''通用框架''':[[变量替换公式]]给出精确似然的表达式,[[最大似然估计]]提供直接的训练目标,无需近似下界或辅助网络——这些结论对一切流模型成立,并非 RealNVP 特有。其二是 RealNVP 的'''特有设计''':通用框架要求变换可逆且雅可比行列式可算,[[仿射耦合层]]的[[三角雅可比]]结构正是为满足这一要求而构造的,它使行列式计算开销与维度成线性关系,从而保证可处理性。本节先介绍通用框架,再阐述 RealNVP 的特化实现,进而比较[[加性耦合]]与仿射耦合在[[体积保持]]上的差异,最后讨论训练目标中两项各自的含义与实际训练配置。
+
RealNVP 的数学原理可分为两个层次。其一是[[标准化流]]的'''通用框架''':[[变量替换公式]]给出精确似然的表达式,[[最大似然估计]]提供直接的训练目标,无需近似下界或辅助网络——这些结论对一切流模型成立,并非 RealNVP 特有。其二是 RealNVP 的'''特有设计''':通用框架要求变换可逆且雅可比行列式可算,[[仿射耦合层]]的三角雅可比结构正是为满足这一要求而构造的,它使行列式计算开销与维度成线性关系,从而保证可处理性。本节先介绍通用框架,再阐述 RealNVP 的特化实现,进而比较[[加性耦合]]与仿射耦合在体积保持上的差异,最后讨论训练目标中两项各自的含义与实际训练配置。
 
​
 
​
 
== [[标准化流]]与[[变量替换公式]] ==
 
== [[标准化流]]与[[变量替换公式]] ==
第143行: 第135行:  
== 仿射耦合的雅可比行列式与可逆性 ==
 
== 仿射耦合的雅可比行列式与可逆性 ==
 
​
 
​
−
上一小节的结论适用于一切标准化流。RealNVP 要回答的问题是:如何构造一个既完全可逆、又满足行列式易算的变换?其答案就是仿射耦合层——它对被动半 <math>\mathbf{x}_1</math> 进行恒等映射,对主动半 <math>\mathbf{x}_2</math> 进行仿射映射。记被动半的维度为 <math>d</math>(主动半的维度为 <math>D-d</math>),则雅可比矩阵具有分块三角结构:
+
上一小节的结论适用于一切标准化流。RealNVP 要回答的问题是:如何构造一个既完全可逆、又满足行列式易算的变换?其答案就是仿射耦合层——它对前 <math>d</math> 维进行恒等映射,对后 <math>D-d</math> 维进行仿射映射,因而雅可比矩阵具有分块三角结构:
 
​
 
​
   第151行: 第143行:  
\begin{bmatrix}
 
\begin{bmatrix}
 
\mathbf{I}_d & \mathbf{0} \\[8pt]
 
\mathbf{I}_d & \mathbf{0} \\[8pt]
−
\dfrac{\partial \mathbf{y}_2}{\partial \mathbf{x}_1^\top} & \operatorname{diag}\!\bigl(\exp[\mathbf{s}(\mathbf{x}_1)]\bigr)
+
\dfrac{\partial \mathbf{y}_{d+1:D}}{\partial \mathbf{x}_{1:d}^\top} & \operatorname{diag}\!\bigl(\exp[\mathbf{s}(\mathbf{x}_{1:d})]\bigr)
 
\end{bmatrix}
 
\end{bmatrix}
 
</math>
 
</math>
第161行: 第153行:  
{{NumBlk|:|
 
{{NumBlk|:|
 
<math>
 
<math>
−
\det\!\left(\frac{\partial \mathbf{y}}{\partial \mathbf{x}^\top}\right) = \exp\!\left(\sum_{j=1}^{D-d} s_j(\mathbf{x}_1)\right)
+
\det\!\left(\frac{\partial \mathbf{y}}{\partial \mathbf{x}^\top}\right) = \exp\!\left(\sum_{j=1}^{D-d} s_j(\mathbf{x}_{1:d})\right)
 
</math>
 
</math>
 
|{{EquationRef|5}}}}
 
|{{EquationRef|5}}}}
 
​
 
​
−
上述性质是 RealNVP 可处理性的关键:计算行列式不需要对神经网络 <math>\mathbf{s}</math> 或 <math>\mathbf{t}</math> 求导。因此 <math>\mathbf{s}</math> 和 <math>\mathbf{t}</math> 可以是任意复杂的深度网络(如深层卷积网络、[[残差网络]]),而不会破坏密度评估的可处理性。多个耦合层复合时,行列式相乘、逆变换按相反顺序复合,性质仍然保持。
+
上述性质是 RealNVP 可处理性的关键:计算行列式不需要对神经网络 <math>\mathbf{s}</math> 或 <math>\mathbf{t}</math> 求导。因此 <math>\mathbf{s}</math> 和 <math>\mathbf{t}</math> 可以是任意复杂的深度网络(如深层卷积网络、残差网络),而不会破坏密度评估的可处理性。多个耦合层复合时,行列式相乘、逆变换按相反顺序复合,性质仍然保持。
 
​
 
​
 
对公式 (1) 做简单的代数移项,即可得到公式 (2) 给出的逆变换。无需对 <math>\mathbf{s}</math> 或 <math>\mathbf{t}</math> 求逆,只需按逆变换公式进行减法和除法即可。因此'''编码(求密度)和解码(采样)同样高效'''。
 
对公式 (1) 做简单的代数移项,即可得到公式 (2) 给出的逆变换。无需对 <math>\mathbf{s}</math> 或 <math>\mathbf{t}</math> 求逆,只需按逆变换公式进行减法和除法即可。因此'''编码(求密度)和解码(采样)同样高效'''。
第188行: 第180行:  
== 损失函数与[[最大似然训练]] ==
 
== 损失函数与[[最大似然训练]] ==
 
​
 
​
−
RealNVP 通过最大化数据对数似然来训练(这也是标准化流的通用训练方式),等价于最小化数据分布与模型分布的前向 KL 散度(Kullback-Leibler divergence,KL):
+
RealNVP 通过最大化数据[[对数似然]]来训练(这也是[[标准化流]]的通用训练方式),等价于最小化数据分布与模型分布的前向 [[KL 散度]](Kullback-Leibler divergence,KL):
 
​
 
​
 
{{NumBlk|:|
 
{{NumBlk|:|
第196行: 第188行:  
|{{EquationRef|6}}}}
 
|{{EquationRef|6}}}}
 
​
 
​
−
对于训练集 <math>\{\mathbf{x}^{(i)}\}_{i=1}^N</math>,使用蒙特卡洛近似:
+
对于训练集 <math>\{\mathbf{x}^{(i)}\}_{i=1}^N</math>,使用[[蒙特卡洛近似]]:
 
​
 
​
 
<math>
 
<math>
第203行: 第195行:  
​
 
​
 
损失函数包含两项:
 
损失函数包含两项:
−
* '''先验项''' <math>\log p_Z(f(\mathbf{x}))</math>:促使编码后的分布整体逼近标准高斯,相当于对潜在空间的正则化。
+
* '''[[先验项]]''' <math>\log p_Z(f(\mathbf{x}))</math>:促使编码后的分布整体逼近[[标准高斯]],相当于对[[潜在空间]]的[[正则化]]。
−
* '''行列式项''':增大体积膨胀会提高似然,因此该项处处偏好扩张,与先验项的收缩压力相平衡——净效果是数据密集处扩张、稀疏处收缩,这与[[信息论]]中将码空间分配给高概率事件的原则一致。
+
* '''[[行列式项]]''':增大[[体积膨胀]]会提高似然,因此该项处处偏好扩张,与先验项的收缩压力相平衡——净效果是数据密集处扩张、稀疏处收缩,这与[[信息论]]中将码空间分配给高概率事件的原则一致。
 
​
 
​
−
从对偶视角看(Papamakarios et al., 2021)<ref name="Papamakarios2021">{{cite journal|author1=Papamakarios G.|author2=Nalisnick E.|author3=Rezende D. J.|author4=Mohamed S.|author5=Lakshminarayanan B.|title=Normalizing Flows for Probabilistic Modeling and Inference|journal=Journal of Machine Learning Research|year=2021|volume=22|issue=57|pages=1-64}}</ref>:在数据上最小化前向 KL,等价于在潜在空间中最小化推前分布(即数据分布经 <math>f</math> 映射到潜在空间后得到的分布)与先验之间的反向 KL。
+
从对偶视角看(Papamakarios et al., 2021)<ref name="Papamakarios2021">{{cite journal|author1=Papamakarios G.|author2=Nalisnick E.|author3=Rezende D. J.|author4=Mohamed S.|author5=Lakshminarayanan B.|title=Normalizing Flows for Probabilistic Modeling and Inference|journal=Journal of Machine Learning Research|year=2021|volume=22|issue=57|pages=1-64}}</ref>:在数据上最小化前向 KL,等价于在潜在空间中最小化[[推前分布]](即数据分布经 <math>f</math> 映射到潜在空间后得到的分布)与先验之间的反向 KL。
 
​
 
​
−
'''实际训练配置''':[[自适应矩估计]](Adaptive Moment Estimation,Adam)优化器,权重衰减 <math>5\times10^{-5}</math>,批量大小 64,先验为标准高斯。图像数据通常先经 logit 变换 <math>\operatorname{logit}(\alpha + (1-\alpha)\mathbf{x}/256)</math>(原论文取 <math>\alpha = 0.05</math>)处理,以缓解像素取值集中在 0 和 255 两个边界带来的问题。
+
'''实际训练配置''':[[自适应矩估计]](Adaptive Moment Estimation,Adam)优化器,[[权重衰减]] <math>5\times10^{-5}</math>,[[批量大小]] 64,先验为标准高斯。图像数据通常先经 logit 变换 <math>\operatorname{logit}(\alpha + (1-\alpha)\mathbf{x}/256)</math>(原论文取 <math>\alpha = 0.05</math>)处理,以缓解像素取值集中在 0 和 255 两个边界带来的问题。
 
​
 
​
    
= 应用 =
 
= 应用 =
−
​
  −
RealNVP 的应用对应着它的两个层面:作为完整的标准化流模型,它直接服务于[[密度估计]]、生成、[[异常检测]]与重建推断等任务;作为通用可逆部件,其[[仿射耦合层]]凭借解析可逆、雅可比行列式易算的性质,也被用于概率建模之外的场合。下文按此顺序介绍。
   
​
 
​
 
== 自然图像[[密度估计]]与生成 ==
 
== 自然图像[[密度估计]]与生成 ==
第219行: 第209行:  
RealNVP 最直接的应用场景是连续高维数据的密度估计与无条件生成<ref name="Dinh2017" />。在图像生成任务中,模型一次性学习整个图像的联合分布,然后直接从标准高斯分布采样并通过逆映射得到新图像。
 
RealNVP 最直接的应用场景是连续高维数据的密度估计与无条件生成<ref name="Dinh2017" />。在图像生成任务中,模型一次性学习整个图像的联合分布,然后直接从标准高斯分布采样并通过逆映射得到新图像。
 
​
 
​
−
在 CelebA 人脸生成任务中,RealNVP 能够生成全局连贯、五官清晰的人脸样本(见下图)。与[[变分自编码器]](Variational Autoencoder,VAE)相比,RealNVP 不依赖固定的重建损失(如[[均方误差]](Mean Squared Error,MSE)),因此不会过度平滑高频细节;与 PixelRNN 等[[自回归模型]]相比,RealNVP 的采样在维度上完全并行,速度更快。
+
在 CelebA 人脸生成任务中,RealNVP 能够生成全局连贯、五官清晰的人脸样本(见下图)。与[[变分自编码器]](Variational Autoencoder,VAE)相比,RealNVP 不依赖固定的重建损失(如均方误差(Mean Squared Error,MSE)),因此不会过度平滑高频细节;与 PixelRNN 等[[自回归模型]]相比,RealNVP 的采样在维度上完全并行,速度更快。
 
​[[文件:realnvp_celeba_generation.png|缩略图|RealNVP 在 CelebA 上生成的人脸样本。|264x264px|链接=Special:FilePath/Realnvp_celeba_generation.png|替代=|居中]]​
 
​[[文件:realnvp_celeba_generation.png|缩略图|RealNVP 在 CelebA 上生成的人脸样本。|264x264px|链接=Special:FilePath/Realnvp_celeba_generation.png|替代=|居中]]​
 
== [[异常检测]] ==
 
== [[异常检测]] ==
 
​
 
​
−
RealNVP 能够给出数据的精确似然,这使它天然适合无监督[[异常检测]]:在仅含正常样本的数据上训练流模型,测试时将似然显著低于正常水平的样本判为异常。也可以把流与重建类模型结合起来,综合似然与[[重建误差]]构造异常分数——下文的 [[AE-FLOW]] 即属此类。医学影像领域尤其典型——正常扫描数量庞大,而病变样本稀少且难以标注。AE-FLOW 将自编码器与以 RealNVP [[仿射耦合层]]为核心的[[标准化流]]瓶颈相结合,在胸部 X 光、光学相干断层扫描、皮肤镜与脑部核磁共振等多种医学影像数据上检测异常。模型同时利用重建误差与流模型给出的[[负对数似然]]构造异常分数:正常样本能被准确重建并获得较高似然,而病变区域会产生高重建残差与低似然<ref name="AEFLOW2023">{{cite journal|author1=Zhao Y.|author2=Ding Q.|author3=Zhang X.|title=AE-FLOW: Autoencoders with Normalizing Flows for Medical Images Anomaly Detection|journal=International Conference on Learning Representations (ICLR)|year=2023|url=https://openreview.net/forum?id=9OmCr1q54Z}}</ref>。
+
RealNVP 能够给出数据的精确似然,这使它天然适合无监督异常检测:在仅含正常样本的数据上训练流模型,测试时将似然显著低于正常水平的样本判为异常。也可以把流与重建类模型结合起来,综合似然与[[重建误差]]构造异常分数——下文的 AE-FLOW 即属此类。医学影像领域尤其典型——正常扫描数量庞大,而病变样本稀少且难以标注。AE-FLOW 将自编码器与以 RealNVP [[仿射耦合层]]为核心的[[标准化流]]瓶颈相结合,在胸部 X 光、光学相干断层扫描、皮肤镜与脑部核磁共振等多种医学影像数据上检测异常。模型同时利用重建误差与流模型给出的[[负对数似然]]构造异常分数:正常样本能被准确重建并获得较高似然,而病变区域会产生高重建残差与低似然<ref name="AEFLOW2023">{{cite journal|author1=Zhao Y.|author2=Ding Q.|author3=Zhang X.|title=AE-FLOW: Autoencoders with Normalizing Flows for Medical Images Anomaly Detection|journal=International Conference on Learning Representations (ICLR)|year=2023|url=https://openreview.net/forum?id=9OmCr1q54Z}}</ref>。
    
​
 
​
第231行: 第221行:  
== 重建设置中的推断 ==
 
== 重建设置中的推断 ==
 
​
 
​
−
由于编码器 <math>f</math> 与解码器 <math>g</math> 互为逆映射(<math>\mathbf{x} = g(f(\mathbf{x}))</math>),RealNVP 天然适合[[图像修复]]、去噪、着色等重建设置。以[[图像修复]]为例:已知像素 <math>\mathbf{x}_O</math> 固定,对缺失像素 <math>\mathbf{x}_H</math> 用梯度上升最大化 <math>\log p_X(\mathbf{x}_O, \mathbf{x}_H)</math>,并加入少量高斯噪声扰动:
+
由于编码器 <math>f</math> 与解码器 <math>g</math> 互为逆映射(<math>\mathbf{x} = g(f(\mathbf{x}))</math>),RealNVP 天然适合[[图像修复]]、去噪、着色等重建设置。以图像修复为例:已知像素 <math>\mathbf{x}_O</math> 固定,对缺失像素 <math>\mathbf{x}_H</math> 用梯度上升最大化 <math>\log p_X(\mathbf{x}_O, \mathbf{x}_H)</math>,并加入少量高斯噪声扰动:
 
​
 
​
   第247行: 第237行:  
== 在 [[NIS]]/[[NIS+]] 因果[[涌现]]框架中的应用 ==
 
== 在 [[NIS]]/[[NIS+]] 因果[[涌现]]框架中的应用 ==
 
​
 
​
−
在[[神经信息挤压器]](Neural Information Squeezer,[[NIS]])及其扩展 [[NIS+]](Neural Information Squeezer Plus)中,RealNVP 的'''基础仿射耦合模块'''被用于构建[[可逆神经网络]](Invertible Neural Networks,INN)编码器——堆叠 3 层,<math>\mathbf{s}</math>、<math>\mathbf{t}</math> 为小型前馈网络——实现微观状态到宏观状态的可逆[[粗粒化]]。NIS 原文的表述本身即体现了范畴与实例的关系:"There are several ways to realize an invertible neural network ... we select RealNVP module ... to concretely implement the invertible computation."(实现[[可逆神经网络]]有多种方式,本文选择 RealNVP 模块来具体实现可逆计算。)<ref name="NIS2023">{{cite journal|author1=Zhang J.|author2=Liu K.|title=Neural Information Squeezer for Causal Emergence|journal=Entropy|year=2023|volume=25|issue=1|page=26}}</ref>需要指出,此处复用的是部件而非完整模型:不含多尺度架构与高斯基分布,也不以似然为训练目标;同类的部件级复用还有 [[RevNet]] 的[[可逆残差结构]]<ref name="RevNet2017" />与 [[HiNet]] 的图像隐藏网络<ref name="HiNet2021">{{cite conference|author1=Jing J.|author2=Deng X.|author3=Xu M.|author4=Wang J.|author5=Guan Z.|title=HiNet: Deep Image Hiding by Invertible Network|conference=International Conference on Computer Vision (ICCV)|year=2021}}</ref>。NIS 中的[[粗粒化]][[策略]]被建模为两阶段过程:
+
在神经信息挤压器(Neural Information Squeezer,NIS)及其扩展 NIS+(Neural Information Squeezer Plus)中,RealNVP 以[[可逆神经网络]](Invertible Neural Networks,INN)作为编码器,实现微观状态到宏观状态的可逆[[粗粒化]]。粗粒化[[策略]]被建模为两阶段过程:
 
​
 
​
 
# '''无损变换''':由 RealNVP 耦合层堆叠构成的 INN <math>\psi_\alpha: \mathbb{R}^p \to \mathbb{R}^p</math> 将微观状态 <math>\mathbf{x}_t</math> 映射到等维潜在空间 <math>\mathbf{x}'_t</math>。'''该阶段信息不丢失'''。
 
# '''无损变换''':由 RealNVP 耦合层堆叠构成的 INN <math>\psi_\alpha: \mathbb{R}^p \to \mathbb{R}^p</math> 将微观状态 <math>\mathbf{x}_t</math> 映射到等维潜在空间 <math>\mathbf{x}'_t</math>。'''该阶段信息不丢失'''。
第256行: 第246行:  
[[文件:NIS+odd.png|缩略图|NIS/NIS+ 框架架构:RealNVP 的可逆神经网络(INN)实现编码器与解码器(图中记作 φ 与 φ†,分别对应正文中的 <math>\psi_\alpha</math> 与 <math>\psi_\alpha^{-1}</math>),信息丢弃与 EI 最大化在宏观动力学空间完成。|替代=|812x812px|居中]]
 
[[文件:NIS+odd.png|缩略图|NIS/NIS+ 框架架构:RealNVP 的可逆神经网络(INN)实现编码器与解码器(图中记作 φ 与 φ†,分别对应正文中的 <math>\psi_\alpha</math> 与 <math>\psi_\alpha^{-1}</math>),信息丢弃与 EI 最大化在宏观动力学空间完成。|替代=|812x812px|居中]]
 
​
 
​
−
NIS 论文给出选用 RealNVP 的三点依据<ref name="NIS2023" />:
+
NIS 论文给出选用 RealNVP 的三点依据<ref name="NIS2022">{{cite journal|author1=Zhang J.|author2=Liu K.|title=Neural Information Squeezer for Causal Emergence|journal=Entropy|year=2022|volume=25|issue=1|page=26}}</ref>:
 
# '''精确可逆性''':微观到潜在的变换不损失信息,信息丢弃量 <math>p-q</math> 成为显式可控的超参数。
 
# '''精确可逆性''':微观到潜在的变换不损失信息,信息丢弃量 <math>p-q</math> 成为显式可控的超参数。
 
# '''参数共享''':<math>\psi_\alpha</math> 与 <math>\psi_\alpha^{-1}</math> 共用一套参数,显著压缩模型规模。
 
# '''参数共享''':<math>\psi_\alpha</math> 与 <math>\psi_\alpha^{-1}</math> 共用一套参数,显著压缩模型规模。
 
# '''行列式可解析''':三角雅可比结构使[[有效信息]]([[Effective Information]],[[EI]])上界和最优宏观维度 <math>q</math> 的存在性等核心定理得以严格推导。
 
# '''行列式可解析''':三角雅可比结构使[[有效信息]]([[Effective Information]],[[EI]])上界和最优宏观维度 <math>q</math> 的存在性等核心定理得以严格推导。
 
​
 
​
−
RealNVP作为NIS+中可逆[[表示学习]]模块,使粗粒化映射与反粗粒化映射共享参数,降低了模型复杂度,同时为[[有效信息]]最大化提供了可分析的数学框架。此外,基于可逆粗粒化结构构建的encoder具有通用逼近性质,能够表达不同[[复杂系统]]中的粗粒化映射。<ref name="NISPlus2025">{{cite journal|author1=Yang M.|author2=Wang Z.|author3=Liu K.|author4=Rong Y.|author5=Yuan B.|author6=Zhang J.|title=Finding Emergence in Data by Maximizing Effective Information|journal=National Science Review|year=2025|volume=12|issue=1|page=nwae279}}</ref>。
+
RealNVP作为NIS+中可逆表示学习模块,使粗粒化映射与反粗粒化映射共享参数,降低了模型复杂度,同时为有效信息最大化提供了可分析的数学框架。此外,基于可逆粗粒化结构构建的encoder具有通用逼近性质,能够表达不同复杂系统中的粗粒化映射。<ref name="NISPlus2025">{{cite journal|author1=Yang M.|author2=Wang Z.|author3=Liu K.|author4=Rong Y.|author5=Yuan B.|author6=Zhang J.|title=Finding Emergence in Data by Maximizing Effective Information|journal=National Science Review|year=2025|volume=12|issue=1|page=nwae279}}</ref>。
 
​
 
​
   第272行: 第262行:  
* '''语义[[潜在空间]]''':由于潜在分布是简单的标准高斯、且映射光滑可逆,在潜在空间中做插值等简单操作,就对应图像上有语义的连续变化(如人脸姿态、表情的渐变),适合表示学习与属性操控<ref name="Dinh2017" />。
 
* '''语义[[潜在空间]]''':由于潜在分布是简单的标准高斯、且映射光滑可逆,在潜在空间中做插值等简单操作,就对应图像上有语义的连续变化(如人脸姿态、表情的渐变),适合表示学习与属性操控<ref name="Dinh2017" />。
 
* '''架构灵活''':[[耦合层]]只要求 <math>\mathbf{s}</math>、<math>\mathbf{t}</math> 两个网络给出缩放和平移量,对它们的内部结构没有任何限制,可以是任意深度的[[卷积神经网络]](Convolutional Neural Network,CNN)或[[残差网络]](Residual Network,ResNet)。提升表达能力可以直接借用主流的深层网络设计,而无须改动可逆框架本身。
 
* '''架构灵活''':[[耦合层]]只要求 <math>\mathbf{s}</math>、<math>\mathbf{t}</math> 两个网络给出缩放和平移量,对它们的内部结构没有任何限制,可以是任意深度的[[卷积神经网络]](Convolutional Neural Network,CNN)或[[残差网络]](Residual Network,ResNet)。提升表达能力可以直接借用主流的深层网络设计,而无须改动可逆框架本身。
−
* '''综合多种模型特性''':RealNVP 同时具备了此前难以兼得的能力——[[自回归模型]]的精确似然、VAE 的一步采样,以及不依赖固定重建损失的生成质量。
+
* '''综合多种模型特性''':RealNVP 同时具备了此前难以兼得的能力——自回归模型的精确似然、VAE 的一步采样,以及不依赖固定重建损失的生成质量。
 
​
 
​
 
== 局限 ==
 
== 局限 ==
第278行: 第268行:  
* '''似然性能未达最优''':RealNVP 对数据分布的拟合精度仍略逊于 PixelRNN 等自回归模型<ref name="Dinh2017" />。在以拟合精度为核心的任务(如[[密度估计]]、[[数据压缩]])上,这是它的相对劣势——尽管它以并行采样换来了远快于对手的生成速度。
 
* '''似然性能未达最优''':RealNVP 对数据分布的拟合精度仍略逊于 PixelRNN 等自回归模型<ref name="Dinh2017" />。在以拟合精度为核心的任务(如[[密度估计]]、[[数据压缩]])上,这是它的相对劣势——尽管它以并行采样换来了远快于对手的生成速度。
 
* '''维度保持约束''':可逆变换要求输入与输出同维,因此 RealNVP 不能像自编码器那样把高维图像压缩成低维向量——潜在变量的总维度始终与输入相同。[[多尺度架构]]中的变量分解并不改变这一点,它只是让后续层处理更小的特征图,并把潜在变量分配到不同尺度。
 
* '''维度保持约束''':可逆变换要求输入与输出同维,因此 RealNVP 不能像自编码器那样把高维图像压缩成低维向量——潜在变量的总维度始终与输入相同。[[多尺度架构]]中的变量分解并不改变这一点,它只是让后续层处理更小的特征图,并把潜在变量分配到不同尺度。
−
* '''[[仿射耦合]]的表达力上限''':仿射耦合每层只对一半变量做"缩放加平移",函数形式较为简单,拟合复杂分布往往需要堆叠很多层。后续工作把变换换成更灵活的函数形式——如 [[Flow++]] 的 Logistic 混合 CDF 耦合<ref name="FlowPlusPlus2019">{{cite journal|author1=Ho J.|author2=Chen X.|author3=Srinivas A.|author4=Duan Y.|author5=Abbeel P.|title=Flow++: Improving Flow-Based Generative Models with Variational Dequantization and Architecture Design|journal=ICML|year=2019}}</ref>、Neural Spline Flows 的[[有理二次样条耦合]]<ref name="NSF2019">{{cite journal|author1=Durkan C.|author2=Bekasov A.|author3=Murray I.|author4=Papamakarios G.|title=Neural Spline Flows|journal=Advances in Neural Information Processing Systems (NeurIPS)|year=2019|volume=32|url=https://arxiv.org/abs/1906.04032}}</ref>——用更少的层数即可达到更强的拟合能力。
+
* '''[[仿射耦合]]的表达力上限''':仿射耦合每层只对一半变量做"缩放加平移",函数形式较为简单,拟合复杂分布往往需要堆叠很多层。后续工作把变换换成更灵活的函数形式——如 Flow++ 的 Logistic 混合 CDF 耦合<ref name="FlowPlusPlus2019">{{cite journal|author1=Ho J.|author2=Chen X.|author3=Srinivas A.|author4=Duan Y.|author5=Abbeel P.|title=Flow++: Improving Flow-Based Generative Models with Variational Dequantization and Architecture Design|journal=ICML|year=2019}}</ref>、Neural Spline Flows 的[[有理二次样条耦合]]<ref name="NSF2019">{{cite journal|author1=Durkan C.|author2=Bekasov A.|author3=Murray I.|author4=Papamakarios G.|title=Neural Spline Flows|journal=Advances in Neural Information Processing Systems (NeurIPS)|year=2019|volume=32|url=https://arxiv.org/abs/1906.04032}}</ref>——用更少的层数即可达到更强的拟合能力。
 
* '''[[均匀去量化]]的次优性''':像素是 0–255 的离散整数,而 RealNVP 建模的是连续分布。RealNVP 的做法是给像素加上均匀噪声,把离散数据"抹平"成连续的——但这相当于让模型拟合一个被噪声模糊过的分布,与真实分布存在偏差。Flow++ 提出的[[变分去量化]]让噪声分布本身也由模型学习,缓解了这一问题<ref name="FlowPlusPlus2019" />。
 
* '''[[均匀去量化]]的次优性''':像素是 0–255 的离散整数,而 RealNVP 建模的是连续分布。RealNVP 的做法是给像素加上均匀噪声,把离散数据"抹平"成连续的——但这相当于让模型拟合一个被噪声模糊过的分布,与真实分布存在偏差。Flow++ 提出的[[变分去量化]]让噪声分布本身也由模型学习,缓解了这一问题<ref name="FlowPlusPlus2019" />。
 
* '''分区固定性''':掩码决定哪一半变量被变换,而这一划分在训练前就已固定、训练中不再改变;若某层的划分不理想,只能靠后续层弥补。Glow(Generative Flow with Invertible 1×1 Convolutions)改用可学习的可逆 <math>1\times1</math> 卷积,让模型自己学会如何重排变量,划分更灵活,生成效果也更好<ref name="Glow2018">{{cite journal|author1=Kingma D. P.|author2=Dhariwal P.|title=Glow: Generative Flow with Invertible 1×1 Convolutions|journal=NeurIPS|year=2018}}</ref>。
 
* '''分区固定性''':掩码决定哪一半变量被变换,而这一划分在训练前就已固定、训练中不再改变;若某层的划分不理想,只能靠后续层弥补。Glow(Generative Flow with Invertible 1×1 Convolutions)改用可学习的可逆 <math>1\times1</math> 卷积,让模型自己学会如何重排变量,划分更灵活,生成效果也更好<ref name="Glow2018">{{cite journal|author1=Kingma D. P.|author2=Dhariwal P.|title=Glow: Generative Flow with Invertible 1×1 Convolutions|journal=NeurIPS|year=2018}}</ref>。
第306行: 第296行:  
! 方法 !! 年份 !! 核心创新 !! 与 RealNVP 的对比
 
! 方法 !! 年份 !! 核心创新 !! 与 RealNVP 的对比
 
|-
 
|-
−
| '''[[MAF]]'''(Masked Autoregressive Flow)<ref name="MAF2017">{{cite journal|author1=Papamakarios G.|author2=Pavlakou T.|author3=Murray I.|title=Masked Autoregressive Flow for Density Estimation|journal=NIPS|year=2017}}</ref> || 2017 || 全自回归条件 || 密度评估更灵活,但采样需顺序进行
+
| '''MAF'''(Masked Autoregressive Flow)<ref name="MAF2017">{{cite journal|author1=Papamakarios G.|author2=Pavlakou T.|author3=Murray I.|title=Masked Autoregressive Flow for Density Estimation|journal=NIPS|year=2017}}</ref> || 2017 || 全自回归条件 || 密度评估更灵活,但采样需顺序进行
 
|-
 
|-
 
| '''Glow'''<ref name="Glow2018" /> || 2018 || 可逆 1×1 卷积 + actnorm || 刷新了图像生成基准
 
| '''Glow'''<ref name="Glow2018" /> || 2018 || 可逆 1×1 卷积 + actnorm || 刷新了图像生成基准
 
|-
 
|-
−
| '''[[FFJORD]]'''(Free-form Jacobian of Reversible Dynamics)<ref name="FFJORD2019">{{cite journal|author1=Grathwohl W.|author2=Chen R. T. Q.|author3=Bettencourt J.|author4=Sutskever I.|author5=Duvenaud D.|title=FFJORD: Free-form Continuous Dynamics for Scalable Reversible Generative Models|journal=ICLR|year=2019}}</ref> || 2019 || 连续时间流 + [[常微分方程]](Ordinary Differential Equation,ODE)描述 || 消除架构约束,但需数值积分
+
| '''FFJORD'''(Free-form Jacobian of Reversible Dynamics)<ref name="FFJORD2019">{{cite journal|author1=Grathwohl W.|author2=Chen R. T. Q.|author3=Bettencourt J.|author4=Sutskever I.|author5=Duvenaud D.|title=FFJORD: Free-form Continuous Dynamics for Scalable Reversible Generative Models|journal=ICLR|year=2019}}</ref> || 2019 || 连续时间流 + 常微分方程(Ordinary Differential Equation,ODE)描述 || 消除架构约束,但需数值积分
 
|-
 
|-
−
| '''Flow++'''<ref name="FlowPlusPlus2019" /> || 2019 || [[变分去量化]] + Logistic 混合 CDF 耦合 || 改进 RealNVP 在密度估计、[[去量化]]和耦合函数上的短板
+
| '''Flow++'''<ref name="FlowPlusPlus2019" /> || 2019 || 变分去量化 + Logistic 混合 CDF 耦合 || 改进 RealNVP 在密度估计、去量化和耦合函数上的短板
 
|-
 
|-
−
| '''Residual Flows'''<ref name="ResidualFlows2019">{{cite journal|author1=Chen R. T. Q.|author2=Behrmann J.|author3=Duvenaud D.|author4=Jacobsen J.-H.|title=Residual Flows for Invertible Generative Modeling|journal=NeurIPS|year=2019}}</ref> || 2019 || [[无偏行列式估计]] || 将残差网络引入可逆建模
+
| '''Residual Flows'''<ref name="ResidualFlows2019">{{cite journal|author1=Chen R. T. Q.|author2=Behrmann J.|author3=Duvenaud D.|author4=Jacobsen J.-H.|title=Residual Flows for Invertible Generative Modeling|journal=NeurIPS|year=2019}}</ref> || 2019 || 无偏行列式估计 || 将残差网络引入可逆建模
 
|}
 
|}
  
50

个编辑