**基於流嘅生成模型**（英文：Flow-based generative model）係機器學習當中用嘅一種生成模型，種模型旨在顯式噉建模出一個概率分佈，當中用到**歸一化流**（normalizing flow）呢種方法、一種憑藉變量變化公式（change-of-variable formula）捉簡單分佈轉換為複雜分佈嘅統計方法。

直接建模概似性（英文：likelihood）會有啲優勢。譬如，負對數概似率可以直接計算得出而且可以作爲損失函數來最細化。另外，仲可以透過採返初始分佈嘅樣本並應用流變換嚟生成新樣本。

相比之下，好多生成建模方法作爲替代嘅（例如變分自動編碼器（VAE）同埋生成對抗網絡）都冇明確表示到個概似函數。

方法同推導
-----

設{\displaystyle z\_{0}}係具有分佈{\displaystyle p\_{0}(z\_{0})}嘅隨機變量（可能係多變量）。

對於序數{\displaystyle i=1,...K}，設{\displaystyle z\_{i}=f\_{i}(z\_{i-1})}係一條隨機變量序列、啲{\displaystyle z\_{i}}係從{\displaystyle z\_{0}}遍歷轉換而嚟嘅，噉樣一趟「遍歷」亦即係所謂嘅「流」。其中啲函數{\displaystyle f\_{1},...f\_{K}}要係可逆嘅，即存在有反函數{\displaystyle f\_{i}^{-1}}。個最終輸出{\displaystyle z\_{K}}就可以幫目標分佈建模。

{\displaystyle z\_{K}}個對數概似係：

{\displaystyle \log p\_{K}(z\_{K})=\log p\_{0}(z\_{0})-\sum \_{i=1}^{K}\log \left|\det {\frac {df\_{i}(z\_{i-1})}{dz\_{i-1}}}\right|}
為唨有效噉計得出呢個對數概似，啲函數{\displaystyle f\_{1},...f\_{K}}要滿足：

1.容易求逆；

2.容易計出Jacobi行列式。

喺實踐當中，啲函數{\displaystyle f\_{1},...f\_{K}}係用深度神經網絡建模嘅，並透過訓練嚟幫目標分佈啲數據樣本嚟最細化佢個負對數概似，亦即係最佳化個損失函數。啲架構通常係設計成僅衹需要到神經網絡個前向傳遞功能（forward pass），就計得出個逆同埋啲Jacobi行列式。噉樣嘅架構包括有示例似NICE、RealNVP同埋Glow。 

### 反向訓練

考慮有{\displaystyle z\_{1}}同{\displaystyle z\_{0}}，根據變量變化公式：

{\displaystyle \int p\_{1}(z\_{1})dz\_{1}=\int p\_{0}(z\_{0})dz\_{0}=1}
呢條式表示變化前後嘅總概率保持係1。

對於變化前後嘅一細橛範圍，保持總概率對應（方向可以掉轉，所以加絕對值）有：

{\displaystyle p\_{1}(z\_{1})=p\_{0}(z\_{0})\left|{\frac {dz\_{0}}{dz\_{1}}}\right|}
留意有{\displaystyle z\_{1}=f\_{1}(z\_{0})}，亦即係{\displaystyle z\_{0}=f\_{1}^{-1}(z\_{1})}，攞一般意義下嘅變量變化公式嚟表示{\displaystyle z\_{1}}個分佈：

{\displaystyle p\_{1}(z\_{1})=p\_{0}(z\_{0})\left|\det {\frac {df\_{1}^{-1}(z\_{1})}{dz\_{1}}}\right|}
其中{\displaystyle \det {\frac {df\_{1}^{-1}(z\_{1})}{dz\_{1}}}}係{\displaystyle f\_{1}^{-1}}嘅Jacobi矩陣（經常攞嚟表示向量導數）個行列式。

