章节封面

《理解深度学习》第16章 标准化流 读书笔记

目录


开篇导语

  上一章我们学习了生成式对抗网络(GAN)。GAN虽然生成效果好,但训练不稳定、容易模式崩溃,而且不显式定义数据的似然函数,难以评估和比较。本章我们学习另一种生成模型——标准化流(Normalizing Flows)。

  标准化流的核心思想非常优雅:通过一系列可逆变换,将简单的已知分布(如标准正态分布)逐步变换为复杂的数据分布。因为每一步变换都是可逆的,我们可以精确计算变换后分布的概率密度(通过变量替换公式),从而精确计算数据的似然函数。这意味着标准化流可以用最大似然来训练,训练稳定,没有模式崩溃问题。

  标准化流的名字来源于"流"(Flow)的概念——数据在变换过程中像水流一样流动,每一步变换都保持概率质量守恒(就像水流不可压缩一样)。"标准化"指的是我们从标准正态分布出发,通过流变换得到目标分布。

  本章我们将从一维示例开始,理解变量替换公式的核心思想;然后推广到一般多维情况;接着学习几种重要的可逆网络层(NICE、RealNVP、Glow);然后看多尺度架构;最后讨论标准化流的应用。


16.1 一维示例

变量替换公式

从简单分布到复杂分布

  假设我们有一个简单的已知分布,比如标准正态分布 z ∼ N ( 0 , 1 ) z \sim \mathcal{N}(0,1) z∼N(0,1),其概率密度函数为:

p z ( z ) = 1 2 π e − z 2 2 p_z(z) = \frac{1}{\sqrt{2\pi}} e^{-\frac{z^2}{2}} pz​(z)=2π ​1​e−2z2​

  现在我们想通过一个可逆函数 f f f 将 z z z 变换为 x = f ( z ) x = f(z) x=f(z),使得 x x x 服从我们想要的复杂分布 p x ( x ) p_x(x) px​(x)。因为 f f f 是可逆的,我们可以写成 z = f − 1 ( x ) z = f^{-1}(x) z=f−1(x)。

变量替换公式

  关键问题是:变换后的分布 p x ( x ) p_x(x) px​(x) 是什么?答案由**变量替换公式(Change of Variables Formula)**给出:

p x ( x ) = p z ( f − 1 ( x ) ) ⋅ ∣ d d x f − 1 ( x ) ∣ p_x(x) = p_z(f^{-1}(x)) \cdot \left|\frac{d}{dx} f^{-1}(x)\right| px​(x)=pz​(f−1(x))⋅ ​dxd​f−1(x) ​

  或者等价地,用前向变换 x = f ( z ) x = f(z) x=f(z) 表示:

p x ( x ) = p z ( z ) ⋅ ∣ d z d x ∣ = p z ( z ) ⋅ ∣ d f d z ∣ − 1 p_x(x) = p_z(z) \cdot \left|\frac{dz}{dx}\right| = p_z(z) \cdot \left|\frac{df}{dz}\right|^{-1} px​(x)=pz​(z)⋅ ​dxdz​ ​=pz​(z)⋅ ​dzdf​ ​−1

  其中 ∣ d f d z ∣ \left|\frac{df}{dz}\right| ​dzdf​ ​ 是变换 f f f 的导数的绝对值,叫做雅可比行列式(Jacobian Determinant)(在一维情况下就是导数的绝对值)。

直观理解

  变量替换公式的直观理解是:概率质量守恒。如果变换 f f f 在某个区域拉伸了空间(导数大于1),那么该区域的概率密度就会相应减小(因为同样的概率质量分布在更大的区域上)。反之,如果变换压缩了空间(导数小于1),概率密度就会增大。雅可比行列式的绝对值正好衡量了这种空间拉伸/压缩的程度。

简单示例:线性变换

  考虑一个简单的线性变换 x = 2 z + 1 x = 2z + 1 x=2z+1。这个变换的导数是 d x d z = 2 \frac{dx}{dz} = 2 dzdx​=2,所以逆变换的导数是 d z d x = 1 2 \frac{dz}{dx} = \frac{1}{2} dxdz​=21​。

  如果 z ∼ N ( 0 , 1 ) z \sim \mathcal{N}(0,1) z∼N(0,1),那么变换后的分布为:

