ディープラーニングを始めてみる 2
前回
参考書はこれ
前回はパーセプトロンでAND NAND ORゲートを作りました。
ただ、このパーセプトロンには限界があるようで、XORゲートを実装できないらしいのです。
これがそのXOR
x1とx2が違うときに1を出力し、同じときは0を出力します
なぜこれを実装できないのかをORゲートで考えてみます。
パラメーターが(b,w1,w2)=(-0.5,1.0,1.0)のとき、真理値表は
このときのパーセプトロンの式は次のようになります。
このパーセプトロンの式を変形して境界を求めると
この直線を引いて境界を考えると次のようになります。
直線の上(緑))側でパーセプトロンの式は1、下側(青)で0になります。
このグラフを見るとORゲートでは(x1,x2)=(0,0)で0を出力、(0,1),(1,0),(1,1)で1を出力することがわかります。
ANDゲートについても考えてみます。
直線の上(緑))側でパーセプトロンの式は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を出力します。
OR,AND,NANDゲートはパーセプトロンの式が、直線でグラフを0と1で区切ることでできていることがわかります。
区切り方を変えればOR,AND,NANDが全て実装できるわけです。
ならXORはどう区切ればいいのか?
要するにこれを直線一本で区分けすればいいわけです。
当然ながら無理です。どうやっても区切れません。つまりパーセプトロンでXORは作れないわけです。
こんな風に曲線で区切ることができればいいんですが、パーセプトロンは直線でしか区切れないのです。残念ながら。
そんなわけで今日はここまでです。