徒然なるままにMake:

Fusion360 3Dプリンタ 電子工作 面白そうなモノづくりをやっていくブログ

ディープラーニングを始めてみる 6

前回

something-make.hatenablog.com

参考書はこれ

 

前回は活性化関数までやったので、今日は行列の内積をやります。

行列というのはアレです。線形代数でやったやつ

数字がズラズラと行と列で並んでる、ものすごく計算に手間のかかるアレです。

私は一つ計算ミスをすると全部滅茶苦茶になるアレが学生時代大嫌いでした。

まあ、コンピューターが使えるなら話は別なんですけどね。

あれは人間が手計算でやるもんじゃありません。

行列の内積が具体的にどういう計算なのかといえば、

f:id:something-make:20180918201924p:plain

こういう計算です。数字を行と列で並べた行列を2つ用意して、掛け算っぽいことをしています。

このままだと分からないので、詳しくやっていきます。

行列の内積を計算するときは、右の行列を上に動かすと計算を理解しやすくなります。

f:id:something-make:20180918202038p:plain

左の行列は行が2つ、列が3つ

右の行列は行が3つ、列が2つ

 

これをどうするのかというと、左の行列の行と、右の行列の列で、それぞれ1番目と1番目、2番目と2番目、3番目と3番目を掛けて足し合わせて並べます

f:id:something-make:20180918201927p:plain

f:id:something-make:20180918201937p:plain

f:id:something-make:20180918201945p:plain

f:id:something-make:20180918201948p:plain

一体この計算に何の役に立つのかという話なんですが、

滅茶苦茶役に立ちます。

この行列の内積を使えば、ニューラルネットワークの計算を簡単にすることができます。

something-make.hatenablog.com

パーセプトロンの頃からずっと続いている、こういった入力xにそれぞれ違う重みを掛けて、合計するというのがニューロンの計算です。

f:id:something-make:20180918211626p:plain

この計算をそのまま書くとかなり面倒なのですが、これを行列の内積で書くと

XW = Y

というものすごく簡単な式になってしまいます。

f:id:something-make:20180918212118p:plain

実際に計算するとこんな感じです。

ちなみにこの式はフリーソフトwxMaximaで作りました。

こういう行列を取り扱うのに便利なフリーソフトです。

 

 

バイアスの取り扱いもすごく簡単になります。

f:id:something-make:20180918213256p:plain

f:id:something-make:20180918213324p:plain

XW + b = Y

そう、たったこれだけであの面倒だった計算が終わってしまいます。

この計算結果を前回やった活性化関数にそのまま放り込めばニューラルネットワークの一段の計算が完了します。

f:id:something-make:20180916125150p:plain

この計算を繰り返せば何段ものニューラルネットワークも簡単に構築することができます。

 

行列の活用方法と便利さが分かったところで、今日はここまでにします。