ディープラーニングの解説では「スカラー・ベクトル・行列・テンソル」という言葉がよく出てきます。これらは、数値をまとめてあつかうための数学の便利な仕組みなのですが、私をふくめ数学が苦手な方にとっては「〜をベクトルにして」とか「行列とスカラーを計算するには〜」と言われると、おそろしく難解なことに思えるのではないでしょうか? そこで今回は、「スカラー・ベクトル・行列・テンソル」についてまとめてみました。
スカラー
なかなか聞きなれない「スカラー」ですが、意味はとても簡単で「単なる数値」のことです。単なる数値ならわざわざ難しく「スカラー」と呼ばなくてもいいように思えますが、単なる数値ではないベクトルや行列と区別するために「スカラー」は便利な言葉なのです。
例をあげるまでもありませんが、「スカラー」をプログラム言語の Python で表すと次のようになります。
a = 1 b = 3.5 c = -6
ベクトル
スカラー(単なる数値)をまとめたものが「ベクトル」です。ベクトルと聞くと高校数学の「向きと大きさを持った矢印」を思い浮かべて、苦手な方も多いのではないでしょうか? しかし、ディープラーニングの解説を理解する上での「ベクトル」は、単なる数値をまとめたものという理解で十分です。
また、「ベクトル」を Python で表すと次のようになり、これを「1次元の配列」と呼びます。「次元」と言われるとこれまた難しく感じますが、深く考えずにプログラミングの世界ではそう呼ぶものだと覚えておくだけで大丈夫です。
a = [1, 2, 3, 4]
行列
スカラー(単なる数値)を、下のようにタテヨコに並べたものが「行列」です。エクセルなど表計算ソフトの行列と考え方は同じなので、なじみやすいのではないでしょうか。エクセルと同じように、ヨコの並びを「行」、タテの並びを「列」と呼び、記号では行を「m」、列を「n」で表します。
行列は、行・列の順番で「m × n の行列」のように表現します。例えば上の行列は「3 × 4 の行列」と呼びます。
ディーブラーニングで行う計算は、ほとんどがこの「行列」同士の計算です。行列の計算では行と列の数が重要になりますので、「m × n の行列」という表現方法をしっかり覚えておきましょう。
「行列」を Python で表すと次のようになり、これを「2次元の配列」と呼びます。
a = [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12] ];
テンソル
スカラー(単なる数値)を、タテにならべたりヨコにならべたり(ベクトル)、タテヨコにならべたり(行列)、タテヨコナナメなど複数に並べもの(3次元以上の配列)をまとめて「テンソル」と呼びます。
スカラー、ベクトル、行列もテンソルのひとつなのですが、テンソルという言葉で表すと次のようになります。添字の数すなわちプログラムで言うところの配列の次元数がそのままテンソルの階数になります。
スカラー(0次元の配列) | 0階のテンソル |
ベクトル(1次元の配列) | 1階のテンソル |
行列(2次元の配列) | 2階のテンソル |
(3次元の配列) | 3階のテンソル |
(4次元の配列) | 4階のテンソル |
: | : |
(X次元の配列) | X階のテンソル |
3次元以上の配列は決まった呼び方がありませんので、3階のテンソル、4階のテンソルのように表現します。
例えば「3階のテンソル」すなわち「3次元の配列」を Python で表すと次のようになります。
a = [ [ [1, 2, 3, 4], [5, 6, 7, 8], [9, 10, 11, 12] ], [ [13, 14, 15, 16], [17, 18, 19, 20], [21, 22, 23, 24] ], [ [25, 26, 27, 28], [29, 30, 31, 32], [33, 34, 35, 36] ], ];
おわりに
2012年、画像認識の精度を競い合う競技会で、ディープラーニングを利用したトロント大学のチームが圧倒的な勝利をおさめ、世界中の研究者をおどろかせていた頃、日本の高校数学からは「行列」が削除されたそうです。今後、ディープラーニングはどの分野にも応用できる基本的な技術になるでしょう。高校数学で「行列」が復活してくれるといいですね。
コメント
テンソル(入り口部分だけですが)ようやく理解できました。
ありがとうございました!
>マコトさん
こちらこそコメントありがとうございます!
この記事がお役に立てたみたいでよかったです。