p x ( x ) = p z ( x − 1 2 ) ⋅ 1 2 = 1 2 2 π e − ( x − 1 ) 2 8 p_x(x) = p_z\left(\frac{x-1}{2}\right) \cdot \frac{1}{2} = \frac{1}{2\sqrt{2\pi}} e^{-\frac{(x-1)^2}{8}} px​(x)=pz​(2x−1​)⋅21​=22π ​1​e−8(x−1)2​

  这正是 N ( 1 , 4 ) \mathcal{N}(1, 4) N(1,4) 的概率密度函数——均值为1,方差为4。和我们的直觉一致:缩放2倍导致方差变为4倍,平移1导致均值变为1。


16.2 一般情况

标准化流概念

多维变量替换公式

  将一维情况推广到多维。设 z ∈ R D z \in \mathbb{R}^D z∈RD 是简单分布的随机变量, f : R D → R D f: \mathbb{R}^D \to \mathbb{R}^D f:RD→RD 是可逆变换, x = f ( z ) x = f(z) x=f(z)。

  多维变量替换公式为:

p x ( x ) = p z ( f − 1 ( x ) ) ⋅ ∣ det ⁡ ( ∂ f − 1 ( x ) ∂ x ) ∣ p_x(x) = p_z(f^{-1}(x)) \cdot \left|\det \left(\frac{\partial f^{-1}(x)}{\partial x}\right)\right| px​(x)=pz​(f−1(x))⋅ ​det(∂x∂f−1(x)​) ​

  其中 det ⁡ ( ∂ f − 1 ∂ x ) \det\left(\frac{\partial f^{-1}}{\partial x}\right) det(∂x∂f−1​) 是逆变换的雅可比矩阵的行列式。雅可比矩阵 J f J_f Jf​ 定义为:

J f = ∂ f ∂ z = ( ∂ f 1 ∂ z 1 ⋯ ∂ f 1 ∂ z D ⋮ ⋱ ⋮ ∂ f D ∂ z 1 ⋯ ∂ f D ∂ z D ) J_f = \frac{\partial f}{\partial z} = \begin{pmatrix} \frac{\partial f_1}{\partial z_1} & \cdots & \frac{\partial f_1}{\partial z_D} \\ \vdots & \ddots & \vdots \\ \frac{\partial f_D}{\partial z_1} & \cdots & \frac{\partial f_D}{\partial z_D} \end{pmatrix} Jf​=∂z∂f​= ​∂z1​∂f1​​⋮∂z1​∂fD​​​⋯⋱⋯​∂zD​∂f1​​⋮∂zD​∂fD​​​ ​

  雅可比行列式的绝对值 ∣ det ⁡ J f ∣ |\det J_f| ∣detJf​∣ 衡量了变换在局部对体积的缩放程度。

标准化流的一般框架

  标准化流通过堆叠一系列可逆变换 f 1 , f 2 , … , f K f_1, f_2, \ldots, f_K f1​,f2​,…,fK​ 来构建复杂的变换:

z K = f K ∘ f K − 1 ∘ ⋯ ∘ f 1 ( z 0 ) z_K = f_K \circ f_{K-1} \circ \cdots \circ f_1(z_0) zK​=fK​∘fK−1​∘⋯∘f1​(z0​)

  其中 z 0 ∼ p z 0 z_0 \sim p_{z_0} z0​∼pz0​​ 是简单的基础分布(通常是标准正态分布), z K = x z_K = x zK​=x 是目标数据。

  因为每一步变换都是可逆的,整个变换也是可逆的。根据链式法则,总的对数雅可比行列式是各步对数雅可比行列式之和:

log ⁡ ∣ det ⁡ ∂ z K ∂ z 0 ∣ = ∑ k = 1 K log ⁡ ∣ det ⁡ ∂ z k ∂ z k − 1 ∣ \log \left|\det \frac{\partial z_K}{\partial z_0}\right| = \sum_{k=1}^{K} \log \left|\det \frac{\partial z_k}{\partial z_{k-1}}\right| log ​det∂z0​∂zK​​ ​=k=1∑K​log ​det∂zk−1​∂zk​​ ​

  因此,数据的对数似然为:

log ⁡ p x ( x ) = log ⁡ p z 0 ( z 0 ) + ∑ k = 1 K log ⁡ ∣ det ⁡ ∂ z k ∂ z k − 1 ∣ \log p_x(x) = \log p_{z_0}(z_0) + \sum_{k=1}^{K} \log \left|\det \frac{\partial z_k}{\partial z_{k-1}}\right| logpx​(x)=logpz0​​(z0​)+k=1∑K​log ​det∂zk−1​∂zk​​ ​

  其中 z 0 = f 1 − 1 ∘ ⋯ ∘ f K − 1 ( x ) z_0 = f_1^{-1} \circ \cdots \circ f_K^{-1}(x) z0​=f1−1​∘⋯∘fK−1​(x)。

