この広告は、90日以上更新していないブログに表示しています。
輸送問題と呼ばれる問題があります.この問題は,普通は線形計画法やフローのアルゴリズムを使って解かれます.この記事では,この輸送問題を近似的に行列計算で解くアルゴリズム(エントロピー正則化 + Sinkhorn-Knoppアルゴリズム)を紹介します.
輸送問題とは以下のような問題です.
輸送問題は最適化の歴史の中でもかなり初期から考えられている問題です.現実世界での応用が多く,さらに最大マッチングや最小重みマッチングを特殊ケースとして含む,重要な最適化問題です.(2023/11/13 註: 工場の数と店舗の数は違っていても以下と同様の議論が可能です.この記事では,説明の簡単のため工場の数と店舗の数が等しいとしています)
さて,この問題は数式で書くと以下のような最適化問題になります.
は整数値であるという制約を加えることもありますが,今回は連続値だとしましょう.
この問題は線形計画問題と呼ばれる問題クラスに入りますので,線形計画問題のアルゴリズム(単体法,内点法)を用いて解くことができます.さらに言えば,この問題はその中でもさらに特殊な,最小費用流問題という問題に帰着することができ,専用のアルゴリズムを適用することでより高速に解くことができます.
しかし,線形計画問題や最小費用流問題を解くためのアルゴリズムは比較的複雑で,実装するのは一手間です.また,計算量が 程度かかるのであまりスケールしません.これらの問題を解決するアルゴリズムはないのでしょうか?
実は近似解で良ければそのようなアルゴリズムを構築することができます.このアルゴリズムは以下の特長を持ちます.
これが,本記事のテーマである「エントロピー正則化項を加えた輸送問題を Sinkhorn-Knoppアルゴリズムを用いて解く手法」です.
アルゴリズムは以下です.
これだけです.とてもシンプルですね.20行くらいで実装できそうです.なんとこのシンプルなアルゴリズムがかなり良い解を出力してくれるのです.
ハイパーパラメータ は,アルゴリズムの性能をコントロールします.
が大きいほど出力が真の解に近づきますが,収束が遅くなります.また,
を計算する必要があるため,
が大きいとき数値的に扱いが難しくなります.
ランダムに作った輸送問題のケースを,最小費用流及び Sinkhorn-Knoppアルゴリズムで解いた際の解 の様子を図示したのが以下の図です.左上が最小費用流のアルゴリズムによる最適解であり,それ以外は
を色々変えた場合の Sinkhorn-Knoppアルゴリズムの出力です.

