A09 · 第 4 章 · 第二编 隐式与可逆生成

归一化流

以可逆映射和变量替换公式把简单基分布变为复杂连续密度,逐层计算 log-det Jacobian,分析仿射 coupling 与自回归流的求逆和并行代价,并界定精确似然、拓扑表达和数值稳定性的边界。

报告页面错误
预备知识生成对抗网络与散度最小化潜变量模型Jacobian 矩阵行列式

本章目标

  1. 从概率质量守恒推导一维和多维变量替换公式,并正确选择正向或逆向Jacobian。
  2. 把复合可逆层的log-det写成逐层和,计算仿射与三角Jacobian的精确似然。
  3. 写出仿射coupling的正向、逆向和log-det,解释分块与置换的作用。
  4. 比较不同自回归依赖方向在密度求值和采样上的串并行差异。
  5. 说明严格可逆、同维、连续密度和易算行列式对表达能力、数据处理与计算的限制。
页面阅读位置0% · 仅保存在此浏览器
章节未开始
本册完成进度0/6 章 · 0%
本页目录

用双射搬运概率质量

设基随机变量 ZRdZ\in\mathbb R^d 有可计算密度 pZp_Z,可逆可微映射 fθ:RdRdf_\theta:\mathbb R^d\to\mathbb R^d 产生 X=fθ(Z)X=f_\theta(Z)。给定数据 xx,必须能求 z=fθ1(x)z=f_\theta^{-1}(x),并计算相应Jacobian行列式。变量替换公式为

pX(x)=pZ(fθ1(x))detJfθ1(x).p_X(x)=p_Z\bigl(f_\theta^{-1}(x)\bigr) \left|\det J_{f_\theta^{-1}}(x)\right|.

若从正向 x=f(z)x=f(z) 计算,则

logpX(f(z))=logpZ(z)logdetJf(z).\log p_X(f(z))=\log p_Z(z)-\log\left|\det J_f(z)\right|.

负号来自体积扩张:同一概率质量铺到更大体积后,单位体积密度下降。绝对值不可省略,因为密度非负,而可逆映射可以翻转方向。流要求输入与输出同维;非方Jacobian没有通常的双射行列式公式。

一维时,长度小区间满足 dxf(z)dzdx\approx f'(z)dz,概率守恒 pX(x)dxpZ(z)dzp_X(x)dx\approx p_Z(z)dz,所以 pX(x)=pZ(z)/f(z)p_X(x)=p_Z(z)/|f'(z)|。多维行列式正是局部体积缩放的对应量。

基分布和映射方向都是模型定义

基分布常取各维独立标准正态,因为采样和对数密度简单;这不是变量替换公式的要求。换成逻辑斯蒂分布、混合分布或带条件参数的基分布,会改变模型的尾部、支持和似然。训练与采样必须使用同一基分布及同一标准化,不能训练时按标准正态算密度、部署时再从另一噪声分布取样。

文献和代码可能把 ff 定义为“数据到基变量”,也可能定义为“基变量到数据”。两种记法都成立,却让log-det符号和所谓正向、逆向交换。可靠账本应始终写出已知输入、输出和公式:若当前计算 z=f(x)z=f(x),则 logpX(x)=logpZ(z)+logdetJf(x)\log p_X(x)=\log p_Z(z)+\log|\det J_f(x)|;若当前计算 x=g(z)x=g(z),则使用 logpX(g(z))=logpZ(z)logdetJg(z)\log p_X(g(z))=\log p_Z(z)-\log|\det J_g(z)|

例 1:一维仿射流的精确对数密度

ZN(0,1)Z\sim\mathcal N(0,1),变换 X=2Z+3X=2Z+3。观测 x=5x=5 时,先求逆 z=(53)/2=1z=(5-3)/2=1;正向导数绝对值为二,故

logpX(5)=12log(2π)12(1)2log22.1121.\log p_X(5)=-\tfrac12\log(2\pi)-\tfrac12(1)^2-\log2\approx-2.1121.

相应密度约为 e2.1121=0.1210e^{-2.1121}=0.1210。若漏掉 log2-\log2,会得到标准正态在一处的密度约 0.24200.2420,总积分将变成二而非一。直接识别 XN(3,4)X\sim\mathcal N(3,4) 也得到同一结果。

复合层把对数体积变化相加

实际模型把多个双射复合:z0f1z1f2fKxz_0\xrightarrow{f_1}z_1\xrightarrow{f_2}\cdots\xrightarrow{f_K}x。链式法则给出

