| 第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> 共用一套参数,显著压缩模型规模。 |