更改

跳到导航 跳到搜索
添加5,507字节 、 2026年9月7日 (星期一)
术语规范:保留"基分布"译名,首次出现处加注(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'''('''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 flow anim.gif|缩略图|332x332像素|上图示意 RealNVP 的正向与反向流程:正向通过复合可逆变换将数据分布映射为标准高斯分布;反向则从高斯分布采样并逐层逆变换还原为数据。]]
 
[[文件:Realnvp flow anim.gif|缩略图|332x332像素|上图示意 RealNVP 的正向与反向流程:正向通过复合可逆变换将数据分布映射为标准高斯分布;反向则从高斯分布采样并逐层逆变换还原为数据。]]
   第5行: 第5行:  
= 历史渊源 =
 
= 历史渊源 =
 
​
 
​
−
RealNVP 建立在早期标准化流工作之上,其发展有两条主线。
+
RealNVP 的历史可以按"需求—框架—实现"三层来梳理:先有密度估计的建模需求与变量替换公式这一数学工具,再有标准化流框架的正式提出,最后才有 NICE、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>,研究者一直尝试用可逆变换将复杂数据"[[归一化]]"到简单分布。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 年代的独立成分分析(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>,都是这一思路的先驱。
 
​
 
​
    
​
 
​
−
第二条主线是耦合层的发明与升级。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),但表达能力因此受限。
+
'''框架''':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" />,"标准化流"一词由此流行。作为一种建模范式,标准化流只规定变换必须可逆、基分布必须指定、密度由变量替换公式计算,而不限定变换的具体结构——这为不同的实现方案留出了空间。
 
​
 
​
    
​
 
