機械学習で現れる数式に関して、これを見たら瞬時に理解すべきものを載せておきます。
機械学習で現れる数式には大量の添字があり、それらのせいで一体どのような計算が行われているのかを瞬時に把握するのが難しくなっています。しかしもはやこれは慣れの問題です。
教科書を根気強く理解できるようにするのもいいですが、予めどのような表現があるのかを知っていれば、もっと楽に読み進めることができるはずです。そのための言わば事前に知っておくと言い数式たちを載せておきます。
行列の行と列の数
計算の法則
行列の行列を考えましょう。
次元の縦ベクトルに対してを左から掛けてを得た場合
このは次元のベクトルになります。行列の行列は左から掛けた場合は次元のベクトルを次元に変えるということです。
逆に次元の横ベクトルに対してを右から掛けた場合は、得られるベクトルは次元の横ベクトルになります。(通常ボールド体でベクトルを表記する場合は縦ベクトルとして扱われることが多いです。横ベクトルとして扱う場合には、転置記号を用います。)
このような操作をもう少し一般的に解釈したければ、ベクトルというものも行列の一種だと考えるといいでしょう。
すなわち次元の縦ベクトルは行列の行列であり、次元の横ベクトルは行列の行列だと見なすのです。すると、この次元の変更の法則は至ってシンプルになります。
の行列との行列はの行列を生み出します。
との行列は真ん中のが消されてになるということです。このことを把握しておけば、以下のように行列計算が連なっていても、次元がどうなるかはすぐに把握できます。
の場合は、がで、がならば、最終的得られる行列はの行列です。途中の計算は結局真ん中で次元が調整されていきます。ベクトルも含んだ行列の計算が現れたときには、瞬時にその行列の行と列の数を把握できるようにしましょう。
特に頻出する形式
特に以下の形式××には注意してください。
これは実際には横ベクトル×行列×縦ベクトルという計算になっています
ここまで読んだあなたは、すぐに(スカラー)だと分かるはずですが、この形式を見た際にすぐにスカラーだと判断がつかない人が意外と多いです。
通常これは二次形式と呼ばれます。実態は多変数の二次関数になります。
また、×のようなものにも注意してください。当然の行列になるとすぐに分かるのですが、実際には以下のように縦ベクトル×横ベクトルという計算になっています。
これを見た場合に、すぐに行列になると判断ができない人が意外といます。
和の計算と行列表現
内積
これは内積です。
ベクトルととすれば
と表せます。
行列計算
この数式を瞬時に理解できますか?
は実は計算上ほとんど意味のない添字です。では何のためにあるのかというと、によって同じように計算されるが複数個あるためです。そのうちの番目のがと表記されています。を無視すればこれは丸っきり内積計算です。
この計算は、ベクトルとベクトルを考え以下の計算をしています。
ここではベクトルの番目の成分を指定していることになります。
は行列の行列でを行列目の成分として持ちます。
では次に
これは分かるでしょうか。今回はが計算上は意味のない添字で、何番目のかを指定しているものです。実際に計算に関与しているのはです。
この場合はとを考えれば
という行列計算になります。は行列の行列でを行
列目の成分として持ちます。
行列の行と列の把握の仕方を知っていれば、これらもすぐに理解できるでしょう。計算に意味のない添字はまさしくベクトルの次元を指定しているものです。行列は、その次元を変換してやるものであることを知っていれば、添字の対応関係も明白になります。
出現場面
ニューラルネットワークでは非常に頻繁に現れます。
ニューラルネットのユニットの番号を指定するのに、計算には関係ない添字が使われたり、あるいは何層目かを指定するためになどという表現も出てきます。 それでも計算に関係ない部分だと思えば、ややこしさは低減するでしょう。あくまで「どれ」なのかを指定するための都合なのです。
でも述べましたが、行列表示での計算は見た目もよく、計算もプログラムと相性が良いため、多用される表現となっています。
固有値と固有ベクトル
固有ベクトルは、ほとんど変換を受けないベクトル
ある行列があります。この行列でベクトルを変換して、ベクトルが得られたとしましょう。このことを数式で書くと以下となります。
になります。
図式的に書きましょう。ベクトルをに入力したらが出てくるという状態です。このは通常、とは異なったものに変換されています。実際に適当な行列とベクトルを使って計算してみてください。
もしもベクトルを色々加工したいならば、いろんな行列を試せば良いのです。通常コンピュータグラフィック(CG)はこのを色々取り揃えておくことで、画像の描写を決めています。しかし今回はその話ではありません。
注目すべきは、とあるに対して、なぜかほとんど変換を受けないベクトルがあることです。行列に対して、色々ベクトルを変えてみて入力をしてみると、となって出てくることがあるのです。
行列はベクトルを全く違うベクトルに変えてしまうもののはずです。
しかし、ある特定のベクトルだけは、ただ定数倍だけされて出てくるのです。このように、本来ならば全く違うものに変わるはずが、ほとんど行列の影響を受けない(定数倍されるだけの)ベクトルを行列Aの固有ベクトルと言います。
図から数式に戻れば
固有値とは、固有ベクトルがどれだけ定数倍されたかを表す
今、行列に対してほとんど変換を受けないのが行列Aの固有ベクトルだと言いました。しかし、少しだけ変換を受けており、定数倍だけ長さが変わっているのです。この、どれくらい長さが変わったのかの倍率を固有値と言います。
すなわち上の図で言えばが行列の固有値というわけです。
行列に付随する、定数倍という変換しか受けない特別なベクトルを固有ベクトル、そのときの倍率が固有値ということです。
従って、単に固有値!とか固有ベクトル!というふうには使いません。「どの行列の」固有ベクトルと固有値なのかをいつでもセットで考えなければいけません。
固有ベクトルだけが満たしている特別な式
行列とその固有ベクトルの関係は、その固有値を使って
と表すことができます。この式を解けば、具体的な固有ベクトルと固有値が求まるというわけです。行列に関する特別なベクトルと、その特別な定数倍が得られるのです。
出現場面
主成分分析とは、データの分散共分散行列の固有値問題を解くことにほかなりません。
固有ベクトルは、データが大きく変動している新たな主軸を表しており、固有値の大きさがその変動の大きさを評価することに使われます。
また特異値分解では、行列を特異ベクトルを並べた行列と、特異値を対角成分に持つ行列の積に分解します。例えば個の時系列次元データがあれば、これを行列の行列とすることができます。
この行列を特異値分解すれば、そのデータセットに特別に存在する特異ベクトルと特異値なるものを把握できるのです。仮に、しばらく時間を置いて同じように時系列データを個集めて特異値分解をしたときに、まったく異なる特異ベクトルと特異値が得られた場合には、最初のデータと何か違いがあるということです。
つまり正常な状態の時系列データに対して特異値分解を施し、それらの特異ベクトルを保持して、時系列データと比較することで異常検知などに用いることができるのです。
この特異値分解は、固有値問題のことが分かっていればすぐに理解できます。
深層学習でも、データを白色化しておく前処理などが有効で、この際にも主成分分析の一種が用いられます。
勾配
勾配はスカラー関数の各成分の傾き
スカラー関数のベクトルによる微分を勾配ベクトルと言います。
具体的に二次元ので考えましょう。
は、スカラーをベクトルで微分しており、以下で定義されます。
勾配ベクトルの第一成分はの第一成分が少し変化したときの変化量(微分)になっています。同じように第n成分はの第n成分が少しだけ変化したときの変化量です。
仮に勾配ベクトルの第一成分が正の値での場合には、の第一成分が少し増えとなった場合にはがになることを示しています。
これは丸っきり一次元の微分と同じです。すなわち勾配ベクトルの各成分は、各成分方向の傾きを表しているということです。
勾配はスカラー関数の等高線の法線ベクトル
多くの教科書で出てくる、「等高線の法線ベクトルである」という表現に困惑する人は少なくないです。勾配(傾き)だから接線ではないのか?と感じるのです。
そもそも等高線とは何でしょうか。地図に載っている山を考えればわかりやすいでしょう。高さを表しています。山の同じ高さの部分を線で結んでいるのです。つまりある等高線の隣の等高線は、の部分より山が高いか低いかであります。
その場所に移動するにはどうすればいいかというと、山を下るか、あるいは登るしかありません。すなわち勾配方向に負に移動するか正に移動するかです。
下の図では、標高がであり、地図上の位置がで指定されているという状況です。標高がになる地点とになる地点が、それぞれ青い線と赤い線で表されています。山を登る方向である勾配ベクトルは、等高線にとっては法線ベクトルになっています。
もしもこの図とは異なって、右側から山を登ろうとする場合は、傾斜は緩やかになります。従って勾配ベクトルは小さくなります。ですが、それでもやはり登る方向であることに変わりはなく、等高線に対しては法線ベクトルになっています。
出現場面
機械学習のあらゆる場面で姿を表します。
学習、すなわち損失関数(評価関数)の最小化問題を解く基本的手立ては、上記のように勾配を求め、損失関数が減少する方向に少しずつを更新していく勾配法です。
勾配に対する性質をよく理解していれば、学習を早めたりする工夫をすることができます。
例えば学習が停滞するのは、勾配が小さいからでしょう。単に勾配を計算するだけでなく、もっと良い更新の方向を探ることが最適化の主な研究対象ともなっています。
学習が停滞する要因として以下の記事が参考になるかと思います。
終わりに
今回上げたのは必要最低限の知識です。
本当に瞬時に意味が理解できてほしいものだけをピックアップしました。
逆にこれだけを当たり前のように読みこなせるならば、ある程度は何をしているのかを理解することが可能となるでしょう。
機械学習の数学に関する話は以下の記事で紹介しています。