通常嚟講，條式適用於任何{\displaystyle z\_{i}}同埋{\displaystyle z\_{i-1}}，所以可以透過歸納法一路從目標分佈推到某個理想分佈（好多時係高斯分佈）：

{\displaystyle p\_{K}(z\_{K})=p\_{0}(z\_{0})\prod \_{i=1}^{K}\left|\det {\frac {df\_{i}^{-1}(z\_{i})}{dz\_{i}}}\right|}
兩頭取對數得到編碼器嘅對數概似：

{\displaystyle \log p\_{K}(z\_{K})=\log p\_{0}(z\_{0})+\sum \_{i=1}^{K}\log \left|\det {\frac {df\_{i}^{-1}(z\_{i})}{dz\_{i}}}\right|}
當中左右都跟目標樣本{\displaystyle z\_{K}}有關，所以從目標樣本當中取樣可以訓練出一串聯{\displaystyle f\_{1}^{-1},...f\_{K}^{-1}}出來，個串聯表示一串變換，捉啲目標樣本{\displaystyle z\_{K}}逆推出最啱理想分佈{\displaystyle p\_{0}(z\_{0})}嘅啲{\displaystyle z\_{0}}嘅。

### 正向生成

對於變量變化公式應用反函數定理掉轉個行列式嘅分子分母（由{\displaystyle z\_{0}=f\_{1}^{-1}(z\_{1})}好易睇得出）：

{\displaystyle {\frac {df\_{1}^{-1}(z\_{1})}{dz\_{1}}}=\left({\frac {df\_{1}(z\_{0})}{dz\_{0}}}\right)^{-1}}
因{\displaystyle \det(A^{-1})=\det(A)^{-1}}（{\displaystyle A}係一個可逆矩陣），有：

{\displaystyle \left|\det \left({\frac {df\_{1}(z\_{0})}{dz\_{0}}}\right)^{-1}\right|=\left|\det {\frac {df\_{1}(z\_{0})}{dz\_{0}}}\right|^{-1}}
所以原本嘅分佈式又可以表示成：

{\displaystyle p\_{1}(z\_{1})=p\_{0}(z\_{0})\left|\det {\frac {df\_{1}(z\_{0})}{dz\_{0}}}\right|^{-1}}
注意右便唔會再同左便嘅輸出相關，所以可以攞嚟生成。

同樣經過遞歸同埋對數化可以得到生成模型嘅對數概似：

{\displaystyle \log p\_{K}(z\_{K})=\log p\_{0}(z\_{0})-\sum \_{i=1}^{K}\log \left|\det {\frac {df\_{i}(z\_{i-1})}{dz\_{i-1}}}\right|}
其中{\displaystyle f\_{1},...f\_{K}}可以由{\displaystyle f\_{1}^{-1},...f\_{K}^{-1}}取逆好容易噉得到，表示一串聯變換，可以捉理想分佈{\displaystyle p\_{0}(z\_{0})}底下啲樣本{\displaystyle z\_{0}}轉換成目標分佈。

連續歸一化流
------

比起按函數組合構造流，另一種方法即連續歸一化流（continuous normalizing flow，CNF）係將個流就公式化成一種連續時間動態（continuous-time dynamic）。 設{\displaystyle z\_{0}}係具有分佈{\displaystyle p(z\_{0})}嘅潛在變量。映射呢個潛在變量到數據空間可以用返呢種流函數：

{\displaystyle x=F(z\_{0})=z\_{T}=z\_{0}+\int \_{0}^{t}f(z\_{t},t)dt}
其中{\displaystyle f}係一個任意函數，可以用神經網絡之類幫佢建模。

個反函數就自然係：

{\displaystyle z\_{0}=F^{-1}(x)=z\_{T}+\int \_{t}^{0}-f(z\_{t},t)dt}
{\displaystyle x}嘅對數概似即為：

