初探推土機距離和 Entropic 最優傳輸 (EOT): 前言和動機篇 (1/3)


這是初探最優傳輸 OT (Optimal Transport) 的第一篇, 聊一下這是什麼問題以及傳統利用 Linear Programming 的解法

[備註 1]:圖片改自此 jupyter notebook: wasserstein-notebook/Wasserstein_Kantorovich.ipynb
[備註 2]:在離散情況下 Earth Mover’s Distance (EMD) / Optimal Transport / Wasserstein distance 指同一件事情, 文章在不混淆情況下有時會混用


什麼是 Earth Mover’s Distance (EMD) 推土機距離?

Earth Mover’s Distance (EMD) 有一個很形象的描述叫做推土機距離.
想像兩個機率分布 ($P_s$, $P_t$) 是形狀不同的兩個土堆. 將源分布 $P_s$ 改造成目標分布 $P_t$ 所需的最小搬運代價即為 EMD.

搬運代價直覺上這麼定義: 代價 = 搬運質量 $\times$ 搬運距離. 所以單位質量的代價就是搬運距離, 代價矩陣畫出來如下圖左:
而上圖右則顯示最佳搬運計畫, 以傳輸矩陣的方式表達, 其中矩陣的 $(i,j)$ 的值表示要把 $P_s$ 在 index $i$ 搬運多少土到 index $j$ 的位置. 整個搬運完後就變成目標分布 $P_t$.
下圖展示根據最佳搬運計畫從源分布到目標分布的土堆搬運情況:


我們為什麼需要 EMD 距離?

我想藉由兩方面來說明什麼情況下需要 EMD 距離, 或是 Optimal Transport (OT) 距離
 $\circ$ “幾何感知“ 的需求 (Geometry Awareness)
 $\circ$ 兩個分佈的 Support (支撐集) 不重疊

“幾何感知” 的需求 (Geometry Awareness)

一般來說我們最常用 KL-divergence 來計算兩個分布的距離
如果我們的問題是分類任務, 假設是一隻 ”狗” 的圖片好了, 此時模型預測成 “貓” 跟預測成 “飛機”
這兩種錯誤在分類任務中沒有區別, 因此當標籤之間沒有幾何關係, KL 就足夠好了
再看另一個情況, 假設我們要生成人臉, 正確答案的眼睛在座標 (10, 10), 而模型生成兩種眼睛位置分別是 (11, 11) 和 (100, 100).
此時兩種錯誤就有好壞之分了. 使用 EMD 知道從 (11, 11) 搬運到 (10, 10) 的代價比起從 (100, 100) 要小的多, 因此 (11, 11) 會是比較好的預測.

兩個分佈的 Support (支撐集) 不重疊

我們考慮兩個常見的 distribution distance, KL divergence 和 JSD (Jensen-Shannon Divergence).
先看 KL divergence:
$$\begin{align*} D_{KL}(P \parallel Q) = \int_{x \in \text{supp}(P)} p(x) \log \frac{p(x)}{q(x)} dx \end{align*}$$ 當兩個分布 $P,Q$ 的 support sets 不重疊, 意思是對一個 $x$ 來說, 如果一個分布的 density $>0$ 則另一個分布的 density 一定 $=0$.
此時很容易看到 $D_{KL}=\infty$, loss 失去作用了.

這種 support 不重疊的情況可能比我們想得更容易發生, 尤其在高維度的分布情況下.

換一個 distance, JSD (Jensen-Shannon Divergence) 來觀察
JSD 的定義是基於 KL 散度的對稱化版本:
$$\begin{align*} JSD(P \parallel Q) = \frac{1}{2} D_{KL}(P \parallel M) + \frac{1}{2} D_{KL}(Q \parallel M) \end{align*}$$ 其中 $M = \frac{1}{2}(P+Q)$.
當兩個分布 $P,Q$ 的 support sets 不重疊時, $JSD=\log(2)$, 是個 constant, loss 也失去作用了.
而 EMD 或 OT 根據他們的定義, 先天上就不會有這種限制.

EMD 的數學描述和線性規劃求解

用數學正式描述一下 EMD 問題, 首先定義變量:
 $\circ$ 來源分佈:向量 $a \in \mathbb{R}^n_+$, 且 $\sum_{i=1}^n a_i = 1$.
 $\circ$ 目標分佈:向量 $b \in \mathbb{R}^m_+$, 且 $\sum_{j=1}^m b_j = 1$.
 $\circ$ 代價矩陣$C \in \mathbb{R}^{n \times m}$, 其中 $C_{ij}$ 為從 $i$ 搬到 $j$ 的單位成本.
 $\circ$ 傳輸矩陣(決策變量)$P \in \mathbb{R}^{n \times m}$, $P_{ij}$ 表示來源第 $i$ 個土堆 ($a_i$) 要搬運多少量到目標第 $j$ 個土堆 ($b_j$).
目標是最小化總傳輸成本:
$$\begin{align} \min_{P \in \mathbb{R}^{n \times m}} \langle P, C \rangle =\min_{P \in \mathbb{R}^{n \times m}} \quad & \sum_{i=1}^n \sum_{j=1}^m P_{ij} C_{ij} \quad (\text{目標函數}) \\ \end{align}$$ 並滿足邊緣分佈約束:
$$\begin{align} \begin{aligned} \text{s.t.} \quad & \sum_{j=1}^m P_{ij} = a_i, \quad \forall i \in \{1, \dots, n\} \quad (\text{行約束}) \\ & \sum_{i=1}^n P_{ij} = b_j, \quad \forall j \in \{1, \dots, m\} \quad (\text{列約束}) \\ & P_{ij} \ge 0, \quad \forall i, j \quad (\text{非負約束}) \end{aligned} \end{align}$$ 很明顯地這是一個標準的 線性規劃 LP (Linear Programming) 問題. (目標函數、約束都是線性方程式)
可使用 scipy.optimize.linprog 來求解, 範例請參考 Wasserstein_Kantorovich.ipynb
求解 LP 有一個經典有名的 Simplex mehod 方法
由於 LP 的目標函式為線性, 對應到下圖左的等高線 (紅色直線), 箭頭方向表示 loss 往下降的方向
且 LP 約束都是線性約束, 對應到下圖左橘色區塊反應了線性約束形成的 feasible space.
因此 LP 問題的最佳解就一定在端點 vertex 的位置. (只給結論)
Simplex method 就提出從 vertex 出發沿著 edge 往 loss 低的方向走到下一個 vertex, 重複直到最佳解出現. 見下圖右.

LP 和 Simplex method 雖然很優美, 不過仍有兩個比較大的缺點:

  1. 計算昂貴:Simplex method 雖然在平均情況是多項式時間, 但在訓練資料很大的情況下, 算一次 loss 就要跑一次 simplex method, cost 還是太大 (相比於神經網路常用的 KL-divergence).
  2. 不可微分與不穩定:最優解通常位於多胞形的頂點 (稀疏解). 當輸入數據微小變動時, 解可能會從一個頂點跳到另一個頂點, 導致梯度不連續, 無法應用於神經網路的反向傳播.

下一篇介紹的 Entropic Optimal Transport (EOT) 將作出改善
雖然 EOT 求解出來不會是最優傳輸解, 它會是一個模糊化的逼近結果. 但擁有計算便宜 (相較 Simplex method) 和可微分的優點, 在 OT 問題上會是很重要的做法.