训练目标

  标准化流的训练目标是最大化数据的对数似然(等价于最小化负对数似然NLL):

L = − E x ∼ p d a t a [ log ⁡ p x ( x ) ] \mathcal{L} = -\mathbb{E}_{x \sim p_{data}}[\log p_x(x)] L=−Ex∼pdata​​[logpx​(x)]

  因为我们可以精确计算对数似然(不需要变分下界或对抗训练),所以标准化流的训练非常稳定,直接用梯度下降优化即可。

标准化流的关键设计要求

  要构建一个有效的标准化流,每一步变换 f k f_k fk​ 需要满足:

  1. 可逆性:变换必须是双射(一一对应),这样才能从数据空间反推回隐空间。
  2. 雅可比行列式易于计算:因为训练时需要计算每一步的对数雅可比行列式,所以它必须计算高效(最好是 O ( D ) O(D) O(D) 而不是 O ( D 3 ) O(D^3) O(D3))。
  3. 表达能力:堆叠足够多的变换后,应该能拟合任意复杂的分布。

16.3 可逆网络层

仿射耦合层

  设计满足上述要求的可逆变换是标准化流的核心研究问题。下面介绍几种重要的可逆网络层。

NICE:非线性独立分量估计

  NICE(Non-linear Independent Components Estimation) 是最早的标准化流架构之一。它提出了加性耦合层(Additive Coupling Layer)。

  加性耦合层将输入 x x x 分成两部分 x A x_A xA​ 和 x B x_B xB​:

  • x A x_A xA​ 保持不变: y A = x A y_A = x_A yA​=xA​
  • x B x_B xB​ 加上一个从 x A x_A xA​ 计算出的平移项: y B = x B + m ( x A ) y_B = x_B + m(x_A) yB​=xB​+m(xA​)

  其中 m m m 是任意神经网络(不需要可逆)。

  这个变换的雅可比矩阵是下三角矩阵(因为 y A y_A yA​ 只依赖 x A x_A xA​, y B y_B yB​ 依赖 x A x_A xA​ 和 x B x_B xB​,但对 x B x_B xB​ 的导数是单位矩阵),所以雅可比行列式为1!这意味着加性耦合层不改变概率密度,只是平移分布。

  逆变换也很简单: x A = y A x_A = y_A xA​=yA​, x B = y B − m ( y A ) x_B = y_B - m(y_A) xB​=yB​−m(yA​)。

RealNVP:实值非体积保持

  RealNVP(Real-valued Non-Volume Preserving) 在NICE的基础上扩展为仿射耦合层(Affine Coupling Layer),同时包含缩放和平移:

y A = x A y_A = x_A yA​=xA​
y B = x B ⊙ exp ⁡ ( s ( x A ) ) + t ( x A ) y_B = x_B \odot \exp(s(x_A)) + t(x_A) yB​=xB​⊙exp(s(xA​))+t(xA​)

  其中 s ( x A ) s(x_A) s(xA​) 是缩放因子(log-scale), t ( x A ) t(x_A) t(xA​) 是平移因子,都由神经网络从 x A x_A xA​ 计算得到。 ⊙ \odot ⊙ 表示逐元素乘法。

  仿射耦合层的雅可比行列式为:

det ⁡ J = ∏ i exp ⁡ ( s i ( x A ) ) = exp ⁡ ( ∑ i s i ( x A ) ) \det J = \prod_{i} \exp(s_i(x_A)) = \exp\left(\sum_i s_i(x_A)\right) detJ=i∏​exp(si​(xA​))=exp(i∑​si​(xA​))

  所以对数雅可比行列式就是 ∑ i s i ( x A ) \sum_i s_i(x_A) ∑i​si​(xA​),计算非常高效( O ( D ) O(D) O(D))。

  逆变换: x A = y A x_A = y_A xA​=yA​, x B = ( y B − t ( y A ) ) ⊙ exp ⁡ ( − s ( y A ) ) x_B = (y_B - t(y_A)) \odot \exp(-s(y_A)) xB​=(yB​−t(yA​))⊙exp(−s(yA​))。

  RealNVP通过交替交换 x A x_A xA​ 和 x B x_B xB​ 的角色(即每一层耦合不同的部分),确保所有维度都能被充分变换。

