メメメモモ

プログラミング、筋トレ、ゲーム、etc

パーセプトロンで論理回路を実装

パーセプトロン とは、ニューラルネットワーク (ディープラーニング) の期限となるアルゴリズムです。複数の信号を入力として受け取り、ひとつの信号を出力します。

以下はパーセプトロンを数式で表したものです。


y = \left\{
\begin{array}{}
  0 ( b + \omega_1 x_1 + \omega_2 x_2 \leqq 0 ) \\
  1  ( b + \omega_1 x_1 + \omega_2 x_2 > 0 )
\end{array}
\right.

x, y は入力値
 \omega重み
 \theta閾値
bはバイアス

AND、NAND、ORは、重み と バイアス の調整で実装していきます。

XORは、AND、NAND、ORの組み合わせで実装します。

以下、Python による実装です。

import numpy as np

def AND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

def NAND(x1, x2):
    x = np.array([x1, x2])
    w = np.array([-0.5, -0.5])
    b = 0.7
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

def OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.2
    tmp = np.sum(x*w) + b
    if tmp <= 0:
        return 0
    else:
        return 1

def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y

print("--- AND ---")
print(AND(0, 0))
print(AND(1, 0))
print(AND(0, 1))
print(AND(1, 1))

print("--- NAND ---")
print(NAND(0, 0))
print(NAND(1, 0))
print(NAND(0, 1))
print(NAND(1, 1))

print("--- OR ---")
print(OR(0, 0))
print(OR(1, 0))
print(OR(0, 1))
print(OR(1, 1))

print("--- XOR ---")
print(XOR(0, 0))
print(XOR(1, 0))
print(XOR(0, 1))
print(XOR(1, 1))

参考

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装

ゼロから作るDeep Learning ―Pythonで学ぶディープラーニングの理論と実装