[AI] 퍼셉트론(Perceptron) - 논리연산자 구현(1)
퍼셉트론(Perceptron)
- 인공신경망의 한 종류.
- Perception과 Neuron의 합성어
- 생물학적인 신경계(Neual Network)의 기본 단위인 신경세포(뉴런)의 동작 과정을 통계학적으로 모델링한 알고리즘
- 가장 간단한 형태의 순방향(피드포워드) 네트워크, 선형 분류기로도 볼 수 있음.
인공지능의 역사
뉴런과 퍼셉트론
- Dendrite : 전기 신호를 받는 부분(입력)
- Synapse : 다른 뉴런과 Dendrite의 연결 부위, 전기신호의 세기를 재조정(가중치:w)
- Soma(cell body) : Dendrite로부터 받은 여러 전기 신호를 모두 합침.
- Axon : Soma의 전위가 일정 이상이 되면 이웃 뉴런으로 전기 신호를 보냄(출력)
퍼셉트론의 원리
AND 게이트 구현
-
전자회로는 게이트 등으로 구성 => 게이트를 인공지능으로 구현하는 것에서 부터 시작.
-
가중치(w1, w2)와 임계값(beta) 값을 찾는 것이 최종 퍼셉트론이지만, 여기서는 우선 w1=0.5, w2=0.5, beta=0.7로 정함(다양한 값이 존재).
and_input_list = [(0,0), (0,1), (1,0), (1,1)]
def AND(x1, x2) :
w1 = 0.5
w2 = 0.5
beta = 0.7
u = (x1*w1) + (x2*w2)
if u <= beta :
return 0
elif u > beta :
return 1
for xs in and_input_list :
print(xs[0], xs[1], "->", AND(xs[0], xs[1]))
NAND 게이트 구현
- 가중치(w1, w2)와 임계값(beta) 값을 찾는 것이 최종 퍼셉트론이지만, 여기서는 우선 w1=-0.5, w2=-0.5, beta=-0.7로 정함(다양한 값이 존재).
# 퍼셉트론으로 구현한 NAND
# w1 = w2 = -0.5
# beta = -0.7
and_input_list = [(0,0), (0,1), (1,0), (1,1)]
def NAND(x1, x2) :
w1 = -0.5
w2 = -0.5
beta = -0.7
u = (x1*w1) + (x2*w2)
if u <= beta :
return 0
elif u > beta :
return 1
for xs in and_input_list :
print(xs[0], xs[1], "->", NAND(xs[0], xs[1]))
OR 게이트 구현
- 가중치(w1, w2)와 임계값(beta) 값을 찾는 것이 최종 퍼셉트론이지만, 여기서는 우선 w1=0.5, w2=0.5, beta=0.2로 정함(다양한 값이 존재).
# 퍼셉트론으로 구현한 OR
and_input_list = [(0,0), (0,1), (1,0), (1,1)]
def OR(x1, x2) :
w1 = 0.5
w2 = 0.5
beta = 0.2
u = (x1*w1) + (x2*w2)
if u <= beta :
return 0
elif u > beta :
return 1
for xs in and_input_list :
print(xs[0], xs[1], "->", OR(xs[0], xs[1]))
XOR 게이트 구현
- 단일 퍼셉트론으로 XOR 게이트 구현 불가
- 멀티 퍼셉트론으로 구현 가능
def XOR(x1, x2) :
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
for xs in [(0,0), (0,1), (1,0), (1,1)] :
tmp = XOR(xs[0], xs[1])
print(xs[0], xs[1], "->", tmp)
가중치와 임계값 찾는 원리 / 멀티 퍼셉트론
and_input_list = [(0,0), (0,1), (1,0), (1,1)]
def AND(x1, x2) :
w1 = 1/1.7
w2 = 1/1.5
beta = 1
u = (x1*w1) + (x2*w2)
if u <= beta :
return 0
elif u > beta :
return 1
for xs in and_input_list :
print(xs[0], xs[1], "->", AND(xs[0], xs[1]))
문제
- 다음 진리표를 퍼셉트론으로 구현해보자.
input_list = [(0,0), (0,1), (1,0), (1,1)]
def Perceptron(x1, x2) :
w1 = -0.5
w2 = 0.5
beta = -0.4
u = (x1*w1) + (x2*w2)
if u <= beta :
return 0
elif u > beta :
return 1
for xs in input_list :
print(xs[0], xs[1], "->", Perceptron(xs[0], xs[1]))
댓글남기기