はじめに
行列の基本的な性質を知っておくことは機械学習では重要なことです。
手法の要となっている式変形において、行列の性質が使われるケースが多いためです。
基礎編:特殊な行列
対称行列
対称行列とは、
が成り立つような行列のことです。
行列の成分をと表せば、
と表現できます。
この対称行列は非常に良い性質を持っているため(後述)機械学習の様々な場面で現れます。
複素数まで概念を拡張した際に、同様の性質を持つ行列をエルミート行列と呼びますが、機械学習で現れることはおそらく無いでしょう。
直交行列
直交行列とは単位行列をとして
が成り立つような行列のことです。
行列がベクトルを並べてと構成されているとしたときに、その中身であると(ただし)を取り出せば、その内積は
となります。唯一のとき、すなわち同じベクトル同士の内積のみ値を持ちます。しかも、その時の内積の値(ベクトルの大きさの二乗)はとなっています。
すなわち直交行列の中にあるベクトルたちは、互いに直交しており、しかも大きさがのベクトルであるということです。
もっと端的に言えば、直交行列の中のベクトルたちは正規直交基底を成しています。
複素数まで概念を拡張した際に、上記の性質を持つ行列をユニタリ行列と言いますが、こちらも機械学習で現れることは無いと思っていいです。
直交行列の重要な性質として、その逆行列が直ちに
と求まることが挙げられます。これは定義から明らかですが、非常に重要な性質なので覚えておきましょう。直交行列の逆行列が知りたければ、転置するだけでいいのです。
一般の行列
上記の行列が特殊であるということは、普通の行列は当然上記の性質を持っていないということです。対称行列は転置したら自分自身になりますし、直交行列は転置したら逆行列になります。しかし普通の行列は全く別の行列になるのです。
わざわざ特別扱いするには意味があります。こじつければいくらでも特殊なものを見つけられそうですが、これらに固有名詞が付けられるのはそれ相応の価値があるからです。
後にこれらを使った応用例を見ることにします。
基礎編:逆行列と行列式
逆行列とは
すでに逆行列のことはご存知かと思います。行列の逆行列とは
と元の行列との積を取ったときに単位行列になるようなもののことです。
この逆行列は必ずしも存在するとは限りません。
行列式とは
行列式では、行列に関して特殊な操作を施してスカラー値を得ます(この操作は意外に複雑です)。通常、行列の行列式はやなどと記述され、この行列式の値がの場合はその行列に逆行列が存在しません。
2×2の行列が以下の場合
\begin{pmatrix}
a_{11} & a_{12} \\
a_{21} & a_{22}
\end{pmatrix}
行列式は
となります。具体的な計算方法は教科書などに譲りますが、知らなければいけない性質は行列式の値で逆行列が存在するかを調べられるということです。
ランク落ち
機械学習ではほとんど議論されることはありませんが、行列のランク落ちについても述べておきましょう。
の行列があれば、ランク落ちしていなければこの行列のランクはとなります。ではどのようなときにランク落ちするのかというと、行列が縦ベクトル(あるいは横ベクトルでもいい)を並べてできた行列としたときに
となるようなベクトルがある場合です。すなわち中の行列をベクトルの集まりと見たときに、あるベクトルが他のベクトルの整数倍で表せてしまう場合はランクが落ちるのです。
このようなベクトルの「被り」の数だけ行列のランクは落ちていきます。
一般に1つでもランク落ちが起こると、その行列の行列式はになります。
従って、その行列に逆行列が存在しなくなります。
一般の行列で行と列の数が異なる場合で考えると、もっと複雑になりますが、逆行列の議論をする上では、もともと正方行列(行と列が同じ数)にしか定義できないので割愛しましょう。
ランク落ち ⇔ 行列式が ⇔ 逆行列が存在しない
ということを抑えておけばいいでしょう。
応用編:固有値問題
固有値と固有ベクトルと固有値問題
固有値と固有ベクトルに関しては以下の記事が参考になります。
行列に関する固有値問題とは
となるようなスカラーとベクトルを見つける問題です。
このときのを固有値、を固有ベクトルと呼びます。
行列にとって固有ベクトルは特別で、そこらへんのベクトルとは一線を画す存在なのです。上記の記事でも説明していますが、行列をあるベクトルに作用させた場合には全く異なるベクトルに変形されるはずですが、固有ベクトルだけは単に定数倍されるだけです。
固有値問題
固有値問題の方程式を
と置いて解いていきます。
ここで場合分けをします。
1.に逆行列が存在する場合。
2.に逆行列が存在しない場合。
です。1.の場合は逆行列があるのならば、
の両辺に左辺からその逆行列を掛けてやれば、
として値が求まります。これで固有ベクトルが求まりました。とてもつまらないですね。
どの行列にしても、この1.の場合は同じ結果になるわけですから、あまり意味がありません。ですから普通はこの場合分けで得られた固有ベクトル(零ベクトル)のことはわざわざ固有ベクトルと呼びません。したがって、考えるのはいつでも「2.」の場合だけになります。
2.の場合は、逆行列が存在しない条件がの行列式がであることですから、この問題を解けば良いことになります。すなわち
を満たすが固有値として求まります。そしてその固有値が求まったら、元々の方程式
にを代入して、残りの固有ベクトルも求めるという手準になります。
表記整える
通常、固有値は複数個見つかります。
そして各固有値に対してそれぞれ固有ベクトルが求まります。例えば、の行列の固有値を求めた場合にと2つの固有値求まったとしましょう。
そして、それぞれの固有値に対して、固有ベクトルが1つずつ見つかりそれらをそれぞれとしておきましょう。
つまりこのとき
という2つの式が得られたことになります。これらを1つの式にまとめます。
行列を準備し、以下のように対角成分に固有値を並べた行列
\begin{pmatrix}
λ_1 & 0 \\
0 & λ_2
\end{pmatrix}
を準備すれば
と式をまとめることができます。(とはできません!注意!)
固有値問題では、具体的に固有値と固有ベクトルが求まると、それらを代入して最終的には上記のような関係式が現れるということです。
実際には固有値の数が、行列のランクよりも少なかったり、そのような場合には1つの固有値に対して複数の固有ベクトルが見つかるという場合もあります。
その時でも代入する添字を揃えておけば上記のように表記することができます。
対角化
これまで、具体的な値を準備せずに、一般的にどのように表記されることになるのかだけを見てきました。言い換えると、最終的な表記を出発点に話を議論しても良いということです。
固有値問題は、固有値と固有ベクトルを求めさえすれば最終的には上記のような形になることがわかりました。
この式の両辺左からを掛けてみましょう。(とりあえずには逆行列が存在するという仮定で)
となります。これを通常「対角化」と言います。
右辺は固有値を対角成分に並べたものです。
行列はその固有ベクトルを求めさえすれば、上記の計算で、単に固有値を対角成分に並べただけの行列に変形することができます。
もしも対角化の結果だけを知りたいならば、固有ベクトルを頑張って求めなくても、固有値を並べた行列になると予め分かっているので、簡単に対角化ができます。
ただし、固有ベクトルを並べて行列に逆行列が存在することが条件になることを忘れてはいけません。逆行列が存在しないようなケースでは対角化ができないのです。
それでも単純な形に変形したいという要望はあるので、そのような場合にも上手く変形をするための方法が存在しており「ジョルダン標準系」として知られています。
応用編:対称行列と直交行列での対角化
対称行列の対角化
対称行列の固有値は必ず実数値であることが知られています(証明は簡単です)。
そして固有値が実数値であることを使うと、対称行列の異なる固有値に属する固有ベクトルは互いに直交することもわかります(これも証明は簡単です)。
重要なのは、対称行列の異なるに属する固有ベクトルは互いに直交するということです。
仮にの行列に関して以下が求まった(2つの固有値とそれぞれの固有ベクトル)としましょう。
すると
であるということです。対角化はとして
で達成されることがわかっています。注目すべきは、固有ベクトルが互いに直交しているので、それを並べている行列は直交行列であるということです。
従って、対称行列に関しては
で対角化を達成できるということです。
普通の行列ならば固有ベクトルを求めたあとに、それらを並べた行列をつくり、その逆行列を求めねばなりません。逆行列を求めるのは結構面倒で、コンピュータでもやはり計算コストを食うところです。
しかし、対称行列ならばそれを転置という操作に置き換えられるので非常に楽になります。
対角化しなければならない問題が出てきたときに、必ずその行列が対称行列ではないかを調べるようにしてください。愚直に問題を解くより遥かに早く楽に終わります。
対角化の応用例
指数関数はご存知でしょう。数学のあらゆる応用面で姿を表す関数です。
このの部分がスカラーではなく行列の場合は行列指数関数と呼ばれます。
これは以下で定義されます。
これは行列の和ですから、成分ごとに考えてあげれば済む話です。
問題は、を計算するのが非常に困難であるということです。そもそも各項の成分を求められないという状態なわけです。
対角行列ならばべき乗は、各対角成分を個別にべき乗してあげれば済む話です。一般の行列では行列の積の計算が複雑であるがために、簡単な計算に帰着できません。
ここで行われる発想が、行列の対角化です。行列を対角化してしまいましょう。
と対角化できることを私達は知っています。逆に
とも表せます。(通常この形式を行列の固有値分解と言います。)
このを計算するのはそこまで大変ではありません。
分かりやすいようにで計算してみます。
の対角化(固有値分解)を使うことで、上記のように変形されます。
そしての部分は単位行列になりますから
と変形されます。はただの対角行列ですから簡単に求めることができますね。
したいならば、固有値を乗したものを対角成分に並べて、最後に固有ベクトルを並べた行列で上記のように挟むだけでいいのです。
これを使って定義式に代入してやれば
と表すことができます。
べき乗の計算はそれぞれスカラー値に行うだけになり、行列演算は両端の2つだけです。これらの行列は固有値問題を解く過程で求められますし、もしも行列が対称行列ならば、逆行列を求める作業すらいらないということになります。
実は和の計算の部分は更に簡略化されます。対角行列の第成分を考えれば
となっており、これは定義から普通の指数関数
とあらわせてしまうのです。従って、の固有値を求めたら上記のように指数関数を作って対角成分に並べ、固有ベクトルを求めてしまえば行列指数関数は求められることになります。
このテクニックを使う機会は、機械学習ではあまりないかもしれません。
しかし制御工学など連立微分方程式を基礎としている分野では頻出です。