AI/밑바닥부터 시작하는 딥러닝

[밑바닥부터 시작하는 딥러닝] 파이썬으로 논리회로 구현하기 (AND, NAND, OR gate with perceptron in python)

슈퍼짱짱 2019. 9. 11. 08:00
반응형

지난 시간에는 퍼셉트론이란 무엇인가에 대해 알아보았다.

이번에는 퍼셉트론으로 AND, NAND, OR 게이트 구현하는 방법에 대해 알아보겠다.


>> 퍼셉트론이란? 바로가기




perceptron으로 AND, NAND, OR 게이트 구현하기 in python


1. AND 게이트


AND 게이트의 진리표는 다음과 같다.


<AND 게이트 진리표>


이를 퍼셉트론으로 구현하기 위해서는 해당 input에 대한 output이 나오도록 w1, w2, θ 값을 정해야 한다.

이를 만족하는 (w1, w2, θ)의 조합은 (0.5,0.5,0.7), (0.5,0.5,0.8), (1,1,1) 등 무수히 많다.


1.1 이를 파이썬에서 perceptron으로 구현하면 다음과 같다.


1
2
3
4
5
6
7
8
9
10
11
12
def AND(x1,x2):
    w1,w2,theta=0.5,0.5,0.7
    tmp = x1*w1 + x2*w2
    if tmp <= theta :
        return 0
    else :
        return 1
 
AND(0,0)
AND(1,0)
AND(0,1)
AND(1,1)
cs

>>> AND(0,0)
0

>>> AND(1,0)
0

>>> AND(0,1)
0

>>> AND(1,1)
1


1.2 편향(bias) 도입

편의를 위해 θ를 -b로 치환하여 퍼셉트론의 동장을 다음과 같이 바꾼다.


이때 AND게이트 파이썬 코드는 다음과 같다.


1
2
3
4
5
6
7
8
9
10
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
cs


* 지금은 w와 b의 값을 지정해 주었지만, 후에 이 값을 스스로 찾게 하는 것을 딥러닝에서 학습이라 한다.




2. NAND 게이트


<NAND 게이트 진리표>


마찬가지로 파이썬에서 NAND 게이트를 퍼셉트론으로 구현하면 다음과 같다.

AND 게이트와 반대의 출력값을 가지므로 가중치와 편향의 부호를 반대로 해주면 된다.


1
2
3
4
5
6
7
8
9
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
cs


>>> NAND(0,0)
1

>>> NAND(1,0)
1

>>> NAND(0,1)
1

>>> NAND(1,1)

0




3. OR 게이트


<OR 게이트 진리표>


마찬가지로 파이썬에서 OR 게이트를 퍼셉트론으로 구현하면 다음과 같다.


1
2
3
4
5
6
7
8
9
def OR(x1,x2):
    x = np.array([x1,x2])
    w = np.array([0.5,0.5])
    b = -0.2
    tmp = np.sum(w*x)+b
    if tmp <= 0 :
        return 0
    else :
        return 1
cs


>>> OR(0,0)

0

>>> OR(1,0)
1

>>> OR(0,1)
1

>>> OR(1,1)

1



다음시간에는 퍼셉트론으로 XOR 게이트를 구현하지 못하는 한계에 대해 알아보겠다.


>> 퍼셉트론의 한계 바로가기

반응형