【読書メモ】Deep Learningを学ぶ〜多層パーセプトロンとXOR〜Part 7
最初に
本記事は以下の本から得た知見を自分用のメモも兼ねてまとめた記事となります。ただし本の内容をそのまま書き写ししているわけではなく、ある程度自身で調べたものや感想が混じっています。ご了承ください。
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
また、本記事は株式会社よむネコのプロジェクトの業務内のお時間を頂いて蓄積した知見となります。
以下会社URLです。
今回はパーセプトロンを用いたXORゲートについて考えていきます。
XORゲート
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
これはパーセプトロンで実装することができません。
例えばANDやORを図として表してみます。
次にXORの図を作成してみます。
今までのように直線で0と1を分けることができません。分けようと思った場合には、パーセプトロンでは表現ができない曲線(非線形)を描かなければなりません。
XORをパーセプトロンで表現するためには、パーセプトロンの「層を重ねる」必要があります。つまり、「AND, NAND, ORゲートを組み合わせる」ということになります。この辺は学校で「論理回路」や「デジタル回路」について学んだ時にやった覚えがあるかもしれません。
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)を重ねたパーセプトロンのことを「多層パーセプトロン」と言います。ニューロンによる表記を行うと以下のようになります。
多層パーセプトロンにすることで、より柔軟な表現が可能になります。多層パーセプトロンを用いることで(理論上は)コンピュータを再現することも可能です(ただし骨が折れるレベルの調整が必要とのこと)。
しかし、ここまでの知識だけでは、重みづけを手作業で行う必要があります。この必要性をなくすために適切な重みパラメータを自動学習する性質をもつ「ニューラルネットワーク」について、今後学んでいきます。
最後に
これで二章が終わりました。本の1/7が終わったというところです。これからどんどん難しくなっていくと思いますが、できるだけスピーディーに読了したいと思います。