Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

最適輸送

最適輸送(optimal transport: OT) は2つの点群(確率分布)のあいだの

  1. 距離を求める

  2. 対応関係を得る

  3. 変換する

といったことができる技術。

交差エントロピー等との違い(メリット)は、 誤差を非対称にできる こと(クラスAをBと間違えた場合とその逆の場合の損失を異なる値にしたりできる)

離散的な操作も微分できる

離散最適輸送は線形計画

ヒストグラムの最適輸送距離の定式化

  • 入力:

    • 比較するヒストグラム a,b∈Rn\boldsymbol{a}, \boldsymbol{b} \in \mathbb{R}^n

    • 各点の距離を表す行列 C∈Rn×n\boldsymbol{C} \in \mathbb{R}^{n\times n}

  • 出力:ヒストグラムの距離 OT(a,b,C)\text{OT}(\boldsymbol{a}, \boldsymbol{b}, \boldsymbol{C})

  • 最適輸送距離を以下の最適化問題の最適値と定義する

minimize⁡P∈Rn×n∑i=1n∑j=1nCijPij(総コスト) s.t. Pij≥0∀i,j(輸送量は非負)∑j=1nPij=ai∀i(余りなし)∑i=1nPij=bj∀j(不足なし)\begin{align} \underset{P \in \mathbb{R}^{n \times n}}{\operatorname{minimize}} & \sum_{i=1}^n \sum_{j=1}^n C_{ij} P_{i j} \quad(総コスト)\\ \text { s.t. } & P_{i j} \geq 0 \quad \forall i, j \quad(輸送量は非負)\\ & \sum_{j=1}^n P_{i j}= a_i \quad \forall i \quad(余りなし)\\ & \sum^n_{i=1} P_{i j}= b_j \quad \forall j \quad(不足なし) \end{align}

ここで決定変数PijP_{ij}は点iiから点jjに輸送する量を表す

cvxpyで解く例

※ちゃんとやるならPOTパッケージを使うべき

0.3999999997741462
最適輸送距離 OT(a, b, C): 0.400
行列P:
[[ 0.2 -0.  -0.  -0. ]
 [-0.   0.3  0.2 -0. ]
 [-0.  -0.   0.2 -0. ]
 [ 0.1  0.  -0.   0. ]]

点群の最適輸送距離の定式化

  • 入力:

    • 比較する点群 {x1,⋯ ,xn},{y1,⋯ ,ym}⊂X\left\{x_1, \cdots, x_n\right\},\left\{y_1, \cdots, y_m\right\} \subset \mathcal{X}

    • 各点の距離を表す関数 C:X×X→RC: \mathcal{X} \times \mathcal{X} \rightarrow \mathbb{R}

  • 出力:点群の距離

  • 最適輸送距離を以下の最適化問題の最適値と定義する

minimize⁡P∈Rn×m∑i=1n∑j=1mC(xi,yj)Pij(総コスト) s.t. Pij≥0∀i,j(輸送量は非負)∑j=1mPij=1n∀i(余りなし)∑i=1nPij=1m∀j(不足なし)\begin{align} \underset{P \in \mathbb{R}^{n \times m}}{\operatorname{minimize}} & \sum_{i=1}^n \sum_{j=1}^m C\left(x_i, y_j\right) P_{i j} \quad(総コスト)\\ \text { s.t. } & P_{i j} \geq 0 \quad \forall i, j \quad(輸送量は非負)\\ & \sum_{j=1}^m P_{i j}=\frac{1}{n} \quad \forall i \quad(余りなし)\\ & \sum^n_{i=1} P_{i j}=\frac{1}{m} \quad \forall j \quad(不足なし) \end{align}

ここで決定変数PijP_{ij}は点iiから点jjに輸送する量を表す

連続最適輸送

連続の場合は難しいので、サンプリングして点群にしたり双対にしたりする(最適輸送入門 - Speaker Deck)

関連文献