双射与概率密度变换
设基随机变量 Z ∈ R d Z\in\mathbb R^d Z ∈ R d 有可计算密度 p Z p_Z p Z ,可逆可微映射 f θ : R d → R d f_\theta:\mathbb R^d\to\mathbb R^d f θ : R d → R d 产生 X = f θ ( Z ) X=f_\theta(Z) X = f θ ( Z ) 。给定数据 x x x ,必须能求 z = f θ − 1 ( x ) z=f_\theta^{-1}(x) z = f θ − 1 ( x ) ,并计算相应Jacobian行列式。变量替换公式为
p X ( x ) = p Z ( f θ − 1 ( x ) ) ∣ det J f θ − 1 ( x ) ∣ . p_X(x)=p_Z\bigl(f_\theta^{-1}(x)\bigr)
\left|\det J_{f_\theta^{-1}}(x)\right|. p X ( x ) = p Z ( f θ − 1 ( x ) ) det J f θ − 1 ( x ) .
若从正向 x = f ( z ) x=f(z) x = f ( z ) 计算,则
log p X ( f ( z ) ) = log p Z ( z ) − log ∣ det J f ( z ) ∣ . \log p_X(f(z))=\log p_Z(z)-\log\left|\det J_f(z)\right|. log p X ( f ( z )) = log p Z ( z ) − log ∣ det J f ( z ) ∣ .
负号来自体积扩张:同一概率质量铺到更大体积后,单位体积密度下降。绝对值不可省略,因为密度非负,而可逆映射可以翻转方向。流要求输入与输出同维;非方Jacobian没有通常的双射行列式公式。
一维时,长度小区间满足 d x ≈ f ′ ( z ) d z dx\approx f'(z)dz d x ≈ f ′ ( z ) d z ,概率守恒 p X ( x ) d x ≈ p Z ( z ) d z p_X(x)dx\approx p_Z(z)dz p X ( x ) d x ≈ p Z ( z ) d z ,所以 p X ( x ) = p Z ( z ) / ∣ f ′ ( z ) ∣ p_X(x)=p_Z(z)/|f'(z)| p X ( x ) = p Z ( z ) /∣ f ′ ( z ) ∣ 。多维行列式正是局部体积缩放的对应量。
基分布与映射方向
基分布常取各维独立标准正态,因为采样和对数密度简单;这不是变量替换公式的要求。换成逻辑斯蒂分布、混合分布或带条件参数的基分布,会改变模型的尾部、支持和似然。训练与采样必须使用同一基分布及同一标准化,不能训练时按标准正态算密度、部署时再从另一噪声分布取样。
文献和代码可能把 f f f 定义为“数据到基变量”,也可能定义为“基变量到数据”。两种记法都成立,却让log-det符号和所谓正向、逆向交换。计算时,我们应明确输入、输出和对应公式:若当前计算 z = f ( x ) z=f(x) z = f ( x ) ,则 log p X ( x ) = log p Z ( z ) + log ∣ det J f ( x ) ∣ \log p_X(x)=\log p_Z(z)+\log|\det J_f(x)| log p X ( x ) = log p Z ( z ) + log ∣ det J f ( x ) ∣ ;若当前计算 x = g ( z ) x=g(z) x = g ( z ) ,则使用 log p X ( g ( z ) ) = log p Z ( z ) − log ∣ det J g ( z ) ∣ \log p_X(g(z))=\log p_Z(z)-\log|\det J_g(z)| log p X ( g ( z )) = log p Z ( z ) − log ∣ det J g ( z ) ∣ 。
例 1:一维仿射流的精确对数密度
令 Z ∼ N ( 0 , 1 ) Z\sim\mathcal N(0,1) Z ∼ N ( 0 , 1 ) ,变换 X = 2 Z + 3 X=2Z+3 X = 2 Z + 3 。观测 x = 5 x=5 x = 5 时,先求逆 z = ( 5 − 3 ) / 2 = 1 z=(5-3)/2=1 z = ( 5 − 3 ) /2 = 1 ;正向导数绝对值为二,故
log p X ( 5 ) = − 1 2 log ( 2 π ) − 1 2 ( 1 ) 2 − log 2 ≈ − 2.1121. \log p_X(5)=-\tfrac12\log(2\pi)-\tfrac12(1)^2-\log2\approx-2.1121. log p X ( 5 ) = − 2 1 log ( 2 π ) − 2 1 ( 1 ) 2 − log 2 ≈ − 2.1121. 相应密度约为 e − 2.1121 = 0.1210 e^{-2.1121}=0.1210 e − 2.1121 = 0.1210 。若漏掉 − log 2 -\log2 − log 2 ,会得到标准正态在一处的密度约 0.2420 0.2420 0.2420 ,总积分将变成二而非一。直接识别 X ∼ N ( 3 , 4 ) X\sim\mathcal N(3,4) X ∼ N ( 3 , 4 ) 也得到同一结果。
复合变换的对数体积
实际模型把多个双射复合:z 0 → f 1 z 1 → f 2 ⋯ → f K x z_0\xrightarrow{f_1}z_1\xrightarrow{f_2}\cdots\xrightarrow{f_K}x z 0 f 1 z 1 f 2 ⋯ f K x 。链式法则给出
J f K ∘ ⋯ ∘ f 1 ( z 0 ) = J f K ( z K − 1 ) ⋯ J f 1 ( z 0 ) . J_{f_K\circ\cdots\circ f_1}(z_0)
=J_{f_K}(z_{K-1})\cdots J_{f_1}(z_0). J f K ∘ ⋯ ∘ f 1 ( z 0 ) = J f K ( z K − 1 ) ⋯ J f 1 ( z 0 ) .
行列式乘法使总对数绝对行列式成为
log ∣ det J f ∣ = ∑ k = 1 K log ∣ det J f k ( z k − 1 ) ∣ . \log|\det J_f|=\sum_{k=1}^K\log|\det J_{f_k}(z_{k-1})|. log ∣ det J f ∣ = k = 1 ∑ K log ∣ det J f k ( z k − 1 ) ∣.
这让每层只需报告自己的状态和log-det,避免形成整个高维Jacobian。若用一般稠密 d × d d\times d d × d Jacobian,求行列式和求逆通常代价高;流层的核心设计目标就是让双射、逆和log-det都可计算。
对角、三角、正交及其他易分解线性变换的行列式计算方式不同。对角层的log-det是各对角绝对值对数之和,但坐标间没有混合;三角层加入依赖而仍只需读对角;正交层体积绝对值为一,只旋转或反射;可逆稠密混合能一次连接全部坐标,却要用分解、参数化或缓存控制行列式成本。架构通常交替使用易缩放层与易混合层,而非期待一种层同时完成所有作用。
例 2:二维三角仿射变换
取
A = [ 2 1 0 0.5 ] , b = ( 1 , − 1 ) T , x = A z + b . A=\begin{bmatrix}2&1\\0&0.5\end{bmatrix},\quad b=(1,-1)^\mathsf T,
\qquad x=Az+b. A = [ 2 0 1 0.5 ] , b = ( 1 , − 1 ) T , x = A z + b . 观测 x = ( 5 , 0 ) T x=(5,0)^\mathsf T x = ( 5 , 0 ) T 。先由第二行 0 = 0.5 z 2 − 1 0=0.5z_2-1 0 = 0.5 z 2 − 1 得 z 2 = 2 z_2=2 z 2 = 2 ;第一行 5 = 2 z 1 + z 2 + 1 5=2z_1+z_2+1 5 = 2 z 1 + z 2 + 1 得 z 1 = 1 z_1=1 z 1 = 1 。三角矩阵行列式为 2 × 0.5 = 1 2\times0.5=1 2 × 0.5 = 1 ,故log-det为零。
若基分布为二维标准正态,log p Z ( 1 , 2 ) = − log ( 2 π ) − ( 1 2 + 2 2 ) / 2 ≈ − 4.3379 \log p_Z(1,2)=-\log(2\pi)-(1^2+2^2)/2\approx-4.3379 log p Z ( 1 , 2 ) = − log ( 2 π ) − ( 1 2 + 2 2 ) /2 ≈ − 4.3379 ,数据对数密度相同。变换虽然同时剪切、一个方向扩张并在另一个方向收缩,但净体积不变;只看单个对角尺度会误判密度变化。
仿射耦合层
把输入分成 x a , x b x_a,x_b x a , x b ,一层仿射coupling写成
y a = x a , y b = x b ⊙ exp s θ ( x a ) + t θ ( x a ) . y_a=x_a,\qquad
y_b=x_b\odot\exp s_\theta(x_a)+t_\theta(x_a). y a = x a , y b = x b ⊙ exp s θ ( x a ) + t θ ( x a ) .
因为 y a y_a y a 原样保留,逆变换可显式写成
x a = y a , x b = ( y b − t θ ( y a ) ) ⊙ exp ( − s θ ( y a ) ) . x_a=y_a,\qquad
x_b=\bigl(y_b-t_\theta(y_a)\bigr)\odot\exp\bigl(-s_\theta(y_a)\bigr). x a = y a , x b = ( y b − t θ ( y a ) ) ⊙ exp ( − s θ ( y a ) ) .
Jacobian是分块三角矩阵,对角块为单位阵和 diag ( e s ) \operatorname{diag}(e^{s}) diag ( e s ) ,所以
log ∣ det J ∣ = ∑ j s j ( x a ) . \log|\det J|=\sum_j s_j(x_a). log ∣ det J ∣ = j ∑ s j ( x a ) .
s , t s,t s , t 网络本身无需可逆,因为求逆时它们的输入 y a = x a y_a=x_a y a = x a 已知。单层不改变 a a a 分块,表达力有限;多层之间必须交换、置换或可逆混合分块,让所有维度最终都能被变换。置换的行列式绝对值为一,不贡献log-det,但会改变后续依赖。
例 3:coupling层的正向、逆向与log-det
二维输入分为 x a = 1 , x b = 2 x_a=1,x_b=2 x a = 1 , x b = 2 ,设 s ( x a ) = log 2 s(x_a)=\log2 s ( x a ) = log 2 、t ( x a ) = − 1 t(x_a)=-1 t ( x a ) = − 1 。正向得到 y a = 1 y_a=1 y a = 1 ,y b = 2 × 2 − 1 = 3 y_b=2\times2-1=3 y b = 2 × 2 − 1 = 3 ;log-det为 log 2 \log2 log 2 ,表示局部面积扩大两倍。
从 y = ( 1 , 3 ) y=(1,3) y = ( 1 , 3 ) 求逆时,先取 x a = y a = 1 x_a=y_a=1 x a = y a = 1 ,重新计算同一 s , t s,t s , t ,再得 x b = ( 3 − ( − 1 ) ) / 2 = 2 x_b=(3-(-1))/2=2 x b = ( 3 − ( − 1 )) /2 = 2 。将正向和逆向串联恢复原输入,误差应只来自数值精度。若实现把缩放直接输出为可正可负的数而非指数,缩放为零时会破坏可逆性。
自回归流与三角依赖
一种三角变换可写成
y i = x i exp s i ( x < i ) + t i ( x < i ) , i = 1 , … , d . y_i=x_i\exp s_i(x_{<i})+t_i(x_{<i}),\qquad i=1,\ldots,d. y i = x i exp s i ( x < i ) + t i ( x < i ) , i = 1 , … , d .
第 i i i 个输出只依赖当前和更早输入,Jacobian为下三角,对数行列式是所有 s i s_i s i 之和。若 x x x 已知,可用掩码网络并行计算全部条件参数和 y y y ,适合密度求值;从给定 y y y 反求 x x x 时,x i x_i x i 依赖刚恢复的 x < i x_{<i} x < i ,通常要顺序采样。这类依赖方向常用于描述密度评估快、采样慢的自回归流。
反过来设计条件依赖,可让从基变量到数据的采样并行,而数据到基变量的密度路径更顺序。比较这些结构时,我们需要明确已知变量、条件网络的输入,以及训练和部署分别使用哪个计算方向。
coupling层把逐坐标顺序改成分块更新,两个方向都较易并行,但每层只变换部分坐标,常需更多层。自回归层每层能为每个坐标使用更细条件,却让一个方向带有长度为 d d d 的依赖链。两者都以三角Jacobian换取线性时间log-det。
精确似然训练的数据条件
对连续训练样本 x ( n ) x^{(n)} x ( n ) ,最大似然最小化
L ( θ ) = − 1 N ∑ n = 1 N [ log p Z ( z ( n ) ) + l o g ∣ det J f − 1 ( x ( n ) ) ∣ ] . L(\theta)=-\frac1N\sum_{n=1}^N
\left[\log p_Z(z^{(n)})+log|\det J_{f^{-1}}(x^{(n)})|\right]. L ( θ ) = − N 1 n = 1 ∑ N [ log p Z ( z ( n ) ) + l o g ∣ det J f − 1 ( x ( n ) ) ∣ ] .
这里没有变分下界:在数学模型和数值计算正确时,得到的是模型对连续输入的精确密度。但“精确”修饰对当前流模型的似然计算,不表示模型是真实分布,也不表示优化达到全局最优。
例 4:一个缩放参数的似然梯度更新
设一维流 x = e α z x=e^\alpha z x = e α z ,基分布为标准正态,单个观测 x = 2 x=2 x = 2 。逆变量为 z = 2 e − α z=2e^{-\alpha} z = 2 e − α ,忽略与参数无关常数后,负对数似然为
L ( α ) = 1 2 x 2 e − 2 α + α , L(\alpha)=\tfrac12x^2e^{-2\alpha}+\alpha, L ( α ) = 2 1 x 2 e − 2 α + α , 梯度为 1 − x 2 e − 2 α 1-x^2e^{-2\alpha} 1 − x 2 e − 2 α 。初值 α = 0 \alpha=0 α = 0 时梯度为 1 − 4 = − 3 1-4=-3 1 − 4 = − 3 ;学习率 0.1 0.1 0.1 的梯度下降给出 α 1 = 0 − 0.1 ( − 3 ) = 0.3 \alpha_1=0-0.1(-3)=0.3 α 1 = 0 − 0.1 ( − 3 ) = 0.3 ,尺度从一增至 e 0.3 ≈ 1.350 e^{0.3}\approx1.350 e 0.3 ≈ 1.350 。此时梯度变为 1 − 4 e − 0.6 ≈ − 1.195 1-4e^{-0.6}\approx-1.195 1 − 4 e − 0.6 ≈ − 1.195 ,仍推动尺度增大,但幅度减小。只优化一个样本会把尺度朝该样本调整,不能代表总体估计。
图像token、类别和计数是离散变量,不能直接当作普通连续密度而忽略量化。常见做法先加入明确分布的去量化噪声,并在所定义的连续目标下训练;报告单位还要说明是自然对数、比特每维还是总负对数似然。不同去量化规则和预处理的密度值不可直接比较。
条件流的可逆性
若有标签或上下文 c c c ,可以令变换和基密度依赖条件:x = f θ ( z ; c ) x=f_\theta(z;c) x = f θ ( z ; c ) 、p Z ( z ∣ c ) p_Z(z\mid c) p Z ( z ∣ c ) 。变量替换只对随机变量轴求Jacobian,条件被视为已给定,因而
log p X ( x ∣ c ) = log p Z ( f − 1 ( x ; c ) ∣ c ) + log ∣ det J f − 1 ( x ; c ) ∣ . \log p_X(x\mid c)=\log p_Z(f^{-1}(x;c)\mid c)
+\log|\det J_{f^{-1}}(x;c)|. log p X ( x ∣ c ) = log p Z ( f − 1 ( x ; c ) ∣ c ) + log ∣ det J f − 1 ( x ; c ) ∣.
对每个允许的 c c c ,映射关于 z z z 与 x x x 仍须双射。条件网络本身不必可逆,因为求逆时同一个 c c c 已知。若部署时条件缺失、含噪或来自另一个预测器,训练合同就已改变,应分别评价条件错误传播。把未来标签或数据切分信息放入条件会造成泄漏,精确似然并不能暴露这种语义错误。
条件采样时先固定 c c c ,再从相应基分布取 z z z 并走生成方向;条件密度评估则用同一 c c c 走逆方向。若比较两个条件的密度,必须确认它们的基分布、预处理和单位一致,否则差异可能来自条件尺度而非样本适配。
可逆性与表达能力
严格双射不允许两个潜变量映射到同一数据点,也不能改变维数。连续可逆映射及其连续逆保持拓扑连接性质:从具有全空间正密度的基分布出发,模型通常不能精确制造被零密度区域完全隔开的支持,只能用很低密度的狭窄桥近似。数据若集中在更低维流形上,普通同维连续密度还会遇到奇异分布问题,去量化或噪声模型改变的是建模对象。
易算log-det也限制层结构。仿射coupling每次只直接变换部分坐标,自回归流在一个方向必须顺序计算;为了提高表达力增加层数,会增加参数、激活、求逆误差和运行时间。宣称可逆层能节省激活内存时,还要计入重算、有限精度恢复误差和非可逆外围模块。
训练与采样的资源比较
流模型有两条同等重要的执行路径。密度路径从数据出发,包含预处理、逐层求逆或正向变换、每层log-det和基密度;采样路径从基变量出发,包含随机数、反方向变换和后处理。应分别记录每样本延迟、批量吞吐、峰值内存和串行深度。只报告训练吞吐会隐藏自回归采样瓶颈,只报告一次采样又会隐藏大批量密度评价优势。
对 K K K 层、d d d 维coupling流,log-det通常随被缩放元素数近似线性增长,但条件网络的卷积或全连接成本可能占主导。自回归流即使log-det求和为 O ( d ) O(d) O ( d ) ,顺序采样的墙钟时间也可能因 d d d 次依赖调用而很高。复杂度阶数相同不表示硬件效率相同,还要检查内存访问、并行批量和编译实现。
架构增深前先做三项基线:单层仿射应复现解析正态变换;小维coupling应与显式Jacobian行列式一致;多层组合应在正逆两向恢复并保持log-det相消。通过这些不变量后,再根据留出似然与资源瓶颈决定增加混合、宽度或层数,才能把表达不足和实现错误分开。
例 5:两层流的对数体积
从某个基点出发,第一层正向log-det为 log 2 \log2 log 2 ,第二层为 − log 3 -\log3 − log 3 ,基对数密度为 − 3 -3 − 3 。总正向log-det为 log ( 2 / 3 ) ≈ − 0.4055 \log(2/3)\approx-0.4055 log ( 2/3 ) ≈ − 0.4055 ,表示净体积收缩到三分之二。
数据点对数密度为 − 3 − ( − 0.4055 ) = − 2.5945 -3-(-0.4055)=-2.5945 − 3 − ( − 0.4055 ) = − 2.5945 。若错误地把绝对行列式相加为 2 + 1 / 3 2+1/3 2 + 1/3 ,或忘记正向公式前的负号,都得不到概率质量守恒。逆向计算中,两个 log-det 的符号相反,总和为 log ( 3 / 2 ) \log(3/2) log ( 3/2 ) ,代入逆公式仍给出 − 2.5945 -2.5945 − 2.5945 。
数值核验与评价边界
每层至少检查 f − 1 ( f ( z ) ) ≈ z f^{-1}(f(z))\approx z f − 1 ( f ( z )) ≈ z 、f ( f − 1 ( x ) ) ≈ x f(f^{-1}(x))\approx x f ( f − 1 ( x )) ≈ x 、解析log-det与小维自动微分Jacobian一致,以及正向和逆向log-det互为相反数。尺度通常在对数域参数化,并对极端log-scale作有依据的限制;否则指数上溢、下溢或接近奇异会使似然和逆不稳定。
精确留出似然可比较同一预处理下的密度模型,但高似然未必对应更符合人类语义的样本,模型还可能偏好某些低层统计。评价应同时包含留出负对数似然、采样质量与覆盖、逆向重建误差、吞吐、峰值内存和异常输入行为。对域外检测尤其不能仅由“能算密度”推出可靠性。
练习
练习 1:一维变量替换 标记完成
所属知识 密度缩放
难度 3/5 查看提示 先求逆变量,再除以正向导数绝对值。
查看解答 若
x = a z + b x=az+b x = a z + b 且a非零,则
z = ( x − b ) / a z=(x-b)/a z = ( x − b ) / a ,
p X ( x ) = p Z ( z ) / ∣ a ∣ p_X(x)=p_Z(z)/|a| p X ( x ) = p Z ( z ) /∣ a ∣ ,对数形式为
log p Z ( z ) − log ∣ a ∣ \log p_Z(z)-\log|a| log p Z ( z ) − log ∣ a ∣ ;绝对值处理方向翻转。
练习 2:复合 log-det 标记完成
所属知识 链式法则
难度 3/5 写出 K K K 层流的对数似然计算式,并列出各层的贡献。
查看提示 Jacobian 相乘,行列式相乘,对数绝对值相加。
查看解答 对
f = f K ∘ ⋯ ∘ f 1 f=f_K\circ\cdots\circ f_1 f = f K ∘ ⋯ ∘ f 1 ,总 log-det 为各层在对应中间状态处的
log ∣ det J ∣ \log|\det J| log ∣ det J ∣ 之和;数据对数密度等于基对数密度减正向总和。
练习 3:coupling求逆 标记完成
所属知识 可逆层
难度 3/5 查看提示 保留分块先恢复,再重算缩放和平移。
查看解答 先令
x a = y a x_a=y_a x a = y a ,再算
s ( x a ) , t ( x a ) s(x_a),t(x_a) s ( x a ) , t ( x a ) ,最后
x b = ( y b − t ( x a ) ) exp ( − s ( x a ) ) x_b=(y_b-t(x_a))\exp(-s(x_a)) x b = ( y b − t ( x a )) exp ( − s ( x a )) ;Jacobian三角,对数绝对行列式为s各分量之和。
练习 4:自回归方向 标记完成
所属知识 计算复杂度
难度 4/5 查看提示 分别问密度计算时和采样时哪些坐标已经已知。
查看解答 若条件参数依赖已知数据前缀,数据到基变量可用掩码网络并行评估,而从基变量求数据需逐坐标恢复;反向设计交换两种成本,必须按实际映射方向判断。
练习 5:离散数据 标记完成
所属知识 建模合同
难度 4/5 查看提示 连续密度对单个离散点的概率质量不是同一对象。
查看解答 先定义去量化噪声和连续输入范围,在该连续分布上用变量替换训练,并报告预处理与密度单位;不同去量化合同下的似然不能直接比较。
练习 6:精确似然边界 标记完成
所属知识 评价
难度 4/5 查看提示 区分计算无近似、模型正确与语义质量。
查看解答 精确似然表示给定流模型的密度可直接计算,不保证模型族包含真实分布、优化充分或高似然样本语义更好;还需采样覆盖、逆误差、资源和域外行为证据。
概念关系
资源
Generative Adversarial Nets Ian Goodfellow, Jean Pouget-Abadie, Mehdi Mirza, Bing Xu, David Warde-Farley, Sherjil Ozair, Aaron Courville, Yoshua Bengio · 2014 · Advances in Neural Information Processing Systems 27
打开官方来源
Deep Learning Ian Goodfellow, Yoshua Bengio, Aaron Courville · 2016 · MIT Press
打开官方来源
GAN 原论文在本章只用于核对隐式生成模型的极小极大训练,作为可逆流显式密度和精确变量替换公式的对照;《Deep Learning》用于核对概率密度、可逆变换、Jacobian 与生成建模基础。因此本章的 flow 似然不归因于 GAN 论文,引用它支持的是两类生成目标的边界比较。