​
−
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 的优势。
+
'''实现''':最早可训练的深度实现是 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)证明:[[体积保持]]的流'''不是'''分布的通用逼近器(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 的多尺度架构如下图所示。输入图像 <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 是一类[[标准化流]]。标准化流是一类通过最大似然来估计分布的模型,其构造包含三个要素:一个可微的可逆映射、一个指定的基分布,以及由[[变量替换公式]]给出的精确密度。具体地,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 把若干可逆模块按顺序堆叠,形成从数据空间到潜在空间的完整映射。其网络主体由四个功能模块组成:'''[[仿射耦合层]]'''(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>,因此整体变换保持维度不变。这种分层设计的意图是:早期尺度保留高分辨率的局部细节,后期尺度处理低分辨率的全局结构,并通过逐步分解减少后续层的计算量。
 
​
 
​
   第41行: 第49行:  
由于每个压缩和分解步骤都要对空间或通道维度进行对半划分,各尺度的空间尺寸与通道数都必须是偶数;实际应用中通常把图像尺寸调整为偶数,或通过填充、裁剪等预处理满足该条件。
 
由于每个压缩和分解步骤都要对空间或通道维度进行对半划分,各尺度的空间尺寸与通道数都必须是偶数;实际应用中通常把图像尺寸调整为偶数,或通过填充、裁剪等预处理满足该条件。
 
​
 
​
−
[[文件:Realnvp multiscale.svg|缩略图|RealNVP 多尺度分层架构示意图。批量归一化(Batch Normalization,BN)为图中归一化操作的简写。|替代=|848x848px|居中]]
+
[[文件:realnvp_multiscale_v2.png|缩略图|RealNVP 多尺度分层架构示意图。每个尺度(Scale)内数据自上而下流动,尺度间自左向右推进。图中 Coupling 即正文的仿射耦合层(括号内 checkerboard、channel-wise 分别为棋盘掩码与通道级掩码),块内"→ BN"表示每个耦合层输出后接批量归一化;Squeeze 为压缩,Factor Out 为变量分解,Concatenation 为拼接;h⁽ⁱ⁾、z⁽ⁱ⁾ 与正文符号一致。|替代=|848x848px|居中]]
 
== [[仿射耦合层]]:可逆的"条件变形" ==
 
== [[仿射耦合层]]:可逆的"条件变形" ==
 
​
 
​
−
下图给出了仿射耦合层的前向流程。图中的耦合层块即仿射耦合层,它是 RealNVP 的基本可逆变换单元。[[文件:仿射耦合.png|缩略图|仿射耦合层示意图:正向(从左到右)将输入分块并变换,反向(从右到左)逐块还原。|替代=|626x626px]]{{NumBlk|:|
+
下图给出两个交替堆叠的仿射耦合层的前向流程。仿射耦合层是 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|:|
 
<math>
 
<math>
 
\begin{cases}
 
\begin{cases}
−
\mathbf{y}_{1:d} = \mathbf{x}_{1:d} \\[6pt]
+
\mathbf{y}_1 = \mathbf{x}_1 \\[6pt]
−
\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})
+
\mathbf{y}_2 = \mathbf{x}_2 \odot \exp\!\bigl(\mathbf{s}(\mathbf{x}_1)\bigr) + \mathbf{t}(\mathbf{x}_1)
 
\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{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{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>。此外,逆变换为:
 
​
 
​
 
{{NumBlk|:|
 
{{NumBlk|:|
 
<math>
 
<math>
 
\begin{cases}
 
\begin{cases}
−
\mathbf{x}_{1:d} = \mathbf{y}_{1:d} \\[6pt]
+
\mathbf{x}_1 = \mathbf{y}_1 \\[6pt]
−
\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)
+
\mathbf{x}_2 = \bigl(\mathbf{y}_2 - \mathbf{t}(\mathbf{y}_1)\bigr) \odot \exp\!\bigl(-\mathbf{s}(\mathbf{y}_1)\bigr)
 
\end{cases}
 
\end{cases}
 
</math>
 
</math>
第135行: 第143行:  
== 仿射耦合的雅可比行列式与可逆性 ==
 
== 仿射耦合的雅可比行列式与可逆性 ==
 
​
 
​
−
上一小节的结论适用于一切标准化流。RealNVP 要回答的问题是:如何构造一个既完全可逆、又满足行列式易算的变换?其答案就是仿射耦合层——它对前 <math>d</math> 维进行恒等映射,对后 <math>D-d</math> 维进行仿射映射,因而雅可比矩阵具有分块三角结构:
+
上一小节的结论适用于一切标准化流。RealNVP 要回答的问题是:如何构造一个既完全可逆、又满足行列式易算的变换?其答案就是仿射耦合层——它对被动半 <math>\mathbf{x}_1</math> 进行恒等映射,对主动半 <math>\mathbf{x}_2</math> 进行仿射映射。记被动半的维度为 <math>d</math>(主动半的维度为 <math>D-d</math>),则雅可比矩阵具有分块三角结构:
 
​
 
​
   第143行: 第151行:  
\begin{bmatrix}
 
\begin{bmatrix}
 
\mathbf{I}_d & \mathbf{0} \\[8pt]
 
\mathbf{I}_d & \mathbf{0} \\[8pt]
−
\dfrac{\partial \mathbf{y}_{d+1:D}}{\partial \mathbf{x}_{1:d}^\top} & \operatorname{diag}\!\bigl(\exp[\mathbf{s}(\mathbf{x}_{1:d})]\bigr)
+
\dfrac{\partial \mathbf{y}_2}{\partial \mathbf{x}_1^\top} & \operatorname{diag}\!\bigl(\exp[\mathbf{s}(\mathbf{x}_1)]\bigr)
 
\end{bmatrix}
 
\end{bmatrix}
 
</math>
 
</math>
第153行: 第161行:  
{{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:d})\right)
+
\det\!\left(\frac{\partial \mathbf{y}}{\partial \mathbf{x}^\top}\right) = \exp\!\left(\sum_{j=1}^{D-d} s_j(\mathbf{x}_1)\right)
 
</math>
 
</math>
 
|{{EquationRef|5}}}}
 
|{{EquationRef|5}}}}
第180行: 第188行:  
== 损失函数与[[最大似然训练]] ==
 
== 损失函数与[[最大似然训练]] ==
 
​
 
​
−
RealNVP 通过最大化数据[[对数似然]]来训练(这也是[[标准化流]]的通用训练方式),等价于最小化数据分布与模型分布的前向 [[KL 散度]](Kullback-Leibler divergence,KL):
+
RealNVP 通过最大化数据对数似然来训练(这也是标准化流的通用训练方式),等价于最小化数据分布与模型分布的前向 KL 散度(Kullback-Leibler divergence,KL):
 
​
 
​
 
{{NumBlk|:|
 
{{NumBlk|:|
第188行: 第196行:  
|{{EquationRef|6}}}}
 
|{{EquationRef|6}}}}
 
​
 
​
−
对于训练集 <math>\{\mathbf{x}^{(i)}\}_{i=1}^N</math>,使用[[蒙特卡洛近似]]:
+
对于训练集 <math>\{\mathbf{x}^{(i)}\}_{i=1}^N</math>,使用蒙特卡洛近似:
 
​
 
​
 
<math>
 
<math>
第195行: 第203行:  
​
 
​
 
损失函数包含两项:
 
损失函数包含两项:
−
* '''[[先验项]]''' <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 的应用对应着它的两个层面:作为完整的标准化流模型,它直接服务于[[密度估计]]、生成、[[异常检测]]与重建推断等任务;作为通用可逆部件,其[[仿射耦合层]]凭借解析可逆、雅可比行列式易算的性质,也被用于概率建模之外的场合。下文按此顺序介绍。
 
​
 
​
 
== 自然图像[[密度估计]]与生成 ==
 
== 自然图像[[密度估计]]与生成 ==
第237行: 第247行:  
== 在 [[NIS]]/[[NIS+]] 因果[[涌现]]框架中的应用 ==
 
== 在 [[NIS]]/[[NIS+]] 因果[[涌现]]框架中的应用 ==
 
​
 
​
−
在神经信息挤压器(Neural Information Squeezer,NIS)及其扩展 NIS+(Neural Information Squeezer Plus)中,RealNVP 以[[可逆神经网络]](Invertible Neural Networks,INN)作为编码器,实现微观状态到宏观状态的可逆[[粗粒化]]。粗粒化[[策略]]被建模为两阶段过程:
+
在神经信息挤压器(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 中的粗粒化[[策略]]被建模为两阶段过程:
 
​
 
​
 
# '''无损变换''':由 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>。'''该阶段信息不丢失'''。
第246行: 第256行:  
[[文件: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="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>:
+
NIS 论文给出选用 RealNVP 的三点依据<ref name="NIS2023" />:
 
# '''精确可逆性''':微观到潜在的变换不损失信息,信息丢弃量 <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> 共用一套参数,显著压缩模型规模。
50

个编辑

导航菜单