てんぺるのぶろぐ

IT関連のこと、体験談、備忘録など。文系エンジニア、もがきます。

機械学習-数学学習メモ「最適化問題の解き方(凸最適化編)」

機械学習の勉強をしていると、よく最適化問題が登場します。

例えば最小二乗法。データの背後に隠れている関数を求める際に、実データとの誤差が最小となるように係数を求めることをします。

このように、ある関数を最大にしたり最小にしたりする解を求めること最適化問題といいます。

今回はそんな最適化について学習したことをざっくりとまとめようと思います。(※細かい定義や証明は省略しています。ガバガバ注意。)

最適化問題とは

最適化問題とは | データ分析基礎知識
によると

最適化問題(Optimization Problem)とは、「与えられた制約条件の下で、ある目的関数を最大または最小にする解を求めること」をいいます。

とのことです。

先ほど言ったことですね。制約条件がない場合もあります。

凸最適化とは、最適化問題の中でも目的関数や制約条件が凸関数の場合のことを指します。

凸最適化問題を解く際の流れ(制約条件なしの場合)

1.目的関数を一階微分して=0と置き、解く。(停留点を求める)

これにより極値の候補(停留点)が分かります。

微分によってグラフの傾きが分かりますが、その傾きが=0ということは、そこが山の頂上(極大値)か一番下(極小値)かの可能性が大きいということです。

このようにして、徐々に最適解を絞っていきます。
この時点で出た解は、まだ最適解の「候補」であることしか分かりません。

2.ヘッセ行列を求め、その定値性を調べる。

つぎに、二階偏微分係数を成分にとるヘッセ行列(ヘッセ行列 - Wikipedia)を求めます。
このヘッセの定値性を調べることで、最適解の候補が最小解(もしくは最大解)であることが判別できます。

ヘッセ行列が正定値、もしくは半正定値である場合、その停留点が極小値(=最小値)であることが分かります。
一方ヘッセ行列が負定値、もしくは半負定値の場合、その停留点が極大値(=最大値)であることが分かります。
ヘッセ行列が不定の場合は最適解ではないです。

行列の定値性の調べ方
http://www2.kaiyodai.ac.jp/~yoshi-s/Lectures/Optimization/2011/lecture_1.pdf
の4ページ後半以降参照

N変数関数(N≦2)の場合は行列式を調べる方法が手っ取り早い。
N>3の場合は固有値を調べる。

なぜ極小値=最小値といえるか

ヘッセ行列が正定値(半正定値)の場合、目的関数が凸関数であることが分かるからです。
凸関数の場合、下の画像からも分かるように極小点=最小点が成立します。
f:id:temper-u:20171203012120p:plain
http://www.i.u-tokyo.ac.jp/news/focus/080215_1z2.shtmlより引用。

つまり、ヘッセの定値性を調べていたのは、関数の凸性を確認するためでもあります。

極大値=最大値の場合も、これの逆ですが同じ理屈によって成り立ちます。

まとめ

凸最適化問題は以下の2ステップで解く。

1.目的関数を一階微分して=0と置き、解く。(停留点を求める)

2.ヘッセ行列を求め、その定値性を調べる。(極値判定と関数の凸性確認)
正定値もしくは半正定値⇒最小解
負定値もしくは半負定値⇒最大解
不定⇒not最適解