Glow:可逆1×1卷积

  Glow 在RealNVP的基础上引入了可逆1×1卷积(Invertible 1×1 Convolution),用于在通道维度上进行可逆的线性混合。

  普通的1×1卷积是一个线性变换 y = W x y = Wx y=Wx,其中 W W W 是 C × C C \times C C×C 的权重矩阵。只要 W W W 是可逆的(行列式非零),这个变换就是可逆的,逆变换为 x = W − 1 y x = W^{-1}y x=W−1y。

  1×1卷积的雅可比行列式就是 det ⁡ ( W ) \det(W) det(W),对数雅可比行列式是 log ⁡ ∣ det ⁡ ( W ) ∣ \log|\det(W)| log∣det(W)∣。

  Glow还引入了ActNorm(Activation Normalization),一种类似BatchNorm但可逆的归一化方法,用每个通道的缩放和平移参数对激活进行归一化。

  Glow的基本模块是:ActNorm → 可逆1×1卷积 → 仿射耦合层。堆叠多个这样的模块就构成了Glow流。

其他可逆变换

  1. 平面流(Planar Flows)/ 径向流(Radial Flows):早期的流模型,用简单的参数化变换,但表达能力有限。
  2. 自回归流(Autoregressive Flows):如MAF、IAF,用自回归模型参数化变换,表达能力强但推理/训练速度慢。
  3. 残差流(Residual Flows):用残差连接构建可逆变换,需要约束Lipschitz常数保证可逆性。
  4. 连续时间流(Continuous-time Flows):如FFJORD,用神经网络参数化微分方程,通过ODE求解器实现可逆变换。

16.4 多尺度流

多尺度流

  对于高维数据(如图像),直接在全分辨率上应用流变换计算量很大。多尺度架构(Multi-scale Architecture) 通过逐步降低分辨率、在不同尺度上应用流变换,大大提高了效率。

多尺度架构的基本思想

  多尺度架构的核心是** squeeze(压缩)和 split(分割)**操作:

  1. Squeeze操作:将空间维度的信息转移到通道维度。例如,将 H × W × C H \times W \times C H×W×C 的特征图压缩为 ( H / 2 ) × ( W / 2 ) × ( 4 C ) (H/2) \times (W/2) \times (4C) (H/2)×(W/2)×(4C),通过将每个 2 × 2 2 \times 2 2×2 的空间块展开为4个通道。这样空间分辨率减半,通道数变为4倍,总维度不变。

  2. Split操作:在每个尺度的流变换之后,将特征图分成两部分:一部分直接输出(作为该尺度的隐变量),另一部分继续进入下一个尺度的流变换。

  通过这种方式,模型在不同的空间尺度上学习不同层次的特征:粗尺度捕捉全局结构(如物体的姿态、形状),细尺度捕捉局部细节(如纹理、边缘)。

Glow的多尺度架构

  Glow使用了多尺度架构,每个尺度包含:

  1. 若干个流步骤(ActNorm + 可逆1×1卷积 + 仿射耦合层)
  2. Split操作:将一半通道输出为隐变量,另一半继续
  3. Squeeze操作:压缩空间维度,增加通道数

  Glow在多个尺度上重复这个过程,最后一个尺度不进行split,所有通道都输出为隐变量。

多尺度架构的优势

  1. 计算效率:在低分辨率上应用流变换,计算量大大减少。
  2. 层次化表示:不同尺度捕捉不同层次的特征,类似于CNN的层次化特征提取。
  3. 生成质量:多尺度架构能生成更高质量、更高分辨率的图像。
  4. 可控生成:可以通过操纵不同尺度的隐变量来控制生成图像的不同属性(粗尺度控制全局结构,细尺度控制局部细节)。

16.5 应用

密度估计

  标准化流最直接的应用是密度估计(Density Estimation)。因为流可以精确计算数据的似然,所以它非常适合用于需要精确概率估计的任务,如:

  • 异常检测:低似然的样本可能是异常
  • 数据压缩:用概率模型进行熵编码
  • 生成建模:从学习到的分布中采样生成新数据

图像生成

  Glow等多尺度流模型在图像生成上取得了很好的效果。Glow能生成高质量的人脸图像,并且支持语义操纵——通过在隐空间中进行有方向的插值,可以平滑地改变人脸的属性(如年龄、性别、表情、发型等)。

  和GAN相比,流模型的优势是训练稳定、有精确似然、隐空间结构良好(适合插值和操纵);劣势是生成质量通常略逊于最好的GAN和扩散模型,而且推理时需要计算逆变换(虽然流的逆变换通常也很高效)。

