最近買ったiPadに傷をつけてしまい,自分も凹んでいるMotmuuです.
今回は前回学んだパーセプトロンというアルゴリズムを用いて,ANDゲート・NANDゲート・NORゲートについて勉強していきます.
パーセプトロン?!?!という方はこちら
#開発環境
以下の環境で勉強していきたいと思います.
・Python 3.6.5 ・Mac OS X 10.13.2 ・Atom 1.10.2
サンプルコードはこちら
#ANDゲート
ANDゲートとは2入力1出力のゲートです.
ANDゲートの真理値表とは以下のようになります.
x1 | x2 | y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
この条件を満たすようにパーセプトロンのパラメタを定めると,
(w1,w2,θ) = (0.5,0.5,0.6)
のようになります.(答えは1つではありません!)
ではこの条件を用いて,Pythonで実装してみましょう!
gates/AND.py
# ANDをクラスとして作成(今後組み合わせることを見越して..)
class AND():
def __new__(self,x1,x2): #引数はnodeのx1とx2
# パラメタの指定
w1 = 0.5
w2 = 0.5
t = 0.6
#パーセプトロン
if x1*w1 + w2*x2 > t:
return 1
else:
return 0
# 実際に真理値表のようになるか確かめてみました.
print(AND(0,0))
print(AND(0,1))
print(AND(1,0))
print(AND(1,1))
Terminalで実行してみると結果は以下のようになります.
******$ python and.py
0
0
0
1
これは真理値表のyと一致しています!
つまりANDゲートをパーセプトロンを用いて実装できました.
同様にNANDゲートとORゲートについても勉強していきたいと思います~.
#NANDゲート
NANDゲートはANDゲートと逆のものを示します.
なので,真理値表は以下のようになります.
x1 | x2 | y |
---|---|---|
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
このように,x1もx2も1の時に出力が0になります.
それではこのような入出力を満たすパラメタを考えます.
うーん.
(w1,w2,θ) = (-0.5,-0.5,-0.6) とかですかね...(これも色々あります)
それではサクッと実装していきましょう!
gates/NAND.py
# NANDをクラスとして作成
class NAND():
def __new__(self,x1,x2): #引数はnodeのx1とx2
# パラメタの指定
w1 = -0.5
w2 = -0.5
t = -0.6
#パーセプトロン
if x1*w1 + w2*x2 > t:
return 1
else:
return 0
# 実際に真理値表のようになるか確かめてみる
print(NAND(0,0))
print(NAND(0,1))
print(NAND(1,0))
print(NAND(1,1))
またTerminalでの実行結果は以下のようになります.
********$ python nand.py
1
1
1
0
これも真理値表と一致していますね!
お気づきかもしれませんが,NANDゲートはANDゲートノパラメタの正負を入れ替えたものになっていますね!
このシンプルさがパーセプトロンの素晴らしさでもあります.
感嘆しながら,ORゲートも実装してみましょう.
#ORゲート
例によってORゲートの真理値表は以下のようになります.
x1 | x2 | y |
---|---|---|
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
上のように,x1,x2のどちらかが1であれば出力は1になります.
これを満たすパーセプトロンのパラメタは,
(w1,w2,θ) = (0.5,0.5,0.4) とかですかね.
ではPythonで実装します!
# ORをクラスとして作成
gates/OR.py
class OR():
def __new__(self,x1,x2): #引数はnodeのx1とx2
# パラメタの指定
w1 = 0.5
w2 = 0.5
t = 0.4
#パーセプトロン
if x1*w1 + w2*x2 > t:
return 1
else:
return 0
# 実際に真理値表のようになるか確かめてみる
print(OR(0,0))
print(OR(0,1))
print(OR(1,0))
print(OR(1,1))
出力は以下の通りで真理値表と一致しています.
*******$ python or.py
0
1
1
1
#振り返り
どうでしたか.
パーセプトロンを用いると簡単に論理ゲートが実装できました.
そしてこの論理ゲートこそがコンピュータをつくって行く魔法の部品です.
なんとなく0と1でコンピュータが構成できるのが現実的になってきましたね...! (そうでもないですか??笑)
それでは次回はパーセプトロンのできることできないことを勉強し,他の論理回路についても学習していきましょう!
次はこちら -> #4 XORゲート