AI(人工知能)や機械学習、ディープラーニングで使う数学の基礎を学びます。 また、数学をプログラムに落とし込む方法について学びます。
Contents
ベクトル
機械学習ではベクトルを頻繁に利用します。そもそもベクトルとは何でしょう?ベクトルは単純に数字を並べたものです。例えば、(2, 7)は数字を2つ並べたものなので2次元ベクトルと呼びます。3次元ベクトルまでは矢印として図示できますが、それ以上のベクトルは3次元ベクトルまでの類推で想像することしかできません。
ベクトルをプログラムで扱うにはどうしたら良いでしょうか?ベクトルは数字を並べたものなので、ベクトルを表現するのに「配列」を使うことができれば便利です。Python標準の配列を使ってベクトル(1, 2)を表現すると次のように記述できるでしょう。
# Python標準の配列
a = [1, 2]
ベクトルの加算(足し算)
2つのベクトルを足し算すると新しいベクトルができます。これはベクトルの合成とも呼ばれます。
2つのベクトルをプログラムで足し算するには、2つの配列を足せば良いのでしょうか?実際にやってみて試してみましょう。
単純にPythonの配列を足し算するだけでベクトルの足し算になりません。これではダメです。
NumPyの配列を使ってみましょう。NumPyの配列は np.array() を使って簡単に作ることができます。
期待通りの結果が得られました! このように、NumPyを利用すると数学的に処理が簡単に行えるので便利です。また、Pythonでは配列の要素数を知るのに、「.size」を使いますが、NumPyの配列はPythonの配列を拡張したものなので、Pythonの配列で利用できるものは基本的にそのまま使えます。
ベクトルと定数の掛け算(定数倍)
例えば、下記のようにベクトル(1, 2)を3倍するとベクトル(3, 6)になるような演算ができると便利です。
Pythonの配列を使って表現したベクトルを定数倍するとどうなるか確認してみましょう。
やはりPythonの配列をベクトルとして利用して演算することはできないことが分かります。NumPy配列を使ってみましょう。
期待通りの結果が得られました! NumPy配列を使えばベクトル演算できます。
これ以降、ベクトルを表現するときには、必ずNumPy配列を利用することにします。
ベクトルとベクトルの掛け算(ベクトルの内積)
2つのベクトルの掛け算(内積)は、それぞれのベクトル要素を掛け合わせたものを足し算したものです。
「a*b」という演算の結果は「10」という数値ではなく、[10, 0]というベクトルになっています。これは、ベクトルのそれぞれの要素を掛け算した結果「2*5=10」と「4*0=0」を足し算せずに、そのままベクトルの要素としているからです。2つの要素を掛け算した結果を足し合わせる(内積を計算する)には「np.dot()」という関数を利用します。
行列(マトリックス)
機械学習とディープラーニングでは行列計算を頻繁に利用します。行列(マトリックス)とは数字を縦横に並べたものです。ただそれだけなのですが、
行列をプログラムで記述するにはどうしたら良いでしょう?
行方向に見てみると、ベクトルが横に並んでいるように見えますから、プログラムでもベクトルを並べて記述するのが自然でしょう。NumPy配列を使うと下記のように記述できます。
行列と行列の掛け算(行列積)
2つの行列の掛け算(行列積)は以下のように計算します。
この演算をプログラムで記述してみましょう。
行列と行列の掛け算では、掛け算する順番が結果に影響します。一般に「A・B」と「B・A」の結果は一致しません。
試しに、上記の掛け算の順番を逆にして計算するとどのような結果になるか試して見ましょう。
行列とベクトルの掛け算
数字が並んでいるのがベクトルでした。2行1列の行列は数字が2つ並んでいるのでベクトルです(縦に並んでいるので列ベクトルと呼びます)。行列とベクトルの掛け算は以下のように計算します。
この演算をプログラムで記述してみましょう。
行列の転置
行列の行と列を入れ替えたも(ひっくり返したもの)行列を、その行列の転置行列(Transverse Matrix)と呼びます。
転置によって、「m x nの行列」は「n x m の行列」になります。
NumPy配列を用いて表現された行列は、その行列の最後に「.T」を付ければ、その行列の逆行列を作れます。行列aに対して「a.T」と記述するだけです。
行列の形を確認するには、その行列の最後に「.shape」を付ければ確認できます。
転置後のシェイプを確認してみましょう。
行列と行列の掛け算とシェイプの関係
行列と行列の掛け算は必ずできるわけではありません
実際に、演算をプログラムで記述して確認して見ましょう。
行列演算と転置行列
一般に ですが、以下のの演算は常に成立します。プログラムを使って実際に確認してみましょう。を最小化することを考えます。
おわりに
機械学習の実装で重要なベクトルと行列の理解を Python と NumPy を用いて説明しました。重要なエッセンスが詰まっていますのでしっかりと復習してください。以上がAIのため数学の基礎でした。