Enjoy Engineer Life

C#,Unity,C++,UE4などの技術ブログや雑記を徒然なるままに書いていきます。

【読書メモ】Deep Learningを学ぶ〜多層パーセプトロンとXOR〜Part 7

最初に

本記事は以下の本から得た知見を自分用のメモも兼ねてまとめた記事となります。ただし本の内容をそのまま書き写ししているわけではなく、ある程度自身で調べたものや感想が混じっています。ご了承ください。

f:id:rossamu:20190103000547p:plain ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

また、本記事は株式会社よむネコのプロジェクトの業務内のお時間を頂いて蓄積した知見となります。
以下会社URLです。

http://www.yomune.co/ f:id:rossamu:20191023153505p:plain



今回はパーセプトロンを用いたXORゲートについて考えていきます。

XORゲート


排他的論理和と呼ばれる論理回路です。

X_1 X_2 Y
0 0 0
1 0 1
0 1 1
1 1 0



これはパーセプトロンで実装することができません。

例えばANDやORを図として表してみます。

f:id:rossamu:20191023160046p:plain

f:id:rossamu:20191023160114p:plain



次にXORの図を作成してみます。

f:id:rossamu:20191023160143p:plain


今までのように直線で0と1を分けることができません。分けようと思った場合には、パーセプトロンでは表現ができない曲線(非線形)を描かなければなりません。

XORをパーセプトロンで表現するためには、パーセプトロンの「層を重ねる」必要があります。つまり、「AND, NAND, ORゲートを組み合わせる」ということになります。この辺は学校で「論理回路」や「デジタル回路」について学んだ時にやった覚えがあるかもしれません。

f:id:rossamu:20191023160143p:plain



X_1 X_2 NAND OR tex:Y
0 0 1 0 0
1 0 1 1 1
0 1 1 1 1
1 1 0 1 0


(実装例)

 def XOR(x1,x2):
     nand_y = NAND(x1,x2)
     or_y = OR(x1,x2)
     xor_y = AND(nand_y,or_y)
     return xor_y



このように層(x1,x2→nand_y,or_y→xor_y)を重ねたパーセプトロンのことを「多層パーセプトロンと言います。ニューロンによる表記を行うと以下のようになります。

f:id:rossamu:20191023160239p:plain


多層パーセプトロンにすることで、より柔軟な表現が可能になります。多層パーセプトロンを用いることで(理論上は)コンピュータを再現することも可能です(ただし骨が折れるレベルの調整が必要とのこと)。

しかし、ここまでの知識だけでは、重みづけを手作業で行う必要があります。この必要性をなくすために適切な重みパラメータを自動学習する性質をもつ「ニューラルネットワーク」について、今後学んでいきます。

最後に


これで二章が終わりました。本の1/7が終わったというところです。これからどんどん難しくなっていくと思いますが、できるだけスピーディーに読了したいと思います。