Upgrade to Pro — share decks privately, control downloads, hide ads and more …

Kaggle Traveling Santa 2018 - 4th Place Solution

Avatar for Takuya Akiba Takuya Akiba
January 18, 2019
3

Kaggle Traveling Santa 2018 - 4th Place Solution

Avatar for Takuya Akiba

Takuya Akiba

January 18, 2019
Tweet

Transcript

  1. 今日の話は? ⚫ 今冬の Kaggle サンタコンペで 1874 チーム中 4 位・金メダルを獲得した ⚫

    特に、PFN で作っている Optuna を使った ⚫ どんなことをしたのか簡単に解説
  2. ちなみに: Kaggle の金メダル ってどのぐらい難しいの? ⚫ だいたい「Top 10 入賞」を意味する ⚫ 金メダルを

    1 個取れば Kaggle Master 本当はそれに加えて銀メダル以上が 2 個必要だが、 金メダルを実力で取れるレベルの人にとって銀メダルは参加賞ぐらい。 (※銀メダルも初心者には結構大変、しかし金はそれよりさらに大変) ⚫ 金メダルを 5 個取れば Kaggle Grandmaster 5 個のうち 1個 はチームを組まず一人で獲得する必要あり。 いわゆる「ソロゴールド」。 ちなみに僕は Kaggle Master で、金メダルはこれで 4 個目。
  3. 今年のサンタコンペ Traveling Santa 2018 - Prime Paths ⚫ 大体「巡回セールスマン問題 (TSP)」

    ⚫ ただし、「スコア = 通常の距離 + ペナルティ」 ペナルティ: 10 の倍数回目の移動それぞれに関して ⚫ 頂点番号が素数の頂点から移動する場合 → ペナルティなし ⚫ そうでない場合 → このステップの移動距離 × 0.1 がペナルティ 「謎ペナルティがたまに加わる TSP 亜種なんだな」程度の理解で今日の話 はついてこれるはず
  4. 入力 頂点座標 疎グラフ 経路 ① 普通の TSP ペナルティを無視し距離を最適化 ② Prime

    TSP ペナルティも考慮し最適化 LKH-2 K-opt Hillclimb 経路 経路 経路 経路 経路 Optuna Asynchronous Successive Halving 自作ソルバ K-opt Hillclimb α-nearness Merge Solution Kick
  5. 入力 頂点座標 疎グラフ 経路 ① 普通の TSP ペナルティを無視し距離を最適化 ② Prime

    TSP ペナルティも考慮し最適化 LKH-2 K-opt Hillclimb 経路 経路 経路 経路 経路 Optuna Asynchronous Successive Halving 自作ソルバ K-opt Hillclimb α-nearness Merge Solution Kick 今日は省略 Part 4 Part 6 Part 5
  6. 入力 頂点座標 疎グラフ 経路 ① 普通の TSP ペナルティを無視し距離を最適化 ② Prime

    TSP ペナルティも考慮し最適化 LKH-2 K-opt Hillclimb 経路 経路 経路 経路 経路 Optuna Asynchronous Successive Halving 自作ソルバ K-opt Hillclimb α-nearness Merge Solution Kick
  7. 入力 頂点座標 疎グラフ 経路 ① 普通の TSP ペナルティを無視し距離を最適化 ② Prime

    TSP ペナルティも考慮し最適化 経路 経路 経路 経路 経路 Optuna Asynchronous Successive Halving 自作ソルバ K-opt Hillclimb α-nearness Merge Solution Kick LKH-2 K-opt Hillclimb
  8. LKH-2 とは? ⚫ TSP の現行最強ヒューリスティックソルバ ⚫ K-opt (Lin-Kernighan Heuristic) を

    独自にもりもり改善しまくり効率的に実装 ⚫ Prime TSP の最適化のスタート地点として 優れた経路を得るために使った 上位のほぼ全チームは LKH-2 を同じように使ったのではないか
  9. K-opt (Lin-Kernighan Heuristic) ⚫ 2-opt や 3-opt の一般化 ⚫ 今回我々が使ったのは

    K=8 (8-opt) とか ⚫ K に対して指数的に計算量が増加する ⚫ 大きい K についての探索を現実的にする 工夫が色々取り入れられている sequential exchange への限定など
  10. LKH-2 全体 ⚫ 1 Trial = K-opt による局所最適解への到達 ⚫ 1

    Run = 複数 Trial (1000 とか 106 とか) ⚫ Trial の間には「Kick」と呼ばれる、 解を壊す操作が入る 局所最適解を抜け出し次は違う局所最適解に到達するため
  11. 入力 頂点座標 疎グラフ 経路 ① 普通の TSP ペナルティを無視し距離を最適化 ② Prime

    TSP ペナルティも考慮し最適化 LKH-2 K-opt Hillclimb 経路 経路 経路 経路 経路 Optuna Asynchronous Successive Halving 自作ソルバ K-opt Hillclimb α-nearness Merge Solution Kick
  12. LKH-2 K-opt Hillclimb 入力 頂点座標 疎グラフ 経路 ① 普通の TSP

    ペナルティを無視し距離を最適化 ② Prime TSP ペナルティも考慮し最適化 経路 経路 経路 経路 経路 Optuna Asynchronous Successive Halving α-nearness Merge Solution Kick 自作ソルバ K-opt Hillclimb
  13. Prime TSP ソルバ ⚫ ペナルティを加味した最適化をする ⚫ LKH-2 の出した TSP の良い解からスタート

    適当な初期解からの最適化では非現実的なぐらい時間がかかってしまう ⚫ Rust で書いた
  14. Prime TSP ソルバ 基本路線:ペナルティを加味した K-opt 工夫: (今日はついてこれる人少ないと思うので飛ばします) ⚫ LKH と似た枝刈りが使えないので

    両側探索を用いて K-opt を効率的に探索 ⚫ セグメント木を用いた効率的な non-sequential 4-opt, 5-opt の探索 ⚫ 深い局所解から脱出するための 解のマージを用いた kick
  15. 入力 頂点座標 疎グラフ 経路 ① 普通の TSP ペナルティを無視し距離を最適化 ② Prime

    TSP ペナルティも考慮し最適化 LKH-2 K-opt Hillclimb 経路 経路 経路 経路 経路 Optuna Asynchronous Successive Halving 自作ソルバ K-opt Hillclimb α-nearness Merge Solution Kick
  16. 自作ソルバ K-opt Hillclimb LKH-2 K-opt Hillclimb 入力 頂点座標 疎グラフ 経路

    ① 普通の TSP ペナルティを無視し距離を最適化 ② Prime TSP ペナルティも考慮し最適化 経路 経路 経路 経路 経路 α-nearness Merge Solution Kick Optuna Asynchronous Successive Halving
  17. 背景 ⚫ LKH-2 には大量のハイパラがある ハイパラのマニュアルの PDF が 8 ページ ⚫

    Prime TSP は局所解の脱出が難しい ⚫ スタートする TSP 解が良いと Prime TSP でも良い解になる傾向がある ⚫ 良い解が一杯作れると、混ぜ合わせることで 更に良い解が作れることが分かった (解のマージを用いた kick)
  18. Optuna の使い方 ⚫ ハイパラが多すぎる → 手法の理解と事前の実験であたりをつけた ⚫ LKH-2 の最適化は終わりがない (時間をつぎ込めばつぎ込むほど解が良くなっていくので)

    → ASHA によって枝刈りされた時のみ終了 ⚫ パラメタのエンコーディングの工夫 最終的なパラメータは KICK_TYPE, KICKS, SEED。 ASHA + Random Search で最適化。 SEED は初期解を左右するので結果にそれなりに影響がある。 301 trials やっていた。
  19. Optuna を使った TSP 解の発見 ⚫ Kaggle Kernel で公開されてる一番良いやつ: 1503092.15 ⚫

    我々が手で見つけてたやつ: 1502661.47 ⚫ Optuna で見つかった一番良いやつ: 1502582.97 実際には、距離だけでなくペナルティも良いやつを初期解として選んでいた。
  20. まとめ ⚫ 今年の Kaggle サンタコンペは TSP 亜種だった ⚫ LKH-2 と自作ソルバと

    Optuna を使った ⚫ 1874 チーム中 4 位で金メダル獲得 「Optuna を使って Kaggle で金メダルを取る」 という個人的な野望を達成……!