(第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度の計算できています。
-------------