ディープラーニングでは、掛け算の合計をなんども計算する必要があるのですが、この時にとても役に立つのが「行列」(単なる数値をタテヨコに並べたもの)同士の掛け算です。しかし、いざ「行列を計算せよ!」と言われても戸惑ってしまいますね。そこで今回は、「行列」の計算方法をできるだけわかりやすくまとめてみました。
関連記事:ディープラーニングの数学「スカラー・ベクトル・行列・テンソル」とは?
行列の「足し算」と「引き算」
行列の「足し算」と「引き算」は、特にむずかしいことはありません。同じ位置にある数値を、足し算もしくは引き算するだけです。
ただし、行列の足し算と引き算は、同じ型の行列同士でしかできません。例えば下の2行2列の行列(これを「2 × 2 の行列」と呼びます)と、2行3列の行列(これを「2 × 3 の行列」と呼びます)を足し算や引き算をすることはできません。
行列の「掛け算」
少しコツがいるのが、ディープラーニングの計算でよく使う 行列の「掛け算」(行列の積)です。
一番単純な「2 × 2 の行列」同士の掛け算で計算方法を確認していきましょう。
まず、左の行列の1行目の左から、右の行列の1列目の上から順番に掛け算し、合計した値を左上のマス(1行1列目)に書きます。(文章にするとどうしてもややこしくなるので、図を見てくださいね)
次に、左の行列の1行目と、右の行列の2列目を掛け算し、合計した値を右上のマス(1行2列目)に書きます。
同じ要領で、左の行列の2行目と、右の行列の1列目を掛け算し、合計した値を左下のマス(2行1列目)に書きます。
最後に、左の行列の2行目と、右の行列の2列目を掛け算し、合計した値を右下のマス(2行2列目)に書けば、行列の掛け算の完成です!
行列の掛け算は計算が面倒ではありますが、計算方法さえ知っていれば難しいことはありません。行列の掛け算は「行→と列↓を掛ける!」と覚えておきましょう。
行列の掛け算の注意点
行列の掛け算は、違う型の行列同士でもできるのですが、『左の行列の「列の数」と 右の行列の「行の数」を一致させる』必要があることに注意しなければなりません。
例えば「2行 × 3列 の行列」と「2行 × 2列 の行列」の掛け算は次のようになるため計算することができません。
これは特に重要な注意点なので、必ず覚えておきましょう。キーワードは「列と行の数を一致させる!」です。
行列の「割り算」はない
では、行列の割り算はというと、行列には「割り算」がありません。そのかわりに逆行列というものがあります。興味がありましたら検索してみてください。
5秒でできる!行列の計算
ディープラーニングでは 1000 × 1000 のような巨大な行列の掛け算を、なんども繰り返し行う必要がありますので、手計算でやっていては日が暮れてしまいますし、コンピューターでも大変な計算なので時間かかります。
そんな時に便利なのが、プログラム言語の Python の NumPy(ナンパイ)というライブラリです。このライブラリを使えば、行列の計算を高速に行うことができます。
sample.py
import numpy as np # 2×2の行列 a = np.array([[1, 2],[3, 4]]) # 2×2の行列 b = np.array([[5, 6],[7, 8]]) # 行列の掛け算 y = np.dot(a, b) print(y)
上のサンプルコードを実行すると次のように表示されます。先ほどの行列の掛け算の答えと同じことが確認できますね。
[[19 22]
[43 50]]
まとめ
「行列」の計算方法のおさらいです。
行列の「引き算」:同じ位置にある数値を引く
行列の「掛け算」:行→と列↓を掛ける。列と行の数を一致させることに注意!
行列の「割り算」:行列に割り算はない
おわりに
この記事を書くのにあたって、書籍「もう一度高校数学」を参考にさせて頂きました。(2019年現在は高校数学で行列はやりませんが、この書籍が発行された当時は高校数学にも行列があったようです)行列だけでなくディープラーニングを学ぶ上で必要になる、Σ(シグマ)記号の意味や微分の基礎なども、とてもわかりやすく丁寧に解説されています。私のように学生時代あまり勉強熱心ではなかった方が、ディープラーニングをきっかけに数学を学び直すのにぜひオススメの一冊です。
コメント