の例.SK は Sinkhorn-Knopp の略
見ての通り, を小さく設定した場合は Sinkhorn-Knoppアルゴリズムの出力は「ボヤッと」していて最適解からは程遠いですが,
が大きくなるにつれて最適解に近づいていることが分かります.それに伴い,目的関数値も最適値に近づいていきます.ちなみに全ての
について,制約を(ほぼ)満たす解が出力されています.
気になるのはなぜこんなアルゴリズムで輸送問題が解けてしまうか?です.これについて,数学的に厳密な議論ではないですが直感的に説明します.
実は,このアルゴリズムは輸送問題を少し変形した以下の問題を解いています.
目的関数に何か余計な項が入っていますね. という項は,
を確率分布と見做した場合のシャノンのエントロピー(に
をかけたもの)として捉えることができます.そのため,この項はエントロピー正則化項と呼ばれます.
はエントロピー正則化の強さをコントロールする係数です.
が大きくなるともとの輸送問題に近づき,小さくなるともとの輸送問題から遠ざかります.エントロピー正則化項を小さくするということは,
を全体的に「ボヤッとさせる」「曖昧にさせる」ことになります(
の要素が全て等しい場合にエントロピーは最大になる).
さて,エントロピー正則化項を足した新しい最適化問題について,ラグランジュ関数を書いてみると,
となります.ただし, は 全ての要素が
の
次元縦ベクトル,
は
を並べた
行列です.
このとき簡単な計算によって,全ての] について
となります.ただし, とおきました.
数式 (3) の言っていることは,「行列 は,行列
の
行目に
を,
列目に
を掛けた形になっている」ということです.
さらに,行列 はもとの問題の制約
を満たす必要があります.
(3)(4)(5) を満たすような行列 (もしくは
及び
)を見つけるため,以下のような簡単なアルゴリズムを考えてみます.
行の定数倍と列の定数倍を,制約を満たすように交互に繰り返すイメージです.このアルゴリズムが,まさに Sinkhorn-Knoppアルゴリズムと呼ばれるものです.直観的で単純なアルゴリズムですが,実はこのアルゴリズムがうまくいくことを理論的に示すことができます.特に,
が示されています.厳密な数学的な議論に関してはこの論文 の Chapter 4 などを参照してください.
紹介したアルゴリズムは近似解法であり,厳密な最適解を求めさせることの多い競プロの問題(特にマラソンではなくアルゴリズムのコンテスト)では適用は難しそうです.しかしどこまで解けるのかも気になるということで, opt さん (@opt_cp) がいくつかの問題(これとこれ)に挑戦してくれました!
方法は,輸送問題として定式化→エントロピー正則化 + Sinkhorn-Knoppアルゴリズムで解く→結果を適当に丸めることで整数実行可能解を得る,というものです.
結果としては,
という感じのようです.ただ,今回適用したのはかなりシンプルな手法であり,色々と発展手法もあるようなので,それらを用いればまた状況も変わるかもしれません.また,厳密解が必要ではない場面(マラソンなど)では使える可能性はあると思います.
さて,話は変わるのですが,輸送問題を Sinkhorn-Knoppアルゴリズムで解く周辺の話は機械学習界隈で大流行しています.このことについて少し説明します.
冒頭の問題では や
は商品の量として説明しましたが,これを
次元空間における確率分布(確率ベクトル)として捉えてみましょう.例えば
] などは
次元確率ベクトルです.
このとき,問題 (1) の最適値は,「確率分布 から確率分布
に確率を輸送する際に,必要な最小コスト」になります.これを
と書くことにしましょう.実は,
は,確率分布
と確率分布
の近さ,つまり確率分布間の距離として用いることができます.実際,コスト行列
が距離の公理を満たすとき,
も距離の公理を満たす距離関数になることが知られています.
は最適輸送距離と呼ばれます.
さて,機械学習においては確率分布間の近さを測ることはひじょーーーーーーに重要です.最も基本的な操作と言っても良いくらいだと思います.一般にこの用途でよく用いられるのは Kullback-Leibler Divergence や Jensen–Shannon Divergence などの尺度です.しかし,最適輸送距離はこれらにはない特長をいくつも持つため,重要視されています(「もとの空間の距離を反映した確率分布間の距離になっている」「二つの確率分布のサポートが一致しない場合にも定義できる」など).
このような重要な最適輸送距離ですが,一つ大きな欠点を抱えていました.計算量です.というのも,最適輸送距離を求めるためには上で述べたように輸送問題を解く必要があり,大きな計算量がかかってしまいます.機械学習ではかなり高次元の確率分布も扱うので,この計算量は重すぎます.
この問題を解決し,最適輸送距離の応用範囲を大きく広げたのが,今回紹介した Sinkhorn-Knoppアルゴリズムによる近似的な最適輸送距離の計算です.この手法は NIPS 2013 の"Sinkhorn Distances: Lightspeed Computation of Optimal Transport" という論文で提案されました.現在ではこの論文は 1400 件近く引用されている,この分野では記念碑的な論文になっています.流行は続いており,最適輸送に関する論文が機械学習の国際会議である NeurIPS や ICML,ICLR などでも現在でもたくさん発表されているという状況です.(ただ,最適輸送が流行っているのは,最適輸送を使った GAN が有名になった等の別の理由もあったりします)
ちなみに,この最適輸送問題は Monge-Kantorovich の問題と呼ばれたりもして,競プロでお馴染み Monge さんがこんなところにも現れます.また,コスト行列 が Monge 性を満たす場合,輸送問題は効率的に解けるという話もあったりします.
ややこしそうな最適化問題がこんな単純な行列計算で(近似的に)解けるのはけっこーびっくりですね.アルゴのコンテストでは厳しいかもだけどマラソンとかでは使えることがあるかもね
公開前にこの記事を読んで有益なコメントをたくさん下さった opt さん (@opt_cp) に感謝します.
引用をストックしました
引用するにはまずログインしてください
引用をストックできませんでした。再度お試しください
限定公開記事のため引用できません。