JfKf1(z0)=JfK(zK1)Jf1(z0).J_{f_K\circ\cdots\circ f_1}(z_0) =J_{f_K}(z_{K-1})\cdots J_{f_1}(z_0).

行列式乘法使总对数绝对行列式成为

logdetJf=k=1KlogdetJfk(zk1).\log|\det J_f|=\sum_{k=1}^K\log|\det J_{f_k}(z_{k-1})|.

这让每层只需报告自己的状态和log-det,避免形成整个高维Jacobian。若用一般稠密 d×dd\times d Jacobian,求行列式和求逆通常代价高;流层的核心设计目标就是让双射、逆和log-det都可计算。

对角、三角、正交和易分解的线性变换各有不同账本。对角层的log-det是各对角绝对值对数之和,但坐标间没有混合;三角层加入依赖而仍只需读对角;正交层体积绝对值为一,只旋转或反射;可逆稠密混合能一次连接全部坐标,却要用分解、参数化或缓存控制行列式成本。架构通常交替使用易缩放层与易混合层,而非期待一种层同时完成所有作用。

例 2:二维三角仿射变换

A=[2100.5],b=(1,1)T,x=Az+b.A=\begin{bmatrix}2&1\\0&0.5\end{bmatrix},\quad b=(1,-1)^\mathsf T, \qquad x=Az+b.

观测 x=(5,0)Tx=(5,0)^\mathsf T。先由第二行 0=0.5z210=0.5z_2-1z2=2z_2=2;第一行 5=2z1+z2+15=2z_1+z_2+1z1=1z_1=1。三角矩阵行列式为 2×0.5=12\times0.5=1,故log-det为零。

若基分布为二维标准正态,logpZ(1,2)=log(2π)(12+22)/24.3379\log p_Z(1,2)=-\log(2\pi)-(1^2+2^2)/2\approx-4.3379,数据对数密度相同。变换虽然同时剪切、一个方向扩张并在另一个方向收缩,但净体积不变;只看单个对角尺度会误判密度变化。

仿射coupling用保留分块换取易求逆

把输入分成 xa,xbx_a,x_b,一层仿射coupling写成

ya=xa,yb=xbexpsθ(xa)+tθ(xa).y_a=x_a,\qquad y_b=x_b\odot\exp s_\theta(x_a)+t_\theta(x_a).

因为 yay_a 原样保留,逆变换可显式写成

xa=ya,xb=(ybtθ(ya))exp(sθ(ya)).x_a=y_a,\qquad x_b=\bigl(y_b-t_\theta(y_a)\bigr)\odot\exp\bigl(-s_\theta(y_a)\bigr).

Jacobian是分块三角矩阵,对角块为单位阵和 diag(es)\operatorname{diag}(e^{s}),所以

logdetJ=jsj(xa).\log|\det J|=\sum_j s_j(x_a).

s,ts,t 网络本身无需可逆,因为求逆时它们的输入 ya=xay_a=x_a 已知。单层不改变 aa 分块,表达力有限;多层之间必须交换、置换或可逆混合分块,让所有维度最终都能被变换。置换的行列式绝对值为一,不贡献log-det,但会改变后续依赖。

例 3:coupling层的正向、逆向与log-det

二维输入分为 xa=1,xb=2x_a=1,x_b=2,设 s(xa)=log2s(x_a)=\log2t(xa)=1t(x_a)=-1。正向得到 ya=1y_a=1yb=2×21=3y_b=2\times2-1=3;log-det为 log2\log2,表示局部面积扩大两倍。

y=(1,3)y=(1,3) 求逆时,先取 xa=ya=1x_a=y_a=1,重新计算同一 s,ts,t,再得 xb=(3(1))/2=2x_b=(3-(-1))/2=2。将正向和逆向串联恢复原输入,误差应只来自数值精度。若实现把缩放直接输出为可正可负的数而非指数,缩放为零时会破坏可逆性。

自回归流用三角依赖选择计算方向

一种三角变换可写成

yi=xiexpsi(x<i)+ti(x<i),i=1,,d.y_i=x_i\exp s_i(x_{<i})+t_i(x_{<i}),\qquad i=1,\ldots,d.

ii 个输出只依赖当前和更早输入,Jacobian为下三角,对数行列式是所有 sis_i 之和。若 xx 已知,可用掩码网络并行计算全部条件参数和 yy,适合密度求值;从给定 yy 反求 xx 时,xix_i 依赖刚恢复的 x<ix_{<i},通常要顺序采样。这类依赖方向常用于描述密度评估快、采样慢的自回归流。

反过来设计条件依赖,可让从基变量到数据的采样并行,而数据到基变量的密度路径更顺序。名称并不能替代方向账本:必须写明哪一个变量是已知、条件网络读取哪一侧,以及训练和部署究竟调用正向还是逆向。

