(第1回)ベクトルと行列の内積

機械学習のメモ(その2)では、自然言語処理をメインに調べていきます。まずは、重要なベクトルと行列について、 再度調べてみようと思います。

<ベクトル・行列>

ベクトルは、1次の行列で縦、横のベクトルで表現されます。主に2次の行列(複数行)で表現されます。

縦ベクトル・・・$\large{\begin{bmatrix}1 \\2 \\3 \end{bmatrix}} $

横ベクトル・・・$\large{\begin{bmatrix}1 & 2 & 3 \end{bmatrix}}$

行列・・・$\large{\begin{bmatrix}1 & 2 \\3 & 4 \\5 & 6 \end{bmatrix}}$

<アダーマール積・内積>

〇アダマール積

各成分をそれぞれ掛け算する方法になります。

$\large{A=\begin{bmatrix}a1 & a2 \\a3 & a4 \end{bmatrix}}$ $\large{B=\begin{bmatrix}b1 & b2 \\b3 & b4 \end{bmatrix}}$
$\large{A×B=\begin{bmatrix}a1×b1 &   a2×b2 \\a3×b3 &   a4×b4 \end{bmatrix}}$
となります。

〇内積

線形代数の行列の基本の計算になります。

$\large{A=\begin{bmatrix}a1 & a2 \\a3 & a4 \end{bmatrix}}$ $\large{B=\begin{bmatrix}b1 & b2 \\b3 & b4 \end{bmatrix}}$
$\large{A・B=\begin{bmatrix}a1×b1+a2×b3 &   a1×b2+a2×b4  \\a3×b1+a4×b2 &   a3×b2+a4×b4 \end{bmatrix}}$
となります。ABが2x2の行列ですので、問題ないですが、Aが2X3の場合、必ずBは3x〇の行列である必要があり、対応する次元の要素数を一致させる必要があります。

Pythonでプログラムを書くと以下のようになります。

結果

基本的には、内積を使います。内積は掛け算の順番を変更すると結果が変わります。
行列の積を利用することで、機械学習ではいろいろな計算を実施できるので、便利です。

<Sigmoid関数+ミニバッチ>

入力のデータを複数個まとめて処理してみます。複数個まとめてあるデータをミニバッチと言います。
まずは、活性関数である、シグモイド関数

$\large{σ(x)=\frac{1}{1+exp(-x)}}$

これをニューロン:h=wx+b(w:重み、x:入力、b:バイアス)を考慮して、Pythonで計算します。
ミニバッチは10個、入力は2次元、中間層は4次元(Sigmoid)、出力は3次元とします。(上のネットワークが10組ある。)
以下がプログラムです。

結果

入力には、行列(10x2)のミニバッチ、w1,b1の1層目を計算すると、行列(10x4)になっています。sigomoidもそのまま 行列(10x4)のミニバッチのまま計算できていて、w2,b2で出力層を計算していますが、行列(10x3)のデータとして出力ができています。
エクセルなどで計算する場合For文で繰り返し計算させることがありますが、それがNumpyの行列計算では1度の計算できています。

-------------