变分推断

  标准化流可以用于变分推断(Variational Inference),作为变分后验的灵活分布族。在VAE中,通常用简单的高斯分布作为后验近似,但这限制了表达能力。用标准化流作为后验,可以得到更灵活、更准确的后验近似,称为归一化流变分推断(Normalizing Flow Variational Inference)。

其他应用

  1. 语音合成:用流模型生成高质量语音(如WaveGlow、FloWaveNet)。
  2. 分子生成:用流模型生成新的药物分子。
  3. 时间序列建模:用流模型建模时间序列的分布。
  4. 强化学习:用流模型建模策略分布或世界模型。
  5. 物理仿真:用流模型学习物理系统的分布。

16.6 本章小结

  本章我们系统学习了标准化流。核心要点如下:

  1. 标准化流通过一系列可逆变换将简单分布映射为复杂分布。因为每一步变换可逆,可以精确计算变换后分布的概率密度,从而用最大似然训练。

  2. 变量替换公式是标准化流的数学基础: p x ( x ) = p z ( f − 1 ( x ) ) ⋅ ∣ det ⁡ J f − 1 ∣ p_x(x) = p_z(f^{-1}(x)) \cdot |\det J_{f^{-1}}| px​(x)=pz​(f−1(x))⋅∣detJf−1​∣。雅可比行列式衡量变换对体积的缩放程度,保证概率质量守恒。

  3. 堆叠多个可逆变换构成流,总的对数雅可比行列式是各步之和。训练目标是最大化数据对数似然(最小化NLL)。

  4. 可逆网络层的设计是核心:NICE提出加性耦合层(雅可比行列式为1),RealNVP扩展为仿射耦合层(同时缩放和平移,对数雅可比高效计算),Glow引入可逆1×1卷积和ActNorm。

  5. 仿射耦合层将输入分成两部分,一部分保持不变,另一部分进行仿射变换(缩放+平移),变换参数由不变部分通过神经网络计算。雅可比矩阵是三角矩阵,行列式高效计算。

  6. 多尺度架构通过squeeze和split操作,在不同空间尺度上应用流变换,提高计算效率,学习层次化表示。粗尺度捕捉全局结构,细尺度捕捉局部细节。

  7. 标准化流的优势:训练稳定(最大似然)、精确似然、可逆(可精确采样和推断)、隐空间结构良好(适合插值和操纵)。劣势:生成质量通常略逊于GAN和扩散模型,对高维数据计算量较大。

  8. 应用包括:密度估计、图像生成和语义操纵、变分推断(灵活后验)、语音合成、分子生成、时间序列建模等。


代码实验结果

  我们编写了完整的Python代码,从零实现了标准化流,包括变量替换公式验证、RealNVP仿射耦合层、以及堆叠多个耦合层的标准化流。以下是真实运行结果。

实验1:变量替换公式验证(一维)

  • 原始分布: x ∼ N ( 0 , 1 ) x \sim \mathcal{N}(0,1) x∼N(0,1)
  • 变换: y = 2 x + 1 y = 2x + 1 y=2x+1(缩放2,平移1)
  • 理论结果: y ∼ N ( 1 , 4 ) y \sim \mathcal{N}(1, 4) y∼N(1,4)
原始分布 x ~ N(0,1): 均值=-0.0021, 方差=1.0068
变换后 y=2x+1 ~ N(1,4): 均值=0.9957, 方差=4.0273

在y=1.0处验证变量替换公式:
  理论密度 N(1,4): 0.199471
  变量替换计算: 0.199471
  两者一致: True

实验2:RealNVP仿射耦合层实现与可逆性验证

  • 输入维度:4
  • 隐藏层维度:32
  • 测试样本数:5
输入形状: (5, 4)
输出形状: (5, 4)
log_det形状: (5,)
重构误差(验证可逆性): 1.11e-16
可逆性验证通过: True

实验3:标准化流训练(二维环形分布)

  • 流结构:6个仿射耦合层,维度=2,隐藏层=32
  • 目标分布:二维环形分布(半径2.0,标准差0.3)
  • 训练轮次:200,批次大小256,学习率0.01
Epoch 50:  NLL损失=3.8884
Epoch 100: NLL损失=3.9009
Epoch 150: NLL损失=3.8700
Epoch 200: NLL损失=3.8923

实验4:生成结果评估

