徒然電脳

日々のプログラミング(とその他)忘備録 このサイトは独自研究のみに基づきます マサカリ歓迎しますというかよろしくお願いします

ディープラーニング1 ~パーセプトロン

はじめに

訳あってディープラーニングが必要になってきました。 急遽、オライリー社 斎藤康毅氏の「ゼロから作るDeepLearning Pythonで学ぶディープラーニングの理論と実装」を購入させてもらいました。

www.oreilly.co.jp

こちらの本で得たものを私なりの理解で書き連ねようと考えています。 このエントリーは自身の知識の整理が目的であり、読者への解説が目的ではありません。

ディープラーニングの学習を進めたい方は、別手段を選んでください。

パーセプトロン

パーセプトロンニューラルネットワークの起源であるアルゴリズムです。 ひとつのパーセプトロンはN次の入力を受け取り、0もしくは1の出力を行います。 入力には固有の重みが乗算され、入力すべての総和が閾値を超えると1を出力する、極めて単純な数式で記述できるアルゴリズムです。 下図の○部分はニューロンと呼ばれ、1を出力する時「ニューロンが発火する」という言い回しをするそうです。

f:id:TempProg:20171019002520p:plain

2入力のパーセプトロンは次式によって表されます。

(x1とx2を入力、yを出力、w1, w2を重み、θを閾値とする)

{\displaystyle 
    y = 
    \begin{eqnarray}
      \left\{
        \begin{array}{l}
         0\qquad(x_1w_1 + x_2w_2 \leq θ) \\
         1\qquad(x_1w_1 + x_2w_2 > θ)
        \end{array}
      \right.
    \end{eqnarray}
  }

ここまでくると、何やら論理回路のにおいがしてきます。 どうやらNANDが表現できるようです。

w1:-0.5

w2:-0.5

θ:-0.8

このような重みと閾値を設定してあげることで、NAND回路のような動作をしますね。 もちろん、重みと閾値の組み合わせは無限大にあります。

さて、ここで閾値θについて、-bと置き換えます。 すると次式が得られます。

{\displaystyle 
    y = 
    \begin{eqnarray}
      \left\{
        \begin{array}{l}
         0\qquad(b + x_1w_1 + x_2w_2 \leq 0) \\
         1\qquad(b + x_1w_1 + x_2w_2 > 0)
        \end{array}
      \right.
    \end{eqnarray}
  }

式が表す意味は変わりませんが、閾値の意味が変わりました。 bをバイアスと言います。バイアスはニューロンの発火のしやすさを表します。バイアスが大きければ大きいほど発火しやすいですね。

 多層パーセプトロン

パーセプトンは式から分かる通り線形です。すなわち、x1-x2の直行座標系における直線によってのみ出力の0と1を区切ることができます。 そこで、非線形によって領域を分けることを考えます。 そうです。パーセプトロンを重ねれば良いのです。

先程1つのパーセプトロンでNANDを表現しました。

このことは理論上すべての回路を表現できることを示します。(NAND回路の完全性)

 まとめ

  • パーセプトロンはN入力、1出力
  • 0か1を出力する
  • 重みと閾値(バイアス)を適当に決めてやることで、01出力の関数を設定
  • NANDが表現できる
  • パーセプトロンを重ねることで、より柔軟な表現が可能になる。

記事、全消ししてた

はてなブログ、1アカウントで複数ブログ管理できるようで。
それを知らず、新しい情報提供の場を設けようとして今までの記事削除してました。
が、複数ブログ管理可能なようで。

うーん、こうなるとこちら側のブログがもったいない。

更新停止していた勉強の記録でもまた始めようかな