機械学習を学ぶための準備 その4(行列の掛け算について)

Data Science

2015.12.13

Topics

機械学習を学ぶための準備
 その1(微分について)
 その2(級数と積分について)
 その3(行列について)
▶︎その4(行列の掛け算について)
 その5(行列のいろいろ)

橘と申します。
機械学習を勉強中の身でありながら、機械学習に関して記事を書いていく予定です。
第4回目になりました。この年の瀬の忙しい時に数学を嗜む・・・幸せですね(遠い目)
今回は少し長編です。ただ大きく2つの構成にわかれていて、間に練習問題が挟んであるため、一度そこで休憩してまた読み続けていただいても構いません。
第4回は、前回の行列について引き続き勉強します。今回は、行列の掛け算、です。行列の掛け算は、前回にも予告した通り、一筋縄には行かないので、何段階かにわけてやっていきます。この説明の仕方は、今まで読んできた専門書でもあったようでなかったような、そんな説明の方法です。
今回は、絶対に紙とペンを用意して実際に計算を試しながら読んでいただきたいです。手を動かすのと動かさないのとでは理解度がかなり違ってきます。

前回の試験問題の解答

前回の試験問題、解いていただけたでしょうか?一句、読んでいただけたでしょうか?
前回の試験問題の解答は以下のスライドに記載しています。

機械学習を学ぶための準備 その2(行列について)試験問題 解答 from DATAHOTEL

掛ける数・掛けられる数問題

掛け算は、小学校の2年生で習います。九九、やりましたね。覚えられなかった苦い思い出のある方も多いのではないでしょうか。当の私自身も、クラスの中では覚えるのが遅い方でした。
小学校の掛け算で、未だに先生方の批判の的となっているのが「掛ける数・掛けられる数問題」です。
ネットでもよく、「子供のテストでなぜ「掛ける数」と「掛けられる数」を反対にしただけでバツなのか。答えがあってればいいじゃないか」
というのが取り上げられるのもご覧になった方も多いでしょう。なぜそのような面倒なことを気にしなければならないのか、今回の「行列の掛け算」で少しお分かりになっていただけるかと思います。そうなっていただければ、私としては嬉しい限りです。

掛け算のできる行列の形と、掛けた結果出てくる行列の形

最初に一つだけ例外があることをお知らせしておきます。その例外に関しては、通常の掛け算を紹介した後でご紹介します。
前回、行列の足し算は「同じ形の行列(つまり同じ行数、列数の行列)」同士でないと足すことができないことをご説明しました。行列の掛け算もそういった約束事があります。ここが少し、複雑なのです。しかしここを理解していることで、今後機械学習で出てくる数式の見え方が全く異なります。驚くほどに、です。
はじめに、どのように掛け算ができるかどうかを判定する方法を紹介します。まず、この2つの行列の掛け算について考えていきます。(ぜひ、次の行列を書き写して、次の説明を読んで下さい。)
matrix2_2
まず、掛ける2つの行列の左側と下側に、それぞれの行数、列数を数字で書きます。(前回の説明で、行数は横、列数は縦でした、ね。よこたて。)
matrix2_1
次に、左の行列の列数(下に書いた数)と右の行列の行数(左に書いた数)に注目します。この2つの数が同じ数のとき、行列の掛け算ができます。今回は、同じ3なので、掛け算ができるようです。
matrix2_3
次に、掛け算をした結果、出てくる行列の形を見ていきます。今度は、先ほど注目しなかった、左の行列の行数(左に書いた数)と右の行列の列数(下に書いた数)が、実はそのまま出てくる結果の行数、列数になります。
matrix2_4
ごちゃごちゃしてきましたね。ですので一度手順にまとめてみます。

手順
1. 2つの行列の各行数を左側、書く列数を下に書く。
2. 「左の行列の下の数」と、「右の行列の左の数」が一致しているか確認する。(一致してなければ計算不可能です。)
3. 2. で一致していたら、結果の行列は「左の行列の左の数(行数)」が行数、「右の行列の下の数」が列数の行列が出てくる。

この3ステップです。では、もう一つの例で再度3ステップを確認してみましょう。
matrix2_5
今度は形の違う行列同士の掛け算です。足し算はどうやらできなさそうですが、掛け算はどうでしょうか?手順1.に従って、2つの数の行数と列数を書いてみましょう。
matrix2_6
次に手順2. に従って、「左の行列の下の数」と「右の行列の左の数」を見てみると、どうやら両方とも「2」なので一致しています。つまり、どうやら計算できるようです。
では最後に手順3.に従って、「左の行列の左の数」と「右の行列の下の数」をみてみると、どうやら出てくる行列は「2行1列の行列」であることがわかります。
matrix2_7
ここで普通の掛け算をちょっと見てみます。すると、例えば「2 * 3 = 6」というのは、「2」と「3」を「1行1列の行列」と見ることで、上の手順に従うと、きちんと「1行1列の行列」である「6」が出てきていることがわかります。興味があれば紙に書いて試してみてください。
ではここで軽く練習問題を挟んでみます。それぞれの行列の掛け算の結果として出る行列の行数と列数を答えて下さい。もし掛け算ができないときは「このマトリックスはカルキュレート出来ないぜ!」と書いて下さい。(できれば理由を添えて。)
※行列のことを英語で「matrix」といいます。
matrix2_8
答え(ドラッグして反転させて下さい)#####

