"血をもって書け。そうすればあなたは、血が精神だということを経験するだろう。"

最適化に関するメモ

複数次元の探索空間上で最適化を行う場合にこのへんを意識しながら行いたいというポイントについて、(必ずしも全てに答えを出せたわけではないが)書いておく。 たとえばパラメトリックな予測モデルを用意してモデルの性能を改善するというような問題。

コスト関数の設計はどうか?

  • 直観的に妥当か?目的に則しているか?
  • コスト関数における各項の重み付けは適切か?重要なパラメータによるコストが重要でないパラメータにより無視される設計になっていないか?
  • 不適切なモデルに高いコストをつける項があるか?(例えば調和平均を使う)
  • 各項間の相関が強すぎて冗長なコスト関数になっていないか?

局所最適と全体最適のバランスはどうか?

  • 局所解におちいらないように、条件的あるいは確率的にジャンプできるか?
  • どのような条件で、局所探索が終わったと判断して全域探索に戻るか?
  • コスト関数の履歴を持ち、コスト関数が停留したら全域探索に戻れるか?停留したかどうかをどのように判断するのか?
  • 探索空間の履歴を持ち、探索点が探索空間上で停留したら全域探索に戻れるか?停留したかどうかをどのように判断するのか?(タブーサーチ?)
  • 局所最適と全体最適を意識しないでブレンドできるか?(焼きなまし法?)

全体最適化をどう行うか?

  • 一度見つけたよい解に、まったく新しい探索でも効率的に到達できるか?
  • 全体最適化を最初にランダムに行うべきか?
  • 乱数は一様乱数なのか、どのような分布を使うのか?
  • 性能のよいモデルと未探索のモデルをどのように取り込むべきか?(GA?)
  • ランダムジャンプ以外に局所最適を抜ける方法があるか?

局所最適化をどう行うか?

  • 最急降下法
  • どの程度のスピードで探索点を移動させるか?毎回同じか、同じでないとしたらどのように推移させるのか?

計算を省力化できるか?

  • コスト関数変更の試行錯誤をいかに簡単にできるか?
  • 近い地点のパラメータで行った過去の計算の一部が必要である場合、再利用できるか?
  • 過去のパラメータから探索をスタートすることがいかに簡単にできるか?
  • 探索最中にコスト関数や探索のアルゴリズムを動的に変更できるか?

複数の探索を平行して進められるか?

  • 探索開始点の取捨選択を簡単にできるか?
  • 蟻コロニー最適化?

モデルや計算が可視化されているか?

f:id:satzz:20150421001632p:plain

  • グラフをみてコスト関数設計にフィードバックすることが簡単にできるか?コスト関数の各項が試行に応じてどうあがっているかを確認できるか?

  • あわよくば、そのままレポーティングに使えるレベルか?

  • 複数のグラフを簡単に比較する仕組みがあるか?

計算過程を近くで見守ることができるか?

  • モバイルなどで計算過程や計算結果を確認して洞察することができるか?
  • 計算が異常に達した場合に検知できるか?