徒然なるままにMake:

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

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

前回

something-make.hatenablog.com

参考書はこれ

 

前回はパーセプトロンでAND NAND ORゲートを作りました。

ただ、このパーセプトロンには限界があるようで、XORゲートを実装できないらしいのです。

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

これがそのXOR

x1とx2が違うときに1を出力し、同じときは0を出力します

なぜこれを実装できないのかをORゲートで考えてみます。

パラメーターが(b,w1,w2)=(-0.5,1.0,1.0)のとき、真理値表は

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

 このときのパーセプトロンの式は次のようになります。

y = { 0 - 0.5 + x 1 + x 2 0 1 - 0.5 + x 1 + x 2 > 0  

このパーセプトロンの式を変形して境界を求めると

  - 0.5 + x 1 + x 2 = 0

x 2 = 0.5 - x 1  

この直線を引いて境界を考えると次のようになります。

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

直線の上(緑))側でパーセプトロンの式は1、下側(青)で0になります。

このグラフを見るとORゲートでは(x1,x2)=(0,0)で0を出力、(0,1),(1,0),(1,1)で1を出力することがわかります。

 

ANDゲートについても考えてみます。

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

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

直線の上(緑))側でパーセプトロンの式は1、下側(青)で0になります。

パラメーターが(b,w1,w2)=(-0.7,0.5,0.5)

式を同じように変形して境界線を引くと(x1,x2)=(0,0),(0,1),(1,0)で0を出力、(1,1)で1を出力することがわかります。

 

NANDゲートはパラメーターが(b,w1,w2)=(0.7,-0.5,-0.5)となりパラメータが逆転します。(x1,x2)=(1,1)で0を出力、(0,0),(0,1),(1,0)で1を出力します。

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

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

OR,AND,NANDゲートはパーセプトロンの式が、直線でグラフを0と1で区切ることでできていることがわかります。

区切り方を変えればOR,AND,NANDが全て実装できるわけです。

 

ならXORはどう区切ればいいのか?

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

要するにこれを直線一本で区分けすればいいわけです。

当然ながら無理です。どうやっても区切れません。つまりパーセプトロンでXORは作れないわけです。

 

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

こんな風に曲線で区切ることができればいいんですが、パーセプトロンは直線でしか区切れないのです。残念ながら。

そんなわけで今日はここまでです。