| 第13行: |
第13行: |
| | 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 的优势。 |
| | | | |
| − | <!-- 图1:NICE 的加性耦合 vs RealNVP 的仿射耦合(2D 示意图) -->
| + | |
| | | | |
| | = 算法框架 = | | = 算法框架 = |
| 第19行: |
第19行: |
| | 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 是一类[[标准化流]]:它将一系列可逆映射 <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 把若干可逆模块按顺序堆叠,形成从数据空间到潜在空间的完整映射。其网络主体由四个功能模块组成:'''[[仿射耦合层]]'''(affine coupling layer)负责可逆的特征变换,每个耦合层输出后接'''[[批量归一化]]'''(batch normalization)以稳定训练;'''[[压缩]]'''(squeeze)负责降低空间分辨率并把信息重排到通道;'''[[变量分解]]'''(factor out)负责在每个尺度末尾抽取一部分变量作为潜在编码。其中,仿射耦合层通过空间[[棋盘掩码]](checkerboard masking)与[[通道级掩码]](channel-wise masking)实现,二者交替使用。 | + | RealNVP 把若干可逆模块按顺序堆叠,形成从数据空间到潜在空间的完整映射。其网络主体由四个功能模块组成:'''[[仿射耦合层]]'''(affine coupling layer)负责可逆的特征变换,每个耦合层输出后接'''[[批量归一化]]'''(batch normalization)以稳定训练;'''[[压缩]]'''(squeeze)负责降低空间分辨率并把信息重排到通道;'''[[变量分解]]'''(factor out)负责在每个尺度末尾抽取一部分变量作为潜在变量。其中,仿射耦合层通过空间[[棋盘掩码]](checkerboard masking)与[[通道级掩码]](channel-wise masking)实现,二者交替使用。 |
| | | | |
| − | 图 4 给出了整体的多尺度架构。如图所示,输入图像 <math>\mathbf{x}</math> 首先进入第一层 Scale 1。每个非末尺度内部依次经过 3 个空间棋盘掩码的耦合层(每个耦合层输出后接批量[[归一化]])、压缩块、再 3 个通道级掩码的耦合层(同样每个后接批量归一化),最后通过变量分解把当前特征一分为二;末尺度则只经过 4 个空间棋盘掩码耦合层(同样每个后接批量归一化)就进行变量分解。一半结果作为 <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 的多尺度架构如下图所示。输入图像 <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>,因此整体变换保持维度不变。这种分层设计的意图是:早期尺度保留高分辨率的局部细节,后期尺度处理低分辨率的全局结构,并通过逐步分解减少后续层的计算量。 |
| | | | |
| | 正向流程可概括为: | | 正向流程可概括为: |
| 第34行: |
第34行: |
| | == [[仿射耦合层]]:可逆的"条件变形" == | | == [[仿射耦合层]]:可逆的"条件变形" == |
| | | | |
| − | 图 2 给出了仿射耦合层的前向流程。图中的耦合层块即仿射耦合层,它是 RealNVP 的基本可逆变换单元。[[文件:仿射耦合.png|缩略图|仿射耦合层示意图:正向(从左到右)将输入分块并变换,反向(从右到左)逐块还原。|替代=|626x626px]]{{NumBlk|:|
| + | 下图给出了仿射耦合层的前向流程。图中的耦合层块即仿射耦合层,它是 RealNVP 的基本可逆变换单元。[[文件:仿射耦合.png|缩略图|仿射耦合层示意图:正向(从左到右)将输入分块并变换,反向(从右到左)逐块还原。|替代=|626x626px]]{{NumBlk|:| |
| | <math> | | <math> |
| | \begin{cases} | | \begin{cases} |
| 第41行: |
第41行: |
| | \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>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|:| |
| 第56行: |
第56行: |
| | == 掩码卷积的两种分区模式 == | | == 掩码卷积的两种分区模式 == |
| | | | |
| − | 仿射耦合层要先把输入分成两部分。针对图像数据,RealNVP 使用两种掩码来决定划分方式:
| + | 仿射耦合层要先把输入分成两部分:保持不变的一半称为'''被动'''部分,被变换的一半称为'''主动'''部分。针对图像数据,RealNVP 使用两种掩码来决定划分方式: |
| | | | |
| | * '''空间棋盘掩码'''(checkerboard masking):像国际象棋棋盘一样,按坐标 <math>(i+j)</math> 的奇偶性决定像素是否属于"被动"集合。相邻像素被分到不同集合,能充分利用局部相关性。 | | * '''空间棋盘掩码'''(checkerboard masking):像国际象棋棋盘一样,按坐标 <math>(i+j)</math> 的奇偶性决定像素是否属于"被动"集合。相邻像素被分到不同集合,能充分利用局部相关性。 |
| | * '''[[通道级掩码]]'''(channel-wise masking):将前一半通道设为被动,后一半为主动。这通常在"压缩"操作后使用,因为此时空间分辨率已降低,通道间的语义分工更明确。 | | * '''[[通道级掩码]]'''(channel-wise masking):将前一半通道设为被动,后一半为主动。这通常在"压缩"操作后使用,因为此时空间分辨率已降低,通道间的语义分工更明确。 |
| | | | |
| − | 通过交替堆叠不同掩码的耦合层(至少三层),每个维度在不同层中分别作为被动变量和主动变量,信息得以充分混合。
| + | 通过交替堆叠使用不同掩码的耦合层,每个维度都能在不同层中分别充当被动与主动变量,信息得以充分混合。原论文的多尺度架构中,每个阶段固定使用 3 个耦合层<ref name="Dinh2017" />。 |
| | | | |
| − | <!-- 图3:Checkerboard masking 与 Channel-wise masking 的对比示意图 -->
| + | |
| | | | |
| | == [[多尺度架构]]:分层打包[[潜在变量]] == | | == [[多尺度架构]]:分层打包[[潜在变量]] == |
| | | | |
| − | 图 4 的多尺度架构依赖两个关键操作:[[压缩]]与[[变量分解]]。
| + | 如上图所示,多尺度架构依赖两个关键操作:[[压缩]]与[[变量分解]]。 |
| | | | |
| | '''压缩''':将空间上每个 <math>2\times2</math> 的小块在[[通道方向]]上重排,将 <math>s\times s\times c</math> 重排为 <math>s/2 \times s/2 \times 4c</math>。[[空间分辨率]]减半,通道数四倍——信息被重新排列,但没有丢失。 | | '''压缩''':将空间上每个 <math>2\times2</math> 的小块在[[通道方向]]上重排,将 <math>s\times s\times c</math> 重排为 <math>s/2 \times s/2 \times 4c</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>\mathbf{h}^{(i)}</math> 继续进入下一尺度。最终所有 <math>\mathbf{z}^{(i)}</math> 展平后拼接成完整的潜在变量 <math>\mathbf{z}</math>,其总维度与输入维度相等。 |
| | | | |
| | 该设计具有以下优势: | | 该设计具有以下优势: |
| 第80行: |
第80行: |
| | == [[批量归一化]]:训练深层的稳定器 == | | == [[批量归一化]]:训练深层的稳定器 == |
| | | | |
| − | 批量[[归一化]](Batch Normalization,BN)应用于每个[[耦合层]]的输出之后,用于稳定深层训练。 | + | 批量[[归一化]](Batch Normalization,BN)应用于每个[[耦合层]]的输出之后。 |
| | | | |
| | <math> | | <math> |
| 第86行: |
第86行: |
| | </math> | | </math> |
| | | | |
| − | 它的[[雅可比行列式]]是各维度缩放因子的乘积,可直接加入[[对数似然]]。此外,BN 起到训练深耦合层堆叠时的稳定作用——它抑制了由缩放参数 <math>\exp(\mathbf{s})</math> 引起的数值爆炸,使梯度稳定传播。
| + | 由于 BN 对每个维度独立地缩放和平移,它本身也是一个可逆变换:其雅可比矩阵为对角阵,[[雅可比行列式]]即各维度缩放因子的乘积,可直接加入[[对数似然]]——这使 BN 可以像耦合层一样作为流中的一层。引入 BN 主要是为了稳定深层训练:它抑制了由缩放参数 <math>\exp(\mathbf{s})</math> 引起的数值爆炸,使梯度稳定传播。使用 BN 有一个容易忽略的细节:训练时均值与方差是从当前这一批样本中估计的,因此单个样本的输出会依赖同批次的其他样本——此时的 BN 并不是严格意义上逐样本的可逆变换,其行列式也与整个批量耦合。只有在推理阶段改用训练过程中滑动平均得到的固定统计量,BN 才成为逐样本的、严格可逆的仿射变换,其行列式才能精确计入对数似然。换言之,用训练好的模型评估密度时若忘了做这一切换,同一个输入会因同批样本不同而得到不同的密度值,结果既不可复现也不正确。 |
| | | | |
| | | | |
| | = 数学原理 = | | = 数学原理 = |
| | + | |
| | + | RealNVP 的数学设计围绕一个核心目标展开:让概率密度的计算既精确又高效。这一目标由三个要素支撑——概率论中的变量替换公式给出精确似然的表达式;仿射耦合层的三角雅可比结构使行列式计算开销与维度成线性关系,从而保证可处理性;最大似然估计则提供直接的训练目标,无需近似下界或辅助网络。本节依次介绍这三个要素,并讨论训练目标中两项各自的含义与实际训练配置。 |
| | | | |
| | == 标准化流与[[变量替换公式]] == | | == 标准化流与[[变量替换公式]] == |
| 第115行: |
第117行: |
| | </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>,每层内部运算可并行,因此整体采样速度高于[[自回归模型]](autoregressive model,如 PixelRNN):这类模型按固定顺序逐维生成数据、每个维度以先前各维为条件,采样必须串行进行——这与流模型对所有维度同时变换形成鲜明对比。 |
| | | | |
| | == 仿射耦合的雅可比行列式与可逆性 == | | == 仿射耦合的雅可比行列式与可逆性 == |
| 第143行: |
第145行: |
| | 上述性质是 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> 求逆,只需按逆变换公式进行减法和除法即可。因此'''编码(求密度)和解码(采样)同样高效'''。 |
| | | | |
| | == 加性耦合、仿射耦合与体积保持 == | | == 加性耦合、仿射耦合与体积保持 == |
| 第192行: |
第194行: |
| | RealNVP 最直接的应用场景是连续高维数据的密度估计与无条件生成<ref name="Dinh2017" />。在图像生成任务中,模型一次性学习整个图像的联合分布,然后直接从标准高斯分布采样并通过逆映射得到新图像。由于采样过程不依赖逐像素的顺序解码,生成速度显著高于自回归模型。 | | RealNVP 最直接的应用场景是连续高维数据的密度估计与无条件生成<ref name="Dinh2017" />。在图像生成任务中,模型一次性学习整个图像的联合分布,然后直接从标准高斯分布采样并通过逆映射得到新图像。由于采样过程不依赖逐像素的顺序解码,生成速度显著高于自回归模型。 |
| | | | |
| − | 在 CelebA 人脸生成任务中,RealNVP 能够生成全局连贯、五官清晰的人脸样本(图 5)。与变分自编码器(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|替代=|居中]] |
| | == 异常检测 == | | == 异常检测 == |
| 第198行: |
第200行: |
| | RealNVP 能够给出数据的精确似然,这使它天然适合无监督异常检测:在仅含正常样本的数据上训练流模型,测试时似然较低或重建误差较大的样本即被视为异常。医学影像领域尤其典型——正常扫描数量庞大,而病变样本稀少且难以标注。 | | RealNVP 能够给出数据的精确似然,这使它天然适合无监督异常检测:在仅含正常样本的数据上训练流模型,测试时似然较低或重建误差较大的样本即被视为异常。医学影像领域尤其典型——正常扫描数量庞大,而病变样本稀少且难以标注。 |
| | | | |
| − | AE-FLOW 将自编码器与以 RealNVP 仿射耦合层为核心的标准化流瓶颈相结合,在胸部 X 光、OCT、皮肤镜与脑部 MRI 等多种医学影像数据上检测异常。模型同时利用重建误差与流模型给出的负对数似然构造异常分数:正常样本能被准确重建并获得较高似然,而病变区域会产生高重建残差与低似然<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>。 | + | 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>。 |
| | | | |
| − | 图 6 展示了 AE-FLOW 在胸部 X 光数据上的结果。左列为异常(肺炎)样本,右列为正常样本;每列自上而下依次为原图、重建图与残差图。正常样本的残差整体较暗,而异常样本的肺部区域出现明显亮斑,直观地反映了模型对异常模式的识别能力。
| + | 下图展示了 AE-FLOW 在胸部 X 光数据上的结果。左列为异常(肺炎)样本,右列为正常样本;每列自上而下依次为原图、重建图与残差图。正常样本的残差整体较暗,而异常样本的肺部区域出现明显亮斑,直观地反映了模型对异常模式的识别能力。 |
| | [[文件:aeflow_anomaly_detection.png|缩略图|AE-FLOW 在胸部 X 光上的异常检测结果。左列为异常(肺炎)样本,右列为正常样本;自上而下依次为原图、重建图与残差图。|替代=|360x360px|居中]] | | [[文件:aeflow_anomaly_detection.png|缩略图|AE-FLOW 在胸部 X 光上的异常检测结果。左列为异常(肺炎)样本,右列为正常样本;自上而下依次为原图、重建图与残差图。|替代=|360x360px|居中]] |
| | | | |
| 第211行: |
第213行: |
| | </math> | | </math> |
| | | | |
| − | 由于模型学习了全数据分布的精确密度,它能对任意形状的掩码产生合理的语义补全,而非仅记忆特定训练掩码<ref name="Dinh2017" />。在 LSUN 卧室数据集上,RealNVP 对缺失区域(红框)的补全结果在语义和视觉上均保持合理(图 7)。 | + | 由于模型学习了全数据分布的精确密度,它能对任意形状的掩码产生合理的语义补全,而非仅记忆特定训练掩码<ref name="Dinh2017" />。在 LSUN 卧室数据集上,RealNVP 对缺失区域(红框)的补全结果在语义和视觉上均保持合理(见下图)。 |
| | | | |
| | [[文件:realnvp_lsun_inpainting.png|缩略图|RealNVP 在 LSUN 卧室数据集上的图像修复结果:红框标出被遮挡的原始区域,模型仅根据剩余像素和全分布密度完成补全。|274x274px|链接=Special:FilePath/Realnvp_lsun_inpainting.png|替代=|居中]] | | [[文件:realnvp_lsun_inpainting.png|缩略图|RealNVP 在 LSUN 卧室数据集上的图像修复结果:红框标出被遮挡的原始区域,模型仅根据剩余像素和全分布密度完成补全。|274x274px|链接=Special:FilePath/Realnvp_lsun_inpainting.png|替代=|居中]] |
| 第219行: |
第221行: |
| | 在神经信息挤压器(Neural Information Squeezer,NIS)及其扩展 NIS+(Neural Information Squeezer Plus,NIS+)中,RealNVP 以可逆神经网络(Invertible Neural Networks,INN)作为编码器,实现微观状态到宏观状态的可逆粗粒化。粗粒化[[策略]]被建模为两阶段过程: | | 在神经信息挤压器(Neural Information Squeezer,NIS)及其扩展 NIS+(Neural Information Squeezer Plus,NIS+)中,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>。'''该阶段信息不丢失'''。 |
| | # '''信息丢弃''':投影算子 <math>\chi_{p,q}</math> 丢弃 <math>p-q</math> 个维度,得到宏观状态 <math>\mathbf{y}_t = \chi_{p,q}(\psi_\alpha(\mathbf{x}_t))</math>。 | | # '''信息丢弃''':投影算子 <math>\chi_{p,q}</math> 丢弃 <math>p-q</math> 个维度,得到宏观状态 <math>\mathbf{y}_t = \chi_{p,q}(\psi_\alpha(\mathbf{x}_t))</math>。 |
| | | | |
| − | 解码时,将宏观预测 <math>\hat{\mathbf{y}}_{t+1}</math> 与 <math>p-q</math> 维标准高斯噪声拼接,通过逆 INN <math>\psi_\alpha^{-1}</math> 重构微观状态。由于 RealNVP 的编码器与解码器只是方向反转,'''参数完全共享''',模型参数量直接减半,如下图所示。 | + | 解码时,将宏观预测 <math>\hat{\mathbf{y}}_{t+1}</math> 与 <math>p-q</math> 维标准高斯噪声拼接,通过逆 INN <math>\psi_\alpha^{-1}</math> 重构微观状态。由于 RealNVP 的编码器与解码器只是方向反转,'''参数完全共享'''——相较于使用独立编码器和解码器的方案,参数量减少一半,如下图所示。 |
| | | | |
| | [[文件:NIS+odd.png|缩略图|NIS/NIS+ 框架架构:RealNVP 的可逆神经网络(INN)实现编码器 φ 与解码器 φ†,信息丢弃与 EI 最大化在宏观动力学空间完成。|替代=|812x812px|居中]] | | [[文件:NIS+odd.png|缩略图|NIS/NIS+ 框架架构:RealNVP 的可逆神经网络(INN)实现编码器 φ 与解码器 φ†,信息丢弃与 EI 最大化在宏观动力学空间完成。|替代=|812x812px|居中]] |
| 第237行: |
第239行: |
| | == 优势 == | | == 优势 == |
| | | | |
| − | * '''精确且可处理的对数似然''':无需变分下界或对抗训练,直接给出数据的精确密度值,适用于异常检测、贝叶斯推断等需要显式概率的场景。 | + | * '''精确似然''':RealNVP 能直接算出任意数据点的精确概率密度——不像 VAE 只能优化似然的一个下界,也不像生成对抗网络(Generative Adversarial Network,GAN)完全不给密度。因此异常检测、贝叶斯推断等需要显式概率值的任务可以直接使用它<ref name="Papamakarios2021" />。 |
| − | * '''并行采样与推断''':编码和解码均可在维度上完全并行,速度高于自回归模型。 | + | * '''并行采样与推断''':自回归模型必须逐像素按顺序生成,而 RealNVP 编码和解码时所有维度同时计算,生成一张图像只需一次前向传播,采样速度快得多。 |
| − | * '''语义潜在空间''':同维度的潜在表示支持属性插值与操控,适合表示学习。 | + | * '''语义潜在空间''':由于潜在分布是简单的标准高斯、且映射光滑可逆,在潜在空间中做插值等简单操作,就对应图像上有语义的连续变化(如人脸姿态、表情的渐变),适合表示学习与属性操控<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)。提升表达能力可以直接借用主流的深层网络设计,而无须改动可逆框架本身。 |
| − | * '''综合多种模型特性''':兼具自回归模型的精确似然、VAE 的快速采样、以及不依赖固定重建损失的生成能力。 | + | * '''综合多种模型特性''':RealNVP 同时具备了此前难以兼得的能力——自回归模型的精确似然、VAE 的一步采样,以及不依赖固定重建损失的生成质量。 |
| | | | |
| | == 局限 == | | == 局限 == |
| | | | |
| − | * '''似然性能未达最优''':在 bits/dim 上仍略逊于 PixelRNN 等先进自回归基线。 | + | * '''似然性能未达最优''':RealNVP 对数据分布的拟合精度仍略逊于 PixelRNN 等自回归模型<ref name="Dinh2017" />。在以拟合精度为核心的任务(如密度估计、数据压缩)上,这是它的相对劣势——尽管它以并行采样换来了远快于对手的生成速度。 |
| − | * '''维度保持约束''':单层流无法降维,需通过多尺度架构的"分解"操作间接实现。 | + | * '''维度保持约束''':可逆变换要求输入与输出同维,因此 RealNVP 不能像自编码器那样把高维图像直接压缩成低维向量——潜在空间和数据空间一样大。所需的"降维"只能靠多尺度架构中的变量分解间接实现,即在各尺度逐步把一部分变量固定为潜在变量。 |
| − | * '''仿射耦合的表达力上限''':相比后续 Flow++ 的 Logistic 混合 CDF 耦合、Neural Spline Flows 的有理二次样条耦合,仿射函数形式较简单<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>。 | + | * '''仿射耦合的表达力上限''':仿射耦合每层只对一半变量做"缩放加平移",函数形式较为简单,拟合复杂分布往往需要堆叠很多层。后续工作把变换换成更灵活的函数形式——如 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" />。 |
| − | * '''分区固定性''':掩码模式在训练前固定,Glow(Generative Flow with Invertible 1×1 Convolutions,Glow)的可逆 <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,Glow)改用可学习的可逆 <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>。 |
| | + | * '''训练显存开销大''':标准反向传播需要保存每个耦合层的激活值,层数一多显存占用显著上升;RevNet 的可逆残差结构正是为省去这部分存储而提出的<ref name="RevNet2017">{{cite journal|author1=Gomez A. N.|author2=Ren M.|author3=Urtasun R.|author4=Grosse R. B.|title=The Reversible Residual Network: Backpropagation Without Storing Activations|journal=NeurIPS|year=2017|url=https://arxiv.org/abs/1707.04585}}</ref>。 |
| | + | * '''对分布外样本过度自信''':上文的异常检测应用依赖"异常样本的似然更低"这一假设,但后续研究发现这一假设未必成立:例如在 CIFAR-10 上训练的 RealNVP,会给截然不同的 SVHN 街景数字图像赋予'''更高'''的似然<ref name="Nalisnick2019">{{cite journal|author1=Nalisnick E.|author2=Matsukawa A.|author3=Teh Y. W.|author4=Gorur D.|author5=Lakshminarayanan B.|title=Do Deep Generative Models Know What They Don't Know?|journal=International Conference on Learning Representations (ICLR)|year=2019|url=https://arxiv.org/abs/1810.09136}}</ref>。似然高低与"是否属于训练分布"并不直接对应,因此基于似然的异常检测需要额外的校准手段。 |
| | | | |
| | == 与相关框架的关系 == | | == 与相关框架的关系 == |
| 第287行: |
第291行: |
| | * '''Draxler et al.'''(ICML 2024)<ref name="Draxler2024" />:证明耦合型标准化流(含 RealNVP)在良好条件下是分布普适的;体积保持流则不是,说明 NICE 存在理论局限。 | | * '''Draxler et al.'''(ICML 2024)<ref name="Draxler2024" />:证明耦合型标准化流(含 RealNVP)在良好条件下是分布普适的;体积保持流则不是,说明 NICE 存在理论局限。 |
| | | | |
| − | <!-- 图9:标准化流发展谱系简图 -->
| + | |
| | | | |
| | | | |