用語集 · 機械学習
山登り法
別名:Hill climbing、local search、random search、局所探索、ランダム探索、ヒルクライミング
単純な探索方法です。小さなランダムな変更を加え、スコアが良くなれば採用し、それを繰り返します。
山登り法は、試しては改善することで最良の設定を探します。
- 推測値 から始めます。
- 近くの変更 を試します。たとえば、関節角の1つを少しだけランダムにずらします。
- スコアが良くなれば(最小化したい誤差なら のとき)、 を採用します。
- どんな小さな変更でも良くならなくなるまで繰り返します。
勾配が要らないので、計算できるスコアなら何にでも使えます。不連続なところがあったり、微分しにくい部分があったりしてもかまいません。そのため、一度きりのフィッティング問題に便利です。
弱点
山登り法は、どの小さな一歩でも悪くなる最初の点、つまり局所最適解で止まります。それが全体で最良の答えとは限りません。よくある対策は、いくつかの違う推測値からやり直すことや、ときには悪くなる一歩を受け入れること(焼きなまし法)です。立っている人間のように良い初期値があるなら、局所最適解はそれほど心配になりません。
勾配降下法との比較
勾配降下法は傾きを使って一歩ごとの方向を決めるので、何百万ものパラメータにも対応できます。山登り法はやみくもに一歩を試すので、姿勢のように数十個のパラメータの問題にしか向きません。
このプロジェクトでは
solve_stance.py は、体がコーチの説明した構えになるまで、脚、胴体、腕の関節を山登り法で調整します。説明とは、70/30の体重配分、足の角度、スタンスの幅、まっすぐな胴体、高いガードです。誤差はこれらの目標を組み合わせたもので、重心が両足の間のどこにあるかも含みます。