{\displaystyle \log(p(x))=\log(p(z\_{0}))-\int \_{0}^{t}{\text{Tr}}\left[{\frac {\partial f}{\partial z\_{t}}}dt\right]}
由於使到積分，喺實踐中可能要用到類似神經常微分方程（Neural ODE）之類嘅技巧。

應用
--

基於流嘅生成模型已應用於各種建模任務，包括：

* 音頻生成
* 圖像生成
* 分子圖生成
* 點雲建模
* 影片生成

考
-

1. ↑  Danilo Jimenez Rezende. "Variational Inference with Normalizing Flows". arXiv:1505.05770.
2. ↑  Weng, Lilian (2018-10-13). "Flow-based Deep Generative Models". *Lil'Log*.`{{cite web}}`: CS1 maint: url-status (link)
3. ↑  Dinh. "NICE: Non-linear Independent Components Estimation". arXiv:1410.8516.
4. ↑  Dinh. "Density estimation using Real NVP". arXiv:1605.08803.
5. 1 2  Kingma. "Glow: Generative Flow with Invertible 1x1 Convolutions". arXiv:1807.03039.
6. 1 2 3  Grathwohl. "FFJORD: Free-form Continuous Dynamics for Scalable Reversible Generative Models". arXiv:1810.01367.
7. ↑  Chen. "Neural Ordinary Differential Equations". arXiv:1806.07366.
8. ↑  Ping. "WaveFlow: A Compact Flow-based Model for Raw Audio". arXiv:1912.01219.
9. ↑  Shi. "GraphAF: A Flow-based Autoregressive Model for Molecular Graph Generation". arXiv:2001.09382.
10. ↑  Yang. "PointFlow: 3D Point Cloud Generation with Continuous Normalizing Flows". arXiv:1906.12320.
11. ↑  Kumar. "VideoFlow: A Conditional Flow-Based Model for Stochastic Video Generation". arXiv:1903.01434.

連出去
---

* 基於流嘅深度生成模型 - Weng, Lilian
* 歸一化流量模型
* Flow-based Generative Model - 李宏毅

| * 睇
* 傾
* 改
機械學習同數據探勘 |
| --- |
| 可以睇埋機械學習詞彙同數據科學 |
| 基本概念 | 人工智能 · 學習 · 運算學習論 · 線性可分性 · 事前數據處理 · 特徵提取 · 知識表示 |  |
| 數學模型 | 

|  |
| --- |
| 迴歸模型 · 決策樹（蒙地卡羅樹搜尋） · 貝葉斯網絡 · 支援向量機 · 關聯規則學習 |
| 神經網絡 | 

|  |  |
| --- | --- |
| 網絡基礎 | 人工神經細胞 · 前饋網絡（感知機 · 多層感知機） |
| 遞迴網絡 | 霍菲特網絡 · 玻茲曼機 · 長短期記憶 · 神經圖靈機 |
| 深度學習 | 卷積網絡 · 受限玻茲曼機（深度信念網絡） · 深度強化學習 |
| 網絡概念 | 反向傳播算法 · 關注機制 · 生成對抗網絡 · 基於流嘅生成模型 |
| 自編碼器 · 脈衝神經網絡 · 自組織對映 · 網絡種類一覽 |

 |

 |
| 最佳化 | 誤差函數 · 爬山演算法 · 梯度下降法 · 全局最佳化 · 正則化 · 變分推斷 · 資訊最大化 |
| 學習範式 | 監督式學習 · 非監督式學習 · 強化學習 · 遺傳演算法 · 主動機械學習 |
| 模型評估 | 自助抽樣法 · 交叉驗證 · 訓練曲線 · 適合度函數 · 過適 |
| 主要應用 | 統計分類（線性分類機） · 表徵學習 · 降維（特徵選擇） · 聚類分析 · 異常檢測 |
| 拉雜相關 | 認知科學 · 電腦科學 · 統計學 · 資訊理論 · 資訊系統、資訊過多同大數據 |
| 機械學習類 · 數據探勘類 |