最初に
本記事は以下の本から得た知見を自分用のメモも兼ねてまとめた記事となります。ただし本の内容をそのまま書き写ししているわけではなく、ある程度自身で調べたものや感想が混じっています。ご了承ください。
ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装
今回はパーセプトロンを用いたXORゲートについて考えていきます。
1 : Deep Learningを学ぶ #1 〜単純パーセプトロンと論理回路〜
以降は「 Enjoy Engineer Life 」にて投稿していきます。
XORゲート
排他的論理和と呼ばれる論理回路です。
$X_1$ | $X_2$ | $Y$ |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
これはパーセプトロンで実装することができません。
例えばANDやORを図として表してみます。
次にXORの図を作成してみます。
今までのように直線で0と1を分けることができません。分けようと思った場合には、パーセプトロンでは表現ができない曲線(非線形)を描かなければなりません。
XORをパーセプトロンで表現するためには、パーセプトロンの「層を重ねる」必要があります。つまり、**「AND, NAND, ORゲートを組み合わせる」**ということになります。この辺は学校で「論理回路」や「デジタル回路」について学んだ時にやった覚えがあるかもしれません。
$X_1$ | $X_2$ | NAND | OR | $Y$(AND) |
---|---|---|---|---|
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が終わったというところです。これからどんどん難しくなっていくと思いますが、できるだけスピーディーに読了したいと思います。