| 第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 的正向与反向流程:正向通过复合可逆变换将数据分布映射为标准高斯分布;反向则从高斯分布采样并逐层逆变换还原为数据。]] |
| 第19行: |
第17行: |
| | <!-- 图1:NICE 的加性耦合 vs RealNVP 的仿射耦合(2D 示意图) --> | | <!-- 图1:NICE 的加性耦合 vs RealNVP 的仿射耦合(2D 示意图) --> |
| | | | |
| − | = 主要内容 =
| + | = 算法框架 = |
| − | | |
| − | == 算法框架 ==
| |
| | | | |
| | RealNVP 的完整架构由四种模块递归堆叠而成:'''仿射耦合层'''、'''掩码卷积分区'''、'''多尺度压缩与分解''',以及'''耦合层批量归一化'''。正向传播(编码)流程为: | | RealNVP 的完整架构由四种模块递归堆叠而成:'''仿射耦合层'''、'''掩码卷积分区'''、'''多尺度压缩与分解''',以及'''耦合层批量归一化'''。正向传播(编码)流程为: |
| 第33行: |
第29行: |
| | 如上图所示,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>\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> 维"主动"(被变形): | | 仿射耦合层是 RealNVP 的基本单元。给定 <math>D</math> 维输入 <math>\mathbf{x}</math>,输入被分为两部分:前 <math>d</math> 维"被动"(不变),后 <math>D-d</math> 维"主动"(被变形): |
| 第61行: |
第57行: |
| | | | |
| | | | |
| − | === 掩码卷积的两种分区模式 ===
| + | == 掩码卷积的两种分区模式 == |
| | | | |
| | 上述将输入分成两部分的操作可以按不同方式实现。针对图像数据,RealNVP 设计了两种掩码: | | 上述将输入分成两部分的操作可以按不同方式实现。针对图像数据,RealNVP 设计了两种掩码: |
| 第72行: |
第68行: |
| | <!-- 图3:Checkerboard masking 与 Channel-wise masking 的对比示意图 --> | | <!-- 图3:Checkerboard masking 与 Channel-wise masking 的对比示意图 --> |
| | | | |
| − | === 多尺度架构:分层打包潜在变量 ===
| + | == 多尺度架构:分层打包潜在变量 == |
| | | | |
| | 直接对高维图像(如 <math>64\times64\times3</math>)进行全维度耦合计算代价较高。RealNVP 采用 VGG 网络"降采样同时加深通道"的策略,引入两个关键操作: | | 直接对高维图像(如 <math>64\times64\times3</math>)进行全维度耦合计算代价较高。RealNVP 采用 VGG 网络"降采样同时加深通道"的策略,引入两个关键操作: |
| 第87行: |
第83行: |
| | <!-- 图4:多尺度架构流程图 --> | | <!-- 图4:多尺度架构流程图 --> |
| | | | |
| − | === 批量归一化:训练深层的稳定器 ===
| + | == 批量归一化:训练深层的稳定器 == |
| | | | |
| | 在耦合层之间插入批量归一化(BatchNorm),对每个维度做线性缩放: | | 在耦合层之间插入批量归一化(BatchNorm),对每个维度做线性缩放: |
| 第97行: |
第93行: |
| | 它的雅可比行列式是各维度缩放因子的乘积,可直接加入对数似然。此外,BatchNorm 起到训练深耦合层堆叠时的稳定作用——它抑制了由缩放参数 <math>\exp(\mathbf{s})</math> 引起的数值爆炸,使梯度稳定传播。 | | 它的雅可比行列式是各维度缩放因子的乘积,可直接加入对数似然。此外,BatchNorm 起到训练深耦合层堆叠时的稳定作用——它抑制了由缩放参数 <math>\exp(\mathbf{s})</math> 引起的数值爆炸,使梯度稳定传播。 |
| | | | |
| − | == 数学原理 ==
| + | = 数学原理 = |
| | | | |
| − | === 标准化流与变量替换公式 ===
| + | == 标准化流与变量替换公式 == |
| | | | |
| | 标准化流的核心是概率论中的'''变量替换公式'''(change of variables)。设 <math>\mathbf{z} \sim p_Z(\mathbf{z})</math> 是已知先验(通常取标准正态 <math>\mathcal{N}(0, \mathbf{I})</math>),<math>f = g^{-1}</math> 是从数据 <math>\mathbf{x}</math> 到 <math>\mathbf{z}</math> 的可逆映射(编码器)。则 <math>\mathbf{x}</math> 的密度为: | | 标准化流的核心是概率论中的'''变量替换公式'''(change of variables)。设 <math>\mathbf{z} \sim p_Z(\mathbf{z})</math> 是已知先验(通常取标准正态 <math>\mathcal{N}(0, \mathbf{I})</math>),<math>f = g^{-1}</math> 是从数据 <math>\mathbf{x}</math> 到 <math>\mathbf{z}</math> 的可逆映射(编码器)。则 <math>\mathbf{x}</math> 的密度为: |
| 第125行: |
第121行: |
| | 采样时通过逆向进行:<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>,所有步骤均可并行。 |
| | | | |
| − | === 仿射耦合的雅可比行列式与可逆性 ===
| + | == 仿射耦合的雅可比行列式与可逆性 == |
| | | | |
| | 仿射耦合层对前 <math>d</math> 维进行恒等映射,对后 <math>D-d</math> 维进行仿射映射,因而雅可比矩阵具有分块三角结构: | | 仿射耦合层对前 <math>d</math> 维进行恒等映射,对后 <math>D-d</math> 维进行仿射映射,因而雅可比矩阵具有分块三角结构: |
| 第149行: |
第145行: |
| | 仿射耦合的逆变换为:对于公式 ({{EquationNote|1}}) 中的前向变换,经过代数变换即可得到公式 ({{EquationNote|2}}) 中的逆变换。无需对 <math>\mathbf{s}</math> 或 <math>\mathbf{t}</math> 求逆,只需按逆变换公式进行减法和除法即可。因此'''编码(求密度)和解码(采样)同样高效'''。 | | 仿射耦合的逆变换为:对于公式 ({{EquationNote|1}}) 中的前向变换,经过代数变换即可得到公式 ({{EquationNote|2}}) 中的逆变换。无需对 <math>\mathbf{s}</math> 或 <math>\mathbf{t}</math> 求逆,只需按逆变换公式进行减法和除法即可。因此'''编码(求密度)和解码(采样)同样高效'''。 |
| | | | |
| − | === 加性耦合、仿射耦合与体积保持 ===
| + | == 加性耦合、仿射耦合与体积保持 == |
| | | | |
| | 下表对比了三种耦合方式: | | 下表对比了三种耦合方式: |
| 第166行: |
第162行: |
| | 其中 <math>\odot</math> 为逐元素乘积,体现为空间的拉伸。NICE 的加性耦合对应于平移变换——只改变位置,不拉伸空间;RealNVP 的仿射耦合则允许缩放与平移的组合,更适合匹配真实数据中不同维度、不同尺度的变化。后续理论表明,缺乏这种"非体积保持"能力的流模型,在表达能力上存在本质限制<ref name="Draxler2024" />。 | | 其中 <math>\odot</math> 为逐元素乘积,体现为空间的拉伸。NICE 的加性耦合对应于平移变换——只改变位置,不拉伸空间;RealNVP 的仿射耦合则允许缩放与平移的组合,更适合匹配真实数据中不同维度、不同尺度的变化。后续理论表明,缺乏这种"非体积保持"能力的流模型,在表达能力上存在本质限制<ref name="Draxler2024" />。 |
| | | | |
| − | === 损失函数与最大似然训练 ===
| + | == 损失函数与最大似然训练 == |
| | | | |
| | RealNVP 通过最大化数据对数似然来训练,等价于最小化数据分布与模型分布的前向 KL 散度: | | RealNVP 通过最大化数据对数似然来训练,等价于最小化数据分布与模型分布的前向 KL 散度: |
| 第190行: |
第186行: |
| | '''实际训练配置''':Adam 优化器,权重衰减 <math>5\times10^{-5}</math>,批量大小 64,先验为标准高斯。图像数据通常先经 logit 变换 <math>\operatorname{logit}(\alpha + (1-\alpha)\mathbf{x}/256)</math> 处理,以消除像素边界的边界效应。 | | '''实际训练配置''':Adam 优化器,权重衰减 <math>5\times10^{-5}</math>,批量大小 64,先验为标准高斯。图像数据通常先经 logit 变换 <math>\operatorname{logit}(\alpha + (1-\alpha)\mathbf{x}/256)</math> 处理,以消除像素边界的边界效应。 |
| | | | |
| − | == 优缺点 ==
| + | = 优缺点 = |
| | | | |
| − | === 优势 ===
| + | == 优势 == |
| | | | |
| | * '''精确且可处理的对数似然''':无需变分下界或对抗训练,直接给出数据的精确密度值,适用于异常检测、贝叶斯推断等需要显式概率的场景。 | | * '''精确且可处理的对数似然''':无需变分下界或对抗训练,直接给出数据的精确密度值,适用于异常检测、贝叶斯推断等需要显式概率的场景。 |
| 第200行: |
第196行: |
| | * '''综合多种模型特性''':兼具自回归模型的精确似然、VAE 的快速采样、以及不依赖固定重建损失的生成能力。 | | * '''综合多种模型特性''':兼具自回归模型的精确似然、VAE 的快速采样、以及不依赖固定重建损失的生成能力。 |
| | | | |
| − | === 局限 ===
| + | == 局限 == |
| | | | |
| | * '''似然性能未达最优''':在 bits/dim 上仍略逊于 PixelRNN 等先进自回归基线。 | | * '''似然性能未达最优''':在 bits/dim 上仍略逊于 PixelRNN 等先进自回归基线。 |
| 第208行: |
第204行: |
| | * '''分区固定性''':掩码模式在训练前固定,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 的可逆 <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>。 |
| | | | |
| − | === 与相关框架的关系 ===
| + | == 与相关框架的关系 == |
| | | | |
| | RealNVP 在标准化流的发展中处于承上启下的位置: | | RealNVP 在标准化流的发展中处于承上启下的位置: |