반응형
지난 시간에는 퍼셉트론이란 무엇인가에 대해 알아보았다.
이번에는 퍼셉트론으로 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 게이트를 구현하지 못하는 한계에 대해 알아보겠다.
반응형
'AI > 밑바닥부터 시작하는 딥러닝' 카테고리의 다른 글
[밑바닥부터 시작하는 딥러닝] 활성화함수란? 활성화 함수의 종류, 역할 및 구현 in python 파이썬 (What is activation function?) (2) | 2019.09.15 |
---|---|
[밑바닥부터 시작하는 딥러닝] 신경망이란? (What is neural network?) (0) | 2019.09.14 |
[밑바닥부터 시작하는 딥러닝] 퍼셉트론으로 XOR 게이트 구현하기 in python 파이썬 (0) | 2019.09.13 |
[밑바닥부터 시작하는 딥러닝] 퍼셉트론의 한계 - XOR 게이트 (limit of perceptron - XOR gate) (0) | 2019.09.12 |
[밑바닥부터 시작하는 딥러닝] 퍼셉트론이란? (What is perceptron?) (2) | 2019.09.10 |