生成样本均值: [-0.0439, 0.0295]
目标样本均值: [-0.0246, -0.0193]
生成样本方差: [1.0027, 0.9325]
目标样本方差: [2.0087, 2.0380]

结果可视化

标准化流实验结果

结果分析

  1. 变量替换公式验证通过:在y=1.0处,理论密度N(1,4)=0.199471,通过变量替换公式计算的结果也是0.199471,两者完全一致。这验证了变量替换公式的正确性——变换后的概率密度等于原始密度乘以逆变换导数的绝对值。

  2. RealNVP仿射耦合层可逆性验证通过:前向变换后再逆向变换,重构误差仅1.11e-16(接近机器精度),说明仿射耦合层是完全可逆的。这是标准化流的核心要求——每一步变换必须可逆,才能从数据空间反推回隐空间计算似然。

  3. 对数雅可比行列式高效计算:仿射耦合层的对数雅可比行列式就是缩放因子之和,计算复杂度为O(D),不需要计算完整的雅可比矩阵和行列式(O(D³))。这使得标准化流的训练非常高效。

  4. 标准化流训练稳定:和GAN的训练不稳定不同,标准化流用最大似然训练,损失曲线平滑(NLL从3.89波动到3.87,没有剧烈震荡)。这是标准化流的一大优势——训练目标明确,优化稳定。

  5. 简化实现的局限性:这个简化的流模型用数值梯度(随机扰动)而不是自动微分来更新参数,训练轮次也较少(200轮),所以生成结果还不够完美——生成样本的方差(约1.0)小于目标分布的方差(约2.0),说明流还没有完全学到环形分布的形状。在实际应用中,使用自动微分框架(PyTorch/TensorFlow)、更多的耦合层、更长的训练时间,可以得到更好的结果。

  6. 隐空间分布验证:从隐空间散点图可以看到,经过流变换后,目标分布(环形)被映射到接近标准正态的隐空间分布。这正是标准化流的目标——将复杂的数据分布变换为简单的标准正态分布,使得似然计算变得简单。


本章核心总结

第16章思维导图

  一句话概括:标准化流通过一系列可逆变换将简单分布映射为复杂分布,利用变量替换公式精确计算似然,用最大似然稳定训练,仿射耦合层和多尺度架构是核心设计。

标准化流核心公式清单:

概念公式
变量替换公式 p x ( x ) = p z ( f − 1 ( x ) ) ⋅ ∣ det ⁡ J f − 1 ∣ p_x(x) = p_z(f^{-1}(x)) \cdot |\det J_{f^{-1}}| px​(x)=pz​(f−1(x))⋅∣detJf−1​∣
流的对数似然 log ⁡ p x ( x ) = log ⁡ p z 0 ( z 0 ) + ∑ k log ⁡ ∣ det ⁡ J f k ∣ \log p_x(x) = \log p_{z_0}(z_0) + \sum_k \log|\det J_{f_k}| logpx​(x)=logpz0​​(z0​)+∑k​log∣detJfk​​∣
仿射耦合层 y A = x A ,   y B = x B ⊙ exp ⁡ ( s ( x A ) ) + t ( x A ) y_A = x_A,\ y_B = x_B \odot \exp(s(x_A)) + t(x_A) yA​=xA​, yB​=xB​⊙exp(s(xA​))+t(xA​)
仿射层log-det log ⁡ ∣ det ⁡ J ∣ = ∑ i s i ( x A ) \log|\det J| = \sum_i s_i(x_A) log∣detJ∣=∑i​si​(xA​)
训练目标 L = − E x [ log ⁡ p x ( x ) ] \mathcal{L} = -\mathbb{E}_{x}[\log p_x(x)] L=−Ex​[logpx​(x)]

结语

  本章我们系统学习了标准化流。从一维变量替换公式的直观理解,到多维一般情况的数学框架,再到NICE、RealNVP、Glow等可逆网络层的设计,然后学习了多尺度架构,最后讨论了标准化流的应用。标准化流以其优雅的数学基础、稳定的训练、精确的似然计算,在生成模型中占有独特的地位。

  标准化流的一个特点是它需要显式的可逆变换,这限制了可以使用的网络架构。下一章我们将学习另一种生成模型——变分自编码器(VAE)。VAE通过隐变量和变分推断来学习生成模型,不需要显式的可逆变换,而是用编码器近似后验分布,用解码器生成数据。VAE的隐空间结构良好,适合学习解耦表示,在表示学习和生成建模中都有广泛应用。

  下一章见!

更多推荐