見出し画像

第10話 ディープラーニングに必要な数学知識 -線形代数 行列の演算-

前回に引続き、線形代数を学んでいきます。
今回は行列の演算についてです。

ディープラーニングでは行列計算を多用するらしいので、今回学習することはきっと重要でしょう。

内容は次のとおりです。

・スカラーと行列の演算
・行列の要素同士の演算(アダマール積)
・行列同士の掛け算(行列積)
・ベクトルと行列の演算
・行列の転置

ちなみに教科書の1/4くらいが終わりました。
本丸のディープラーニングに到達するまでの道のりは険しいですね・・・。

それでは今回の学習のスタートです!
(教科書「はじめてのディープラーニング」我妻幸長著)

スカラーと行列の演算

スカラー(普通の数)と行列の掛け算は、数学ではこのようになります。

名称未設定5

そしてNumPyで実装するときはこうなります。

スクリーンショット 2020-04-02 13.51.42

特に悩むようなところはないですね。
スカラーと各要素の演算は、掛け算以外でも演算記号を使ってできます。

スクリーンショット 2020-04-02 13.56.05

行列の要素ごとの演算

行列の要素ごとに掛け算することを「アダマール積」と言います。初耳(•o•)
数式ではこのように表します。

名称未設定

NumPyでアダマール積をやってみましょう。

スクリーンショット 2020-04-02 14.12.21

スカラーの時と同じで、掛け算記号を用いてできました。
掛け算以外の演算も、スカラーと同様に演算記号を用いてできます。
とっても簡単♪

スクリーンショット 2020-04-02 14.16.06

行列同士の掛け算

「行列の積」「行列積」と呼びます。
アダマール積より計算が圧倒的にめんどくさいです。
でも私はこちらの方が馴染みがあるかな。
数式表記だとこうなります。

名称未設定2

まったくもってカオスですね・・・。
簡単な例題をしましょう。

名称未設定3

Aの行とBの列の要素を掛け算して、足していく感じです。
はっきり言って面倒臭い行列積ですが、NumPyではdot関数を用いれば一瞬でできちゃいます。やっほーい!

スクリーンショット 2020-04-02 15.00.26

ちなみに、行列積を計算するためには次の条件を満たす必要があります。

名称未設定4

この条件を満たしていないとNumPyはエラーコードを吐きます。

ベクトルと行列の掛け算

これは行列積の考え方が適用できます。
なぜなら、ベクトルが1行m列の行列と考えれば良いからです。
掛け算する相手がm行n列の行列であれば、行列積が求められますね。

スクリーンショット 2020-04-02 15.08.31

行列の転置

行列の行と列を入れ替えることを転置と言います。
数式ではこのように表します。

名称未設定2

NumPyでは、「.T」を配列につけて転置します。
何回か登場するtransposeでも同じように転置できます。

スクリーンショット 2020-04-02 15.27.00

ディープラーニングでは行列積を求めるために、転置を使うようです。
軸の入れ替えについて、行列(2階のテンソル)では「.T」でできますが、3階級以上のテンソルではtransposeを使います。


今回はディープラーニングの演算のコアとなる(であろう)行列の演算について学習しました。
NumPyを使えば、行列の演算が驚くほど簡単にできることがわかりましたね!

次回は微分について学習します。

それではまた(^_^)ノシ

よろしければサポートお願いします!いただいたサポートは書籍代等に活用いたします!