coupling层把逐坐标顺序改成分块更新,两个方向都较易并行,但每层只变换部分坐标,常需更多层。自回归层每层能为每个坐标使用更细条件,却让一个方向带有长度为 dd 的依赖链。两者都以三角Jacobian换取线性时间log-det。

精确似然训练仍需数据合同

对连续训练样本 x(n)x^{(n)},最大似然最小化

L(θ)=1Nn=1N[logpZ(z(n))+logdetJf1(x(n))].L(\theta)=-\frac1N\sum_{n=1}^N \left[\log p_Z(z^{(n)})+log|\det J_{f^{-1}}(x^{(n)})|\right].

这里没有变分下界:在数学模型和数值计算正确时,得到的是模型对连续输入的精确密度。但“精确”修饰对当前流模型的似然计算,不表示模型是真实分布,也不表示优化达到全局最优。

例 4:一个缩放参数的似然梯度更新

设一维流 x=eαzx=e^\alpha z,基分布为标准正态,单个观测 x=2x=2。逆变量为 z=2eαz=2e^{-\alpha},忽略与参数无关常数后,负对数似然为

L(α)=12x2e2α+α,L(\alpha)=\tfrac12x^2e^{-2\alpha}+\alpha,

梯度为 1x2e2α1-x^2e^{-2\alpha}。初值 α=0\alpha=0 时梯度为 14=31-4=-3;学习率 0.10.1 的梯度下降给出 α1=00.1(3)=0.3\alpha_1=0-0.1(-3)=0.3,尺度从一增至 e0.31.350e^{0.3}\approx1.350。此时梯度变为 14e0.61.1951-4e^{-0.6}\approx-1.195,仍推动尺度增大,但幅度减小。只优化一个样本会把尺度朝该样本调整,不能代表总体估计。

图像token、类别和计数是离散变量,不能直接当作普通连续密度而忽略量化。常见做法先加入明确分布的去量化噪声,并在所定义的连续目标下训练;报告单位还要说明是自然对数、比特每维还是总负对数似然。不同去量化规则和预处理的密度值不可直接比较。

条件流仍要保持每个条件下可逆

若有标签或上下文 cc,可以令变换和基密度依赖条件:x=fθ(z;c)x=f_\theta(z;c)pZ(zc)p_Z(z\mid c)。变量替换只对随机变量轴求Jacobian,条件被视为已给定,因而

logpX(xc)=logpZ(f1(x;c)c)+logdetJf1(x;c).\log p_X(x\mid c)=\log p_Z(f^{-1}(x;c)\mid c) +\log|\det J_{f^{-1}}(x;c)|.

对每个允许的 cc,映射关于 zzxx 仍须双射。条件网络本身不必可逆,因为求逆时同一个 cc 已知。若部署时条件缺失、含噪或来自另一个预测器,训练合同就已改变,应分别评价条件错误传播。把未来标签或数据切分信息放入条件会造成泄漏,精确似然并不能暴露这种语义错误。

条件采样时先固定 cc,再从相应基分布取 zz 并走生成方向;条件密度评估则用同一 cc 走逆方向。若比较两个条件的密度,必须确认它们的基分布、预处理和单位一致,否则差异可能来自条件尺度而非样本适配。

可逆性同时带来表达限制

严格双射不允许两个潜变量映射到同一数据点,也不能改变维数。连续可逆映射及其连续逆保持拓扑连接性质:从具有全空间正密度的基分布出发,模型通常不能精确制造被零密度区域完全隔开的支持,只能用很低密度的狭窄桥近似。数据若集中在更低维流形上,普通同维连续密度还会遇到奇异分布问题,去量化或噪声模型改变的是建模对象。

易算log-det也限制层结构。仿射coupling每次只直接变换部分坐标,自回归流在一个方向必须顺序计算;为了提高表达力增加层数,会增加参数、激活、求逆误差和运行时间。宣称可逆层能节省激活内存时,还要计入重算、有限精度恢复误差和非可逆外围模块。

用双向资源账本比较架构

流模型有两条同等重要的执行路径。密度路径从数据出发,包含预处理、逐层求逆或正向变换、每层log-det和基密度;采样路径从基变量出发,包含随机数、反方向变换和后处理。应分别记录每样本延迟、批量吞吐、峰值内存和串行深度。只报告训练吞吐会隐藏自回归采样瓶颈,只报告一次采样又会隐藏大批量密度评价优势。

