パーセプトロンを学ぶ
さて、引き続き 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 ) )
単層パーセプトロンでは線形だったけど、多層にすることで非線形になる。
そして多層のパーセプトロンがあれば理論的にはコンピュータが実現できる。
ということでした。
アルゴリズムのお話でした。
いったいこれがなんなのだかさっぱりつながらないけど、原理がわかってたほうがきっと後々いいんでしょう。
パーセプトロンって言葉も覚えたし。
次回は
ニューラルネットワークを学びます。
そろそろ機械学習的なことに触れたいなぁ。