(1) このマトリックスはカルキュレートできないぜ!
(2) 2行1列
(3) 1行1列
(4) 3行3列

################################
できたでしょうか?
掛け算の具体的な値を計算することは大事ですが、行列の掛け算はかけた結果の行列の形だけを見る、だけで様々な情報が得られる場面が数多くあります。ですので、もしあまりお分かりになられない場合は、ご自身で行列を作ってみて、この行列は掛けれるのかな、といったことを試していただけれよいかと思います。

具体的な行列の掛け算の値

それでは、具体的に行列の掛け算がどのような値になるかを見ていきます。行列の掛け算を行うときは、今までも散々出てきていますが、「行」と「列」がキーポイントになります。先ほど扱った行列を再度見てみます。
matrix2_9
最初に、1行1列目の成分(緑色の◯のところ)の値を求めていきます。求め方は次の3ステップです。

  1. 左の行列の「1行目」に注目する
  2. 右の行列の「1列目」に注目する
    1. の行の成分と2. の列の成分 を順番に掛けて、足していく

で頭に?が描かれている方、いませんか?説明で書くと難しく見えるのですが、実際に計算すればとても簡単なことがわかります。やってみましょう。
左の行列の「1行目」に注目する
左の行列の「1行目」は赤く囲まれた部分です。
matrix2_10

  1. 右の行列の「1列目」に注目する

右の行列の「1列目」は青く囲まれた部分です。
matrix2_11

    1. の行の成分と2. の列の成分 を順番に掛けて、足していく
    1. で注目した行と列を、次のように計算していきます。

matrix2_12
1.の行は左から、2.の列は上から順番に数を取り出したもの同士を掛けて、そのあとに足していくわけです。最初は複雑に思えると思いますが、何度かやっていくと計算できるようになれるかと思います。
次にその一つ右の?を求めてみたいと思います。
matrix2_13
一つ右の?は「1行2列目」なので、左の行列の「1行目」と右の行列の「2列目」に注目します。また手順化してみましょう。
1 . 左の行列の「1行目」に注目する
先ほどと同じところですね。
matrix2_14
2 . 左の行列の「2列目」に注目する
青でくくられた部分です。
matrix2_15.5
3 . 1. の行の成分と2. の列の成分 を順番に掛けて、足していく
先ほどと同じようにかけて足していくと、1行2列目の成分の値を出すことができます。
matrix2_16
結果として出る行列の◯行△列の成分を出すときには、以下の手順で計算することができます。

  1. 左の行列の◯行目に注目する
  2. 右の行列の△列目に注目する
    1. の行の成分と2. の列の成分 を順番に掛けて、足していく

これを全ての成分に関して計算していけば、結果となる行列を導き出すことができます。
matrix2_17
最後に例外をご紹介します。それは、一行一列の行列とある行列を掛けるときは、その一行一列の行列を単なる数とみなします(一行一列の数のことをスカラーと呼んだりします。)。そのため、特別に「もう一方の行列のすべての成分に一行一列の数を掛ける」ということをします。
以下の計算を見るとお分かりいただけるかと思います。
2_9.5matrix2_9.5
例外がややこしいかとは思いますが、計算の仕方はもしかしたらシンプルに感じられるかもしれません。

掛ける数と掛けられる数について

掛ける数と掛けられる数について、最後に解説したいと思います。まず「掛け算の形」に注目してみましょう。
matrix2_18
上の図をみて分かる通り、上の方はどうやら計算できるようですが、下の方はどうやら計算できません。
今度は、具体的な「掛け算の値」に注目してみましょう。
matrix2_19
今度は上も下も計算することはできますが、出てきた値が違うようです。
このように、単なる数の掛け算では「掛ける数」「掛けられる数」を反対にしても計算することができましたが、行列の場合は計算が不可能であったり、計算結果が異なることが起きるのです。数学では、「掛ける数」と「掛けられる数」を交換できるものを「可換性」と呼びますが、行列にかぎらず「可換性」を持たない性質のものが数多くあります。
このことを小学生に理解してほしいというつもりは毛頭ありません。ですが、こういう背景がある上で「掛ける数」と「掛けられる数」があるということを大人は知っていてもいいのではないかと、私は思っています。
と完全に数学コラムになってしまいましたw。

まとめ

長かったですね。お疲れさまでした。
今回ご紹介した通り、行列の掛け算は「結果となる行列の形」と「具体的な行列の値」を見ることが重要なポイントです。行列の形だけでも十分な情報が得られることもありますし、具体的な行列の値を求める必要があることもあります。
また、行列の掛け算を使うことにより、一見フクザツで見たくもない数式が、すっきりとした形で表せることがあります。すっきりとした形だと、数学の得意不得意に関わらず、嬉しいものです。今後はそういったことも絡めて、ご紹介して行く予定です。

試験問題

最後に、また試験問題をご用意しました。今回は少し難しいと思いますので、ぜひ上の説明を見ながら
解いてみてください。

機械学習を学ぶための準備 その4(行列について)試験問題 from DATAHOTEL

解答は次回の更新で公開する予定です。
お疲れさまでした。

次回

関連記事
機械学習を学ぶための準備 その5(行列のいろいろ)
編集部

AWSを中心としたクラウドインフラやオンプレミス、ビッグデータ、機械学習などの技術ネタを中心にご紹介します。

Recommends

こちらもおすすめ

Special Topics

注目記事はこちら