Slide 1

Slide 1 text

May 21, 2020 @cocomoff

Slide 2

Slide 2 text

概要 これまで専⽤アルゴリズムで解いていた最適化問題 (TSP/VRP/OP/PCTSP) をPointer-Network を拡張したNN で解く PyTorch 版 https://github.com/wouterkool/attention-learn-to-route モデルの基本的なアイデア ⼊⼒はTSP の地点座標 ( 地点数 のtorch.tensor) Encoder-decoder 型のモデルで次に訪問すべき地点を決定 BN とmulti-head attention を使って隠れ層に埋め込む コンテキスト ( 今何地点訪れたかを考慮して を拡張) を計算 適当に出⼒をclip してsoftmax に⼊れて地点を決定する 学習の基本的なアイデア 強化学習界隈で基本的な⼿法であるベースラインつきREINFORCE ベースラインとしてgreedy な経路を使う 1/12 n × 2 h

Slide 3

Slide 3 text

実験 | 環境設定 地点数 について各問題を解いた 学習時にたくさんインスタンスをつくる (100,000 とか?) Every epoch we process 2500 batches of 512 instances e.g., で5:30/epoch, で16:20/epoch の訓練時間 100 epochs 学習してから10000 個のテストインスタンスで評価 学習率は定数 ( ) だけど,適当にdecay した⽅が安定した Encoder は3 層 Decoder greedy 毎回最良の⾏動を洗濯して解をつくる sampling 1280 解をサンプルして,最良を選ぶ 既存⼿法は3 パターン ( 専⽤exact/heuristics ,既存のNN ⼿法) できるだけ環境を揃えて実⾏して⽐較した ( とのこと) 2/12 n = 20, 50, 100 n = 20 n = 50 η = 10−4

Slide 4

Slide 4 text

実験 | TSP 3/12

Slide 5

Slide 5 text

実験 | CVRP/SDVRP CVRP はTSP の容量付き+ 復数⾞両版 SDVRP はルートを分割しても良いタイプのTSP 3/12

Slide 6

Slide 6 text

実験 | OP/PCTSP OP はmin. cost ではなくmax. profit 型の問題 PCTSP/SPCTSP は訪問しなくてもいいタイプのTSP ( ペナルティ付き) 4/12

Slide 7

Slide 7 text

背景 ( 既存の研究アプローチ) (1/3) NN で最適化するアプローチはHopfield&Tank (1985) ぐらいからある Pointer Network (Vinyals et al. NIPS2015) 左: seq2seq で直接頂点番号を出⼒するアプローチ 右: PN .Decoder 側にも⼊⼒データの特徴 ( 座標) を⼊れ,凸包の頂 点を指し⽰すようなAttention を作る 5/12

Slide 8

Slide 8 text

背景 ( 既存の研究アプローチ) (2/3) Bello et al. 2016 (ICLR2017 WS) PN + Actor-Critic Actor-Critic: ⾏動する側(Actor) と⾏動を評価する側(Critic) を同時学 習するタイプの⼿法.実際にはREINFORCE( 評価は状態⾏動価値を 学習ではなく,報酬の平均で⾏う) Nazari et al. NeurIPS2018 VRP を解くようにPN (LSTM を変更) 6/12

Slide 9

Slide 9 text

背景 ( 既存の研究アプローチ) (3/3) Daiet al. NIPS2017, Nowak et al. 2017, Kaempfer et al. 2018 Decoder-Encoder 型ではなく,1 つのモデル (GNN とか) で解く 他にもTransformer-inspired なモデルとかもある Deudon et al. CPAIOR2018 2OPT local search という探索⼿法をアテンションで学習して再現 これはBello et al. の追試っぽい感じ ( 報酬が2OPT-based) これぐらいのが解ける 7/12

Slide 10

Slide 10 text

提案⼿法 (1/4) | Encoder 次の確率をモデル化したい ( その後サンプリングして解を作成): は問題イ ンスタンス (e.g., 2 次元座標) , は出⼒の順列: Encoder 8/12 s π

Slide 11

Slide 11 text

は座標 を線形で埋め込み ( ) は 個のMulti-Head Attention を適⽤して作成 h(0) x h = (0) W x + x b h(i) M

Slide 12

Slide 12 text

Attention (Dot-product attention (?)) Multi-head attention (MHA) 別のパラメータを作って 本アテンションを作り,線形結合 FF (Feed-forward sublayer) 線形変換してReLU (1 層⽬以外) BN (Batch Normalization) 例のあれ M

Slide 13

Slide 13 text

提案⼿法 (2/4) | Decoder 埋め込んだ を使い,順列の⽣成を⾏う ⼤まかな構造は普通のDecoder と同じ Decoder への⼊⼒として,埋め込んだ だけじゃなく,「最初の地点」と 「1 つ前の地点」を使う ( これをcontext embedding と呼ぶ.図の○3 つ) 事前に訪問した地点は訪問しないので,mask で-∞ にする 3124 を⽣成する図 9/12 h h

Slide 14

Slide 14 text

提案⼿法 (3/4) | 学習 作ったNN はインスタンス から を⽣成するモデル 期待コスト = loss をgrad. descent する REINFORCE . はNN でモデル化.ベースライン は このサンプル評価値からのgrad. descent を安定させる. いろいろな⼿法で を⼊れてもよいが,「インスタンスにアルゴリズ ムを適⽤してみたら,難しさは評価できるだろう」という期待 ある地点のパラメータ を固定して,greedy rollout を作成 greedy rollout より良い順回路が⾒つかれば,報酬が伝わって もしパラメータに優位な差ができたら,更新する 10/12 s π p (π ∣ θ s) L(θ ∣ s) = E [L(π)] p (π∣s) θ ∇ log p (π ∣ θ s) b(s) b(s) θ

Slide 15

Slide 15 text

提案⼿法 (4/4) | 学習 5 ⾏⽬でランダムインスタンスを作成 6 ⾏⽬〜7 ⾏⽬で現在と今設定されているベースラインをやってみる 8 ⾏⽬〜9 ⾏⽬で誤差を評価し,学習を⾏う 11 ⾏⽬〜13 ⾏⽬で適当にパラメータを更新する 11/12

Slide 16

Slide 16 text

ベースラインの⽐較 提案⼿法(AM) とPointer Network(PN) の⽐較 ロス計算に⽤いているベースライン を3 つ変えた場合の挙動 Rollout と書いてあるやつが実験で使っているGreedy Rollout Critic は をNN で推定して使う (NN 中⾝はEncoder と似ている) Exponential は計算したロスをexp でdecay させるbaseline 12/12 b(s) V (s)