Lock in $30 Savings on PRO—Offer Ends Soon! ⏳

最適化超入門

 最適化超入門

この「最適化超入門」は、『最適化したい!』と思った時に、最初に参考になりそうなものをつらつらと語りました。

Takami Sato

May 31, 2024
Tweet

Other Decks in Science

Transcript

  1. 最適化超入門 Takami Sato University of California, Irvine Department of Computer

    Science (Twitter id: tkm2261) May 30, 2024 最適化超入門 1
  2. 最適化ってすごいの? 『機械学習の学習 ≒ 最適化』の場合がほとんど May 30, 2024 最適化超入門 2 最尤推定

    (尤度関数最大化) 主成分分析 (分散最大化) サポートベクターマシン (マージン最大化) 協調フィルタリング (Nuclearノルム最小化等)
  3. 最適化ってすごいの? データ分析のお仕事でも・・・ May 30, 2024 最適化超入門 3 納品物 : レポート

    アクション: 提案はするが・・・ 納品物 : 施策 (レポートも) アクション: 即実行 施策まで落ちるとクライアントも本気 分析のみ 分析 + 最適化
  4. 1.最適化チートシート May 30, 2024 最適化超入門 7 連続最適化 組合せ最適化 制約なし 制約あり

    微分情報なし 微分情報あり 線形 非線形 線形 非線形 自前実装 対策 ü シンプレックス法 ü 黄金分割法 ü ニュートン法 ü 最急降下法 ü 共役勾配法 ü 準ニュートン法 ü 線形計画法※ ü 有効制約法 ü 逐次二次計画法※ ü 混合整数計画法※ ソルバ必須 ü メタ解法※ 近傍定義が必要 ü メタ解法※ 近傍定義が必要 ü 制約プログラミング※ ソルバ必須 状況に応じて ソルバの 導入を推奨 独断と偏見による、最適化の種類と対策チートシート。基本的に自前実装は最終手段 ※はアルゴリズムでなくフレームワーク
  5. 1.最適化チートシート May 30, 2024 最適化超入門 8 連続最適化 組合せ最適化 制約なし 制約あり

    微分情報なし 微分情報あり 線形 非線形 線形 非線形 自前実装 対策 ü シンプレックス法 ü 黄金分割法 ü ニュートン法 ü 最急降下法 ü 共役勾配法 ü 準ニュートン法 ü 線形計画法※ ü 有効制約法 ü 逐次二次計画法※ ü 混合整数計画法※ ☓ソルバ必須 ü メタ解法※ ◎近傍定義が必要 ü メタ解法※ ◎近傍定義が必要 ü 制約プログラミング※ ☓ソルバ必須 状況に応じて ソルバの 導入を推奨 独断と偏見の最適化の種類と対策チートシート。基本的に自前実装は最終手段 ※はアルゴリズムでなくフレームワーク 実社会の最適化問題の9割以上が組合せ最適化 Ø配送最適化 Ø施設配置問題 Øスケジューリング …
  6. 1.最適化チートシート May 30, 2024 最適化超入門 9 連続最適化 組合せ最適化 制約なし 制約あり

    微分情報なし 微分情報あり 線形 非線形 線形 非線形 自前実装 対策 ü シンプレックス法 ü 黄金分割法 ü ニュートン法 ü 最急降下法 ü 共役勾配法 ü 準ニュートン法 ü 線形計画法※ ü 有効制約法 ü 逐次二次計画法※ ü 混合整数計画法※ ☓ソルバ必須 ü メタ解法※ ◎近傍定義が必要 ü メタ解法※ ◎近傍定義が必要 ü 制約プログラミング※ ☓ソルバ必須 独断と偏見の最適化の種類と対策チートシート。基本的に自前実装は最終手段 ※はアルゴリズムでなくフレームワーク 組合せ最適化 線形 非線形 ü 混合整数計画法※ ☓ソルバ必須 ü メタ解法※ ◎近傍定義が必要 ü メタ解法※ ◎近傍定義が必要 ü 制約プログラミング※ ☓ソルバ必須 機械学習や組合せ最適化の内部で必須 高速に解くことを義務づけられている 状況に応じて ソルバの 導入を推奨
  7. 微分不可能な最適化 目的関数の値しかわからない場合の最適化 May 30, 2024 最適化超入門 12 シンプレックス法 [Nelder+ 1965]

    最適化する空間の次元より1つ多い多面体を使って最適化 4つの操作で、どんどん良い解を見つけていく。通称アメーバ法 2次元上の最適化なら、3点の目的関数値を計算して・・・ 鏡映 拡張 収縮 縮小
  8. コレが使えるなら話は早いニュートン法 May 30, 2024 最適化超入門 16 高速に収束(2次収束) - ニュートン法が使える問題ならニュートン法で問題ない ヘッセ行列の逆行列の計算及び保持が必要

    - 近年の大規模な問題ではメモリ的に使えない場面が多い - そのため機械学習では1次解法がメイン 降下方向を生成しないことがある。( 修正ニュートン法) 利点 欠点
  9. 全ての始まり最急降下法 2次近似できないなら、勾配方向に降りればいいじゃない May 30, 2024 最適化超入門 18 𝑥$ 𝑥# 𝑥%

    最急降下法 反復点の勾配が最もキツイ方向に進む手法。 最適化のベンチマーク的手法
  10. 直線探索(ラインサーチ)について May 30, 2024 最適化超入門 21 方向が決まっても、どこまで行けばよいの? 方法1: 厳密に解く 基本出来ないことが多い

    方法2: 運を天に任せる 最近のDeep Learning界隈では学習率0.1固定をよく見る 方法3: 収束性が保証されてる、先行研究を使う Armijo条件 (Scipy実装の挙動がおかしいので後述の数値実験では自前実装) Wolfe条件 直線探索(ラインサーチ)
  11. 共役勾配法 勾配だけでも、もう少し工夫したい May 30, 2024 最適化超入門 22 共役勾配法 引用: http://ja.wikipedia.org/wiki/%E5%85%B1%E5%BD%B9%E5%8B%BE%E9%85%8D%E6%B3%95

    理論的に超絶美しいが、割愛。実装も簡単 現象面だけに着目すると、 過去の探索方向を考慮に入れた探索方向を生成するので、 ジグザグが緩和される手法 緑線:最急降下法 赤線:共役勾配法
  12. (参考) 線形方程式解法としての共役勾配法 共役勾配法は元は線形方程式の解法として登場 [Hestenes+ 1952] May 30, 2024 最適化超入門 23

    を解きたい。 n次元正定値行列 を解くのと等価 共役勾配を使えば、反復解法なのに 有限回の反復で厳密解が求まることを発見 世界に激震が走ったらしい
  13. (参考) 線形方程式解法としての共役勾配法 行列の疎性を効率的に利用可能 - 大規模線形方程式が解ける 実装も簡単 May 30, 2024 最適化超入門

    24 大規模線形方程式の解が、多少精度悪くても必要な場合に有効 リコメンドアルゴリズム等でも使われている 利点 欠点 数値誤差で、有限回の反復で収束しない 固有値の分布で収束性が激変 - 前処理地獄に陥ることも リンク伝播法:リンク予測のための半教師付き学習法 (http://www.geocities.jp/kashi_pong/publication/FPAI73.pdf)
  14. (参考) 線形方程式解法としての共役勾配法 Scipyにもたくさん実装されている。 (http://docs.scipy.org/doc/scipy-0.14.0/reference/sparse.linalg.html#module-scipy.sparse.linalg) May 30, 2024 最適化超入門 26 Q:

    Aが正定値行列じゃないと解けないの? A: Krylov部分空間法として一般化されている Q: 一般の最適化問題に共役勾配法使って良いの? A: 良いが、もちろん有限回の反復で収束しません 直線探索も基本的に必要 Fletcher–Reeves法や Polak–Ribiere法などがあります
  15. 結局何を使えばいいの? May 30, 2024 最適化超入門 28 その他にも色々あります。 Deep LearningのライブラリのあるH20では Nesterovの加速勾配法(1次解法)を使っていたりします

    語弊を恐れずにまとめると、こんな感じ 手法 収束性 メモリ ニュートン法 ◎ ☓ 準ニュートン法 ◦ △ 共役勾配法 △ ◦ 最急降下法 ☓ ◎ 試す順番
  16. 線形計画問題(Linear Programing: LP)とは 原料種類 製品A 製品B 使用可能量 原料A 12 8

    450kg 原料B 3 6 220kg 原料C 10 10 420kg May 30, 2024 最適化超入門 33 製品A の利益(万円/kg) 製品B の利益(万円/kg) 8 13 製品Aと製品Bを作るのに必要な材料と使用可能量が以下で 製品Aと製品Bの利益が以下のとき、 利益の最大になるのは、どのような製造量か?
  17. 大人はどう解くかというと・・・ STEP1: 最適化モデリング言語を使ってモデル化 有償ソルバにはPython、R、MATLABのものがだいたい付属 STEP2: 線形計画ソルバーに解いてもらう ※混合整数計画ソルバと大体同じなので、後述 May 30, 2024

    最適化超入門 36 MCMCの STANみた いな感じ AMPL 有償の最適化モデリング専用言語。 Pythonでのモデリングが主流になってからは下火 PuLP 無償のPythonの最適化モデリングモジュール 今回はこれでサンプルを作成。 Pythonで出来るのが最大の利点だが、商用利用に不安アリ JuliaOpt 最近出てきたJuliaの最適化モデリングモジュール。無償 MITのチームが頑張って開発しているらしく、今後に期待 ⾃前実装は、 やらないほ うが無難
  18. 応用例 May 30, 2024 最適化超入門 40 分散を最小化 投資比率は足して1 最低これだけは儲けてね 空売り禁止

    ポートフォリオ最適化(平均分散モデル) サポートベクターマシン(SVM)
  19. みんな大好き遺伝的アルゴリズム 最適化分野で最も中2心をくすぐるアルゴリズム May 30, 2024 最適化超入門 44 遺伝的アルゴリズム (Genetic Algorithms:GA)

    生物進化の仕組みを模倣して、より良い解を見つけるメタ解法のひとつ 引用: http://www.sist.ac.jp/~kanakubo/research/evolutionary_computing/genetic_algorithms.html 選択淘汰: 強い個体(良い解)が 生き残りやすい 交叉: 次世代を作る 突然変異: 突然変異種を作る
  20. メタ解法とは 組合せ最適化に対する汎用的な発見的解法(精度保証ナシ) May 30, 2024 最適化超入門 45 基本的に2つの部品で構成 遺伝的アルゴリズムを強引にあてはめると (GAは若干特殊ケース)

    近傍探索 (ローカルサーチ) 突然変異 交叉 解の更新戦略 選択淘汰 近傍探索 (ローカルサーチ) 現在の解の周り(近傍)に良い解がないか探索 解の更新戦略 近傍探索で見つかった解のどこに移動するか ※普通は近傍探索には含まない
  21. 解の更新戦略による手法のバリエーション May 30, 2024 最適化超入門 49 解の更新戦略 遺伝的アルゴリズム(GA) 選択淘汰 タブーサーチ

    (TS) 過去に行った解には一定期間行かない シミュレーテッド アニーリング法 (SA) 確率的に改悪解への移動を許可する。 メタ解法は挙げると切りがないので、主要3手法のみ紹介
  22. メタ解法の独断と偏見による考察 May 30, 2024 最適化超入門 50 遺伝的アルゴリズム (GA) ü 解をたくさん保持するので、

    多様な解を得られるがメモリを喰う ü 手順が多いのでパラメータが多く調整が大変 ü 解がバイナリ列なら、先行研究が多い タブーサーチ (TS) ü シンプルでクライアントに説明しやすい ü 過去の解の持ち方に工夫が必要 シミュレーテッド アニーリング法 (SA) ü 最適解への収束性を確率的に保証できる優等生 ü 現在解と最良解しか持たないのでメモリに優しい ü パラメータが少ないので実装簡単 ü ランダムネスを含んでいるので敬遠することも
  23. 配送最適化 解説 May 30, 2024 最適化超入門 59 部分巡回路除去制約 この定式化の肝、 次数制約だけではデポを含まないルート(部分巡回路)を生成

    積載量を単調増加させてデポ以外でルートを作れなくする しかし、混合整数計画法ではIF文を扱えないのでBigM法を使う ※BigM法はデメリットも大きいので用法用量を守りましょう
  24. 参考となる定式化 May 30, 2024 最適化超入門 61 そんなこと言っていても何も始まらないので 独断と偏見で、知っておくと応用範囲の広い定式化を紹介 配送最適化 次数制約など、ネットワーク上の定式化を理解出来る。

    部分巡回路除去制約も時間の制約に拡張できる これが分かれば施設配置問題も楽勝 集合被覆問題 いろんなパーツを使って全体をカバーする感覚が需要 少し、工夫するとそのままシフトスケジューリングになる。
  25. ソルバーについて May 30, 2024 最適化超入門 63 GLPK GPLライセンスのソルバーため商用でも使い難く、最遅ソルバーの呼び声も高い。 ただし、導入の容易性、AMPLファイルが扱える、日本語の資料が豊富などの利点があり、 授業でも使われることも多く、一定の市民権を得ている

    CBC (CoinMP) Coin-ORというIBMのオペレーションズ・リサーチのオープンソースプロジェクトの一つ CPLライセンスのため商用利用できて、かつ速度もそこそこなので、よく用いられる 欠点としては、英語ですらドキュメントが皆無 SCIP 一応、無料ソルバーでは最速と言われている。 しかし、ZIB Academic Licenseという商用不可のライセンスのため、 使っているところはほとんど見ない。 アカデミックならGurobiもCPLEXもタダで使えるし・・・ 無料ソルバー
  26. ソルバーについて May 30, 2024 最適化超入門 64 Gurobi ü 世界的にも最も使われているソルバー(と思われる。) ü

    速度が速いのはもちろんのこと、 活発に開発が進んでおりバージョンが上がるたびに先進的な機能が追加されている。 ü いち早くPythonインターフェイスを導入して、最適化屋さんをC言語から救った功績も あり、様々な点で業界をリードしている。 CPLEX ü 元はGurobiの中の人達がやっていたILOG社の製品だったが、 IBMが買収してIBM CPLEXとなったソルバー ü 買収後の大幅値上げ、Pythonインターフェイス導入遅れ、Gurobiの台頭などにより 最近はほとんど話を聞かない ü 最適化≒CPLEXだった時代もあり、悪いソルバーではないのだが・・・ Xpress Ø 使ったことないのでノーコメント 有料ソルバー
  27. 最適化の実務的な注意点 May 30, 2024 最適化超入門 66 優秀なエンジニアを早めに味方につけておく - 最適化案件は上手く行けば行くほどツール化の話になります -

    最適化は時間がかかるため、ジョブの管理や 『以前の解を保存→初期解として利用』など高度なことが要求されます - 設計だけでも相談しておくと、後々の大事故を防げます お客様は待ってくれない - 最適化屋さんは平気で1時間、1日単位の計算をするが、 お客様はボタン押したら結果がポンっと出てくると考えている - 想定1分、待って5分といったところ - 数時間が許される案件もあるが、 早めに認識を合わせて置かないと大事故につながる
  28. 制約プログラミング(Constraint Programming: CP) May 30, 2024 最適化超入門 68 制約と変数の範囲を与えると、効率良く列挙するフレームワーク ソルバーが少ないのもあり利用例が少ないが、陽の目を見て欲しい手法

    利点 欠点 ・ 変数の掛け算(非線形)、論理式制約なんでもゴザレ ・ 最適性の保証はないが、ライブラリによっては オプション一つでメタ解法を使えることもあり、かなり便利 ・ 基本的に変数の範囲を離散値で指定する必要がある ・ ソルバーが少ない
  29. 制約プログラミング(Constraint Programming: CP) May 30, 2024 最適化超入門 69 IBM ILOG

    CP CPLEXと同じ元ILOG社の製品 使ったことないのでノーコメント 有償 Google CP Solver ILOG社がIBMに買収された時に、CPソルバーチームがGoogleに移籍して開発 使い勝手は結構良かったが、インストールに苦労した記憶がある 無償 SCOP HPがぐぐっても見つからない・・・久保先生に問い合わせる必要があるかも CPソルバー 混合整数計画と解く手続きはほぼ同じ(モデリング+求解)
  30. 参考文献 1. 久保幹雄 , 田村明久 , 松井知己. 『応用数理計画ハンドブック』. 朝倉書店. 2002

    2. 久保幹雄, J. P. ペドロソ, 村松正和, アブドル・レイス. 『あたらしい数理最適化』. 近代科学社. 2012 3. 久保 幹雄, J. P. ペドロソ. 『メタヒューリスティクスの数理』. 共立出版 2009 4. 柳浦 睦憲, 茨木 俊秀. 『組合せ最適化—メタ戦略を中心として』. 朝倉書店 2001 5. D. G. Luenberger, Y. Ye. 『Linear and Nonlinear Programming』. Springer. 2008 6. 小島 政和, 笹島 和幸, 天谷 賢治, 福田 光浩. 『計算機支援数理』. http://www.ocw.titech.ac.jp/index.php?module=General&action=T0300& GakubuCD=226&GakkaCD=226715&KougiCD=75001&Nendo=2011&Ga kki=2&lang=JA&vid=05 May 30, 2024 最適化超入門 71