見出し画像

第9話 ディープラーニングに必要な数学知識 -線形代数編 行列・テンソル-

ディープラーニング(AI)のプログラミングには数学知識が必要とのことで、今回から線形代数を学んでいきます。
(教科書「はじめてのディープラーニング」我妻幸長著)

今回は行列とテンソルがメインとなります。
具体的な内容は次のとおりです。

・線形代数とは
・スカラー
・ベクトル
・行列
・テンソル
・テンソルの形状変換、軸の入れ替え

余談ですが、私は大学1年生のとき線形代数を学びました。
それが今から10年以上も前のことだったなんて。
月日の流れはあっという間ですね・・・。

しみじみしちゃいましたが、今回の学習のスタートです!

線形代数とは

線形代数とは、ベクトルや行列を扱う数学の分野の一つです。
ディープラーニングでは多くの数値データを処理する必要があるらしいですが、線形代数の知識があれば、数値データを行列として扱えるので簡潔な数式で処理を表現できるようになります。
そしてAIの実装のときは、それをNumPyでソースコードに落とし込むというわけです。

教科書では、必要最低限の線形代数について解説しています。

スカラー

普段われわれが使っているような値のことです。
大きさのみを表します。

スクリーンショット 2020-04-01 12.52.59

ベクトル

スカラーを縦or横に一列に並べたものです。
物理だと「大きさと方向をもつもの」と言われることもありますね。
ベクトル には、横ベクトルと縦ベクトルの2種類があります。

名称未設定

教科書では横ベクトルを主に使っていくようです。
なので以降は、「ベクトル=横ベクトル」と解釈してください。
NumPyでは1次元配列でベクトルを表現します。

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

行列

次のようにスカラーを格子状に並べたものです。

名称未設定2

NumPyの2次元配列を用いて行列を表現します。

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

ディープラーニングの演算の大部分は、行列同士の演算のようです。
頭がこんがらがっちゃいそうですね。

テンソル

上述の内容はテンソルという概念の一部のようです。
図示するとこのような感じ。

名称未設定4

テンソルについてもう少し勉強しようと思って、ウィキペディアなどを読んでみましたが、どのサイトも難しそうなので諦めましたw
とりあえず配列の次元は2とか3以上でも定義できるんだよ、と理解しておきます。

NumPyでは3階のテンソルをこのように表現します。
スクリーンショット 2020-04-02 13.02.45

さらに高次元の配列もNumPyなら表現可能だそうです。
(NumPyでできても、もはやこちらの脳がまったく理解できない領域では?^^;)

テンソルの形状変換

テンソル(配列)の形状変換はreshapeを用いて簡単に行えます。
試しに1階のテンソル(1次元配列)を高次のものに変換してみましょう。

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

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

ご覧のとおり、1階のテンソルを4階まで変換できました。
(要素数がすべて24で揃っているのがポイント)
ただ3階のテンソルまでは脳が追いつけますが、4階はもはや意味不明ですねw
なお、reshapeについては第4話で勉強しました。興味があれば覗いてみてください。

テンソルの軸入れ替え

transposeメソッドを使用して軸を入れ替えます。
例題をみてみましょう。

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

簡単に軸を入れ替えることができました。
軸を入れ替えるということは、次元の順番を入れ替えることと同じようです。

次元を入れ替えることの物理的な意味は現段階では不明です。
きっと後から出てくるのでしょう。


今回はスカラー・ベクトル・行列・テンソルと、テンソルの変換を学びました。
線形代数の勉強はまだ続くのですが、長くなってしまうので今回はここでおしまいにします。
次回は行列の演算方法などを学んでいきます。

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

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