[AI・機械学習の数学]線形代数の行列式をマスター:AI・機械学習の数学入門(3/3 ページ)
連載の通常の流れとは別の番外編。ベクトルや行列の四則演算から内積あたりまでは比較的スムーズに理解できるのだが、突如、行列式や固有値、固有ベクトルといった謎キャラが登場して挫折してしまう、というのはありがちな話。統計学や機械学習のさまざまな手法の背景にあるこれらの考え方を見ていきたい。
ポイント5 行ベクトルや列ベクトルが一次従属だと行列式の値は0になる
次に、少しベクトルのお話をします(後で行列式とつながります)。例えば、x=(3,4)というベクトルは、各成分を係数とし、単位ベクトルとの積を取ったものの和として、以下のように表すことができます。
このとき、右辺の式を(1,0)と(0,1)の一次結合と呼びます*3。x=(3,4)という値は一例として挙げただけなので、ほかの値でも構いません。ということは、平面上の全てのベクトル(点)が表せるということです。つまり、(1,0)と(0,1)の一次結合で、平面が構成できるわけです。
ここで、(1,0)を(1,2)に移し、(0,1)を(3,-1)に移すものとしましょう。すると、xは、
に移ります。これは行列と内積を使って以下のようにも表せます。
やはり、x=(3,4)というベクトルは一例として挙げただけなので、どのようなベクトルであっても、必ず平面上のどこかの点に移ります。これは結局、平面を変形したことになります。つまり、(1,2)と(3,-1)といった一次結合でも、平面上の全てのベクトルを表せます。
しかし、そうならない場合もあります。例えば、(0,0)と(0,1)の一次結合では、(3,4)や(2,6)は、以下の点に移ります。
この場合、どのような点を指定しても、その点が移る先のx座標は常に0になります。ということは、この表し方では平面を作ることができません(全てy軸上の点に移ります)。成分がすべて0である零ベクトルが含まれるからでしょ、と思われるかもしれませんが、例えば、(1,2)と(2,4)の一次結合では、
となり、平面上のどのベクトル(点)もy=2xという直線上に移されることになります。やはりこの一次結合でも平面を表すことができません。
この違いをどうやって見分ければいいのでしょうか。一般化して書いてみます。
となるのが、
の場合に限るとき、v1,v2,...,vnは一次独立であると言います。その場合は一次結合により、空間内の全てのベクトルが表せます(空間を構成できるということです)。
例えば、
となるのは、a1=a2=0の場合だけです。従って、(1,0)と(0,1)は一次独立です。最初に見た(1,2)と(3,-1)も一次独立です(行列での表記にしてもいいのですが、一般化した式との対応が分かるように、ベクトルでの表記にしました)。
しかし、(0,0)と(0,1)のように、零ベクトルが含まれていると一次独立にはなりません。このような場合は一次従属であると言います。
という式では、a2=0ですが、a1にはどのような値でも指定できます。また、(1,2)と(2,4)のように、ベクトルが定数倍になっている(平行である)場合も一次従属です。
の場合、a1=a2=0のときに上の式は成り立ちますが、例えば、a1=2,a2=−1でも成り立ちます。「a1=a2=0の場合だけ」という条件に当てはまらないからです。
これは、
という連立方程式が解けないというのと同じことです(ちなみに、連立方程式を解くことは、逆行列を求めることと同じです)。
n次元の空間は一次独立なn個のベクトルを使って構成できます。その場合の一次独立な個々のベクトルを基底と呼びます。例えば、最初に見た単位ベクトル(1,0)と(0,1)は私たちがよく知っている直交座標(xy座標)を表す基底です(標準基底と呼ばれます)。基底は単位ベクトルでなくても構わないので、(1,2)と(3,-1)を基底とした平面を作ることもできます。
さて、行列式の話に戻りましょう。行列を構成する列ベクトル(や行ベクトル)が一次従属である場合、行列式は0になります。2×2行列の場合であれば、列ベクトルが一次従属である場合には、それらを使って二次元の平面を作ることができないからです。従って、平行四辺形も作れないので面積(行列式)が0になる、というわけです。
基底の考え方は、次回の番外編5「線形代数(固有値・固有ベクトル)」につながるものです。が、今回は、少し違った観点から行列式を求める興味深い方法と、余因子展開を使った逆行列の求め方をコラムとして紹介して、ひと区切りということにしたいと思います。
コラム 機械的に行列式の値を求める方法
行列式を上三角行列に変換して行列式の値を求める方法は、幾つかの操作によって、行列式をシンプルな形に帰着させるというやり方でした。ここでは、置換と組み合わせだけを使う、いわば方法そのものがシンプルなやり方を紹介します(その分、手順は長くなるかもしれません)。
前提として、偶置換と奇置換についてお話しておきます。例えば、123を並べ替えて213に置き換えることを考えてみます。
この場合、1を2に変え、2を1に変えれば置換が完成します。要するに交換しているわけです。このことを(互いに値を交換するので)「互換」と呼びます。上の例であれば、1回の互換で置換が完了します。一方、123を231にするには、以下のように2回の互換が必要になります。
互換の回数が偶数回の場合を偶置換、奇数回の場合を奇置換と呼びます。ちなみに、足の短い猫はマンチカン、以前見たことあるぞというのは既視感です。
サラスの公式に現れる各項は、下の式の枠で囲んだ成分の積になっています(組み合わせは全部で6通りありますが2つだけ掲載します)。それらの成分は、互いに行番号と列番号が重複しないように取り出したものです。公式中のbdiという項(下の式の左側)について見てみると、bは2行目、dは1行目、iは3行目なので行番号に重複はありません。また、bは1列目、dは2列目、iは3列目なので列番号にも重複がありません。下の式の右側に示したbfgについても確認してみてください。どれも行番号と列番号が重複していませんね。
ここで、左から行番号を並べてみましょう。左側の例は、bが2行目、dが1行目、iが3行目なので213と表します。先ほど見たように、これは123の奇置換になっています。右側の例は、bが2行目、fが3行目、gが1行目なので231です。こちらは偶置換です。
あとは、行番号と列番号が重複しないように成分の積を全て求め、偶置換であれば+、奇置換であれば-を付けるだけです。それだけでn×nの行列式の計算ができます。これでもう難しいルールを覚える必要はなくなりました。
ちなみに、置換はσと表し、置換σの符号はsgn(σ)と表されます(sgn(σ)は「サイン・シグマ」と読みます。これらは置換やその符号を簡潔に表すための記号です)。従って、偶置換の場合はsgn(σ)=1、奇置換の場合はsgn(σ)=−1となります。
しかし、偶置換なのか奇置換なのか、置換してみないと分からないので、実際にやるとなると手間がかかりそうですね。これには簡単な見分け方があります。左側に大きな値が幾つあるかを数えるだけです。例えば、213であれば、
- 2 …… 左にこれより大きな値は0個
- 1 …… 左にこれより大きな値は1個
- 3 …… 左にこれより大きな値は0個
なので、合計は1、つまり奇数です。この場合は奇置換です。
231は、
- 2 …… 左にこれより大きな値は0個
- 3 …… 左にこれより大きな値は0個
- 1 …… 左にこれより大きな値は2個
なので、合計は2、つまり偶数です。この場合は偶置換です。では、以下の行列式をこの方法で求めてみましょう。
行番号と列番号が重複しない成分の積は以下の通りです。それらを番号で表したものは以下の6通りです(3つの文字を並べ替える場合の数と同じなので3!=3×2×1=6通り)。それぞれの数字よりも大きな数が左側に幾つあるかを求め、偶置換であるか奇置換であるかを調べて符号を決めます。
| 項 | 置換 | 左側の大きな数の個数 | sgn(σ) |
|---|---|---|---|
| aei | 123 | 0 | 1 |
| bfg | 231 | 2 | 1 |
| cdh | 312 | 2 | 1 |
| afh | 132 | 1 | -1 |
| bdi | 213 | 1 | -1 |
| ceg | 321 | 3 | -1 |
偶置換の場合は+を付け、奇置換の場合は-を付けて全てを足せば、aei+bfg+cdh−afh−bdi−cegとなり、サラスの公式と同じになる。
成分の全ての組み合わせを作るのが面倒ですが、ちょっと面白いやり方ですね。
コラム (参考)行列式を使って逆行列を求める方法
2×2行列での逆行列の求め方はすでに見た通りです。ここでは、3次元以上の場合の計算方法を紹介します。そのためには、余因子展開について知っておく必要があります。字面を見るととっつきにくそうですが、注目している行と列以外の「余った」成分の行列式を作るだけのことです。計算そのものは単なる四則演算なので、難しいところはないのですが、行と列が入り乱れてかなりややこしいので、余裕のあるときにゆっくり読み進めていただくといいでしょう。
では、方法を説明します。3×3行列が以下のようになっているものとします。
ここで、1行1列目のaに注目し、1行目と1列目以外で行列式を作ってみましょう。すると以下のようになります。
同じように、2行2列目のeに注目し、2行目と2列目以外で行列式を作ると以下のようになります。
簡単ですね。一般に、i行j列以外で作った行列式を「(i,j)小行列式」と呼び、それに(−1)i+jを掛けたものを「(i,j)余因子」と呼びます。
行列の成分aに対する余因子をãと表すと、元の行列式は以下のように展開できます。このような展開のことを余因子展開と呼びます。
ここでは、符号に注意する必要があります。b̃(編集注:HTMLエンコードの都合上、チルダがbの上ではなく横に表示されることがあります)は2行1列目なので、小行列式に(−1)3=(−1)を掛けたものが余因子です*4。
*4 元の成分をa,b,cではなくa11,a21,a31のように表せば、aijに対する(i,j)余因子がãijと表されるので、符号を表すために掛ける(−1)i+jと対応させやすかったかもしれません。なお、余因子展開することによって、行列式の次数を減らせるので、行列式の値が求めやすくなることも分かりますね。
さらに、全ての余因子を求め、それを行列の形にしてみましょう。ただし、そのまま並べるのではなく、転置します。
そのまま並べると、以下のようになります。
転置すると、以下のようになります。この行列のことを余因子行列と呼びます。余因子行列をÃとすると、
となります。成分表示にしてみると以下の通りです。見た目は複雑ですが、考え方は「同じ行、同じ列以外の成分を取り出す」だけの簡単なお仕事なので、丁寧にコツコツと並べていけばできます。
ようやくここまでたどり着きました。いよいよ逆行列です。行列Aの逆行列A−1は、行列式と余因子行列を使って、
で表されます。1つだけ例を見ておきましょう。ポイント3で見た以下の行列の逆行列を求めてみます。行列式det Aの値はすでに求められていました(59です)。
余因子を洗い出します。余因子行列の成分をaijで表しましょう。余因子が転置されていることに注意してください。符号にも注意です。2×2行列の行列式なら暗算でも求められますね。
というわけで、
となります。
いやはやお疲れさまでした。次の番外編5では、固有値や固有ベクトルの考え方や計算方法を見た後、対角化により逆行列を簡単に求める方法を紹介します。また、その応用例としてマルコフ過程による確率の計算についても触れたいと思います。
Copyright© Digital Advantage Corp. All Rights Reserved.






