パーセプトロンを学ぶ

さて、引き続き Python Deep Learning のお時間です。

はじめに

前回はPythonを入れるのが命題だったもんで、サクラエディタで作ってました。
が、今後のことを考えて、開発環境を整えました。
エディターはAtom
こちらの記事を参考にいろいろプラグイン入れました。

パーセプトロン

さて。アルゴリズムです。
2入力のパーセプトロンを学んでいきます。

パーセプトロンは入力に対して重さを掛け合わせ、その和が閾値を超えたら1、超えなければ0を出力する。
そんな原理。
式で書くとこんな感じ。

x1 * w1 + x2 * w2 > θ : y=1
x1 * w1 + x2 * w2 <= θ : y=0
x:入力
w:重さ
θ:閾値
y:出力

シータをバイアスに置き換えて考えます。
重さ(w)とバイアス(b)の大きさで1になりやすさ、なりにくさが変わってくる。
そして、バイアス、重みを変えることで同一のロジックでAND,NAND,ORの論理演算ができようになる。

    x = np.array([x1, x2])
    #↓ここを変える:重み
    w = np.array([0.5, 0.5])
    b = -0.7
    #↓ここを変える:バイアス
    tmp = np.sum(x*w) + b
    if tmp <= 0:
        return 0
    elif tmp > 0:
        return 1

ふむふむ。

ただし、このパーセプトロン(単層パーセプトロン)ではXORが表現できない。
そこでパーセプトロンを重ねて多層にしようと。

def XOR( x1, x2 ):
    AND( NAND( x1, x2 ), OR( x1, x2 ) )

単層パーセプトロンでは線形だったけど、多層にすることで非線形になる。
そして多層のパーセプトロンがあれば理論的にはコンピュータが実現できる。
ということでした。

アルゴリズムのお話でした。
いったいこれがなんなのだかさっぱりつながらないけど、原理がわかってたほうがきっと後々いいんでしょう。
パーセプトロンって言葉も覚えたし。

次回は

ニューラルネットワークを学びます。
そろそろ機械学習的なことに触れたいなぁ。