yoshizaki

記者紹介

吉崎 亮介

株式会社Carat 最高執行責任者 舞鶴高専専攻科、京都大学大学院 情報学研究科修了。CEDEC2016登壇。学生時代に3つの研究室を渡り歩き、画像処理、音声解析、制御工学、ロボット工学、進化型計算、機械学習を専攻。応用事例を踏まえ、機械学習とその魅力を配信します。


math_eigen_value

機械学習を勉強していく中で本当によく出てくる固有値と固有ベクトル。
「固有値を理解していないと機械学習は理解できないよ」と、詳しい人は皆口をそろえて言います。

しかし、実際のところ、固有値とは特定の物理量に紐づくわけではなく、その実態が存在しません。
そのため、「固有値=○○」といった解釈ができず、飲み込みにくいのは確かです。

今回は、「固有値とは何か?」といった高尚なお話ではなく、「固有値とは機械学習のどこに使われているのか?」といった初心者の方にも実感してもらいやすい方向性で解説します。

固有値と固有ベクトルの定義

まず、数学の教科書にもよく書かれている固有値と固有ベクトルの定義からおさらいしましょう。
$$
\boldsymbol{A}\boldsymbol{x} = \lambda \boldsymbol{x}
$$
行列Aに対して、上の式を満たすような x を固有ベクトル、λを固有値と呼びます。

これを見て、「あぁ、これが固有ベクトルね」ってなりますか?
私自身、初見からそうですが、未だにこの式がしっくりきません。

あるベクトルに対して行列Aを乗じると、本来は拡大・縮小回転の作用が生じます。
それに対し、この固有ベクトルの場合、回転が存在せず、固有値倍だけ固有ベクトルが拡大・縮小されることになります。
と言っても、結局良くわかりませんよね。

もう少し詳しく知りたい方はこちら

余談になりますが、wikipediaは線形代数関連の記事が綺麗にまとめられていることが多く、少し意外かもしれませんが、定義の確認の際など、研究での調査にもよく使わせていただいておりました。

固有値を機械学習のどこで使うか

様々なアルゴリズムで固有値と固有ベクトルを使うのですが、機械学習を勉強していく中で一番最初に出会うのが、主成分分析ではないでしょうか。
主成分分析とは、多次元の配列に対して、データをよく表すような方向にベクトルを取ることで、情報量は極力保持しつつ、データの次元を削減するといった手法です。
この主成分分析は、見た目の通りデータの圧縮にも使えますし、内部の情報量に大きく寄与する要素の発見としても使える優れたアルゴリズムです。
また、細かい話ですが、重回帰分析では入力変数間に相関がある場合、正しく回帰できないことに対し、主成分分析では主成分のベクトル同士を無相関になるように設定するので、現場のデータを扱う際によく生じる多重共線性と呼ばれる問題も回避できます。

その他、主成分分析に関しては、こちらのスライドが詳しいのでご覧下さい。

ポイントは、主成分分析の数式が意図せず、気づけば固有値問題となっているのです。

こういったように、「固有値を使おう!」という流れで固有値は生まれたわけではなく、なぜかいつも式変形をしてみると固有値問題に収束するので、もう少し固有値を詳しく知っておこうという流れではないでしょうか。
そのため、固有値問題に関する式変形や理解を深めておけば、機械学習を勉強する際に有利だというわけです。

まとめ

固有値と固有ベクトルを求める「固有値問題」。
数学だけで習う際は使い道のイメージがまったくわかず、「なぜ勉強するのか?」と思うこともあります。
しかし、どの機械学習のアルゴリズムも最終的には固有値問題に収束することが多いため、ここは理解しておくべきではないでしょうか。

固有値以外にも『特異値』というものもあり、数学の教科書ではなかなか扱われませんが、演算量の削減を目的として、固有値の代わりに使われることがあるので、固有値を理解できた人は特異値も調べてみましょう。