KK 层、dd 维coupling流,log-det通常随被缩放元素数近似线性增长,但条件网络的卷积或全连接成本可能占主导。自回归流即使log-det求和为 O(d)O(d),顺序采样的墙钟时间也可能因 dd 次依赖调用而很高。复杂度阶数相同不表示硬件效率相同,还要检查内存访问、并行批量和编译实现。

架构增深前先做三项基线:单层仿射应复现解析正态变换;小维coupling应与显式Jacobian行列式一致;多层组合应在正逆两向恢复并保持log-det相消。通过这些不变量后,再根据留出似然与资源瓶颈决定增加混合、宽度或层数,才能把表达不足和实现错误分开。

例 5:两层流的对数体积账本

从某个基点出发,第一层正向log-det为 log2\log2,第二层为 log3-\log3,基对数密度为 3-3。总正向log-det为 log(2/3)0.4055\log(2/3)\approx-0.4055,表示净体积收缩到三分之二。

数据点对数密度为 3(0.4055)=2.5945-3-(-0.4055)=-2.5945。若错误地把绝对行列式相加为 2+1/32+1/3,或忘记正向公式前的负号,都得不到概率质量守恒。逆向账本的两个log-det符号相反,总和为 log(3/2)\log(3/2),代入逆公式仍给出 2.5945-2.5945

数值核验与评价边界

每层至少检查 f1(f(z))zf^{-1}(f(z))\approx zf(f1(x))xf(f^{-1}(x))\approx x、解析log-det与小维自动微分Jacobian一致,以及正向和逆向log-det互为相反数。尺度通常在对数域参数化,并对极端log-scale作有依据的限制;否则指数上溢、下溢或接近奇异会使似然和逆不稳定。

精确留出似然可比较同一预处理下的密度模型,但高似然未必对应更符合人类语义的样本,模型还可能偏好某些低层统计。评价应同时包含留出负对数似然、采样质量与覆盖、逆向重建误差、吞吐、峰值内存和异常输入行为。对域外检测尤其不能仅由“能算密度”推出可靠性。

练习

练习 1:一维变量替换
推导一维仿射流的密度公式。
查看提示
先求逆变量,再除以正向导数绝对值。
查看解答
x=az+bx=az+b且a非零,则z=(xb)/az=(x-b)/apX(x)=pZ(z)/ap_X(x)=p_Z(z)/|a|,对数形式为logpZ(z)loga\log p_Z(z)-\log|a|;绝对值处理方向翻转。
练习 2:复合 log-det

写出 KK 层流的对数似然账本。

查看提示
Jacobian 相乘,行列式相乘,对数绝对值相加。
查看解答
f=fKf1f=f_K\circ\cdots\circ f_1,总 log-det 为各层在对应中间状态处的 logdetJ\log|\det J| 之和;数据对数密度等于基对数密度减正向总和。
练习 3:coupling求逆
推导仿射coupling层的逆和log-det。
查看提示
保留分块先恢复,再重算缩放和平移。
查看解答
先令xa=yax_a=y_a,再算s(xa),t(xa)s(x_a),t(x_a),最后xb=(ybt(xa))exp(s(xa))x_b=(y_b-t(x_a))\exp(-s(x_a));Jacobian三角,对数绝对行列式为s各分量之和。
练习 4:自回归方向
解释为何一种自回归流会密度快而采样慢。
查看提示
分别问密度计算时和采样时哪些坐标已经已知。
查看解答
若条件参数依赖已知数据前缀,数据到基变量可用掩码网络并行评估,而从基变量求数据需逐坐标恢复;反向设计交换两种成本,必须按实际映射方向判断。
练习 5:离散数据
说明图像像素进入连续流前需要什么处理。
查看提示
连续密度对单个离散点的概率质量不是同一对象。
查看解答
先定义去量化噪声和连续输入范围,在该连续分布上用变量替换训练,并报告预处理与密度单位;不同去量化合同下的似然不能直接比较。
练习 6:精确似然边界
解释为什么精确似然不等于生成模型已经正确。
查看提示
区分计算无近似、模型正确与语义质量。
查看解答
精确似然表示给定流模型的密度可直接计算,不保证模型族包含真实分布、优化充分或高似然样本语义更好;还需采样覆盖、逆误差、资源和域外行为证据。

概念关系

资源

论文 · 2014

Generative Adversarial Nets

Ian Goodfellow, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville, Yoshua Bengio

用于核对原始对抗目标、最优判别器分析和实验结论范围。

打开官方来源
书籍 · 2016

Deep Learning

Ian Goodfellow, Yoshua Bengio, Aaron Courville

适合作为反向传播和优化章节的完整参考。

打开官方来源