오답노트
[밑딥] 퍼셉트론 본문
퍼셉트론이란
퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호를 출력. 다만 퍼셉트론의 신호는 1 또는 0의 두 가지 값을 갖는다.
입력으로 2개의 신호를 받는 퍼셉트론이다. x1 과 x2 는 입력 신호 y는 출력 신호, w1,w2는 가중치다. 원을 뉴런 혹은 노드라고 부르고 입력 신호가 뉴런에 보내질 때, 각각 고유한 가중치가 곱해진다. 뉴런에서 보내온 신호의 총합이 정해진 임계값를 넘어 설 때만 1을 출력한다. 이를 뉴런이 활성화한다고 표현한다. 임계값은 θ(세타,theta)로 표현한다.
수직은 아래와 같다.
퍼셉트론은 복수의 입력 신호 각각에 고유한 가중치를 부여한다. 가중치는 각 신호가 결과에 주는 영향력을 조절하는 요소로 작용한다. 즉 가중치가 클수록 해당 신호가 중요하다!
단순한 논리 회로
AND 게이트
AND 게이트는 두 입력이 모두 1일 때만 1을 출력하고 그외에는 0을 출력한다.
AND 게이트를 퍼셉트론의 예로 들면 (w1,w2,θ) 일때, (0.5,0.5,0.8)로 가정하면 x1,x2 가 모두 1일 때 1 그 외에는 임계값 0.8을 넘지 못하므로 0이다.
NAND 게이트와 OR 게이트
- NAND : not AND로 AND 게이트의 출력을 뒤집은 것
NAND 게이트를 퍼셉트론의 예로 들면 (w1,w2,θ) 일때, (-0.5,-0.5,-0.8)로 가정하면 x1,x2 가 모두 1일 때 0 그 외에는 임계값 -0.8을 넘으므로 1이다.
- OR 게이트 : 입력 신호중 하나라도 1이면 1을 출력 아니면 0을 출력
OR 게이트를 퍼셉트론의 예로 들면 (w1,w2,θ) 일때, (1,1,1)로 가정하면 x1,x2 가 하나 이상 1일 때 1 그 외에는 임계값 1을 넘으므로 0이다.
퍼셉트론 구현하기
간단한 구현
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
print(AND(0,0)) # 0
print(AND(0,1)) # 0
print(AND(1,0)) # 0
print(AND(1,1)) # 1
가중치와 편향 도입
위 식은 θ를 b로 치환했을 때 식이다. b는 편향이라고 한다. 퍼셉트론은 입력 신호에 가중치를 곱한 값과 편향을 합하여, 그 값이 0을 넘으면 1을 출력하고 그렇지 않으면 0을 출력한다.
편향과 가중치의 기능은 다르다. 가중치는 입력 신호가 결과에 주는 영향력을 조절하는 매개변수이고, 편향은 뉴런이 얼마나 쉽게 활성화시키는지 조정하는 매개변수이다.
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(x*w) + 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(x*w) + b
if tmp <= 0 :
return 0
else:
return 1
def OR(x1,x2):
x = np.array([x1,x2])
w = np.array([1,1])
b = 0
tmp = np.sum(x*w) + b
if tmp <= 0 :
return 0
else:
return 1
퍼셉트론의 한계
XOR 게이트
- XOR 게이트 : x1 과 x2 중 하나만 1일 때만 1을 출력한다.
XOR 게이트는 퍼셉트론으로 구현할 수 없다.
위에서 다룬 게이트 들과 달리 XOR 게이트는 직헌 하나로 정의할 수 없기 때문이다.
다층 퍼셉트론
퍼셉트론으로는 XOR 게이트를 표현할 수 없다는 것을 알았다. 하지만 퍼셉트론을 여러 층으로 쌓은 다층 퍼셉트론을 만들 수 있고, 이를 이용해 XOR를 표현할 수 있다.
기존 게이트 조합하기
NAND * OR = XOR 로 AND,NAND,OR 게이트를 사용하여 XOR를 구현할 수 있다.
게이트 구현하기
def XOR(x1,x2):
s1 = NAND(x1,x2)
s2 = OR(x1,x2)
return AND(s1,s2)
print(XOR(0,0)) # 0
print(XOR(1,0)) # 1
print(XOR(0,1)) # 1
print(XOR(1,1)) # 0
XOR은 위와 같이 다층 구조의 네트워크이다. AND,OR가 단층 퍼셉트론인데 반해 XOR은 2층 퍼셉트론이다. 이처럼 층이 여러 개인 퍼셉트론을 다층 퍼셉트론이라고 한다.
- 0층의 두 뉴런이 입력 신호를 받아 1층의 뉴런으로 신호를 보낸다.
- 1층의 뉴런이 2층의 뉴런으로 신호를 보내고, 2층의 뉴런은 y를 출력한다.
정리
- 퍼셉트론은 입출력을 갖춘 알고리즘이다. 입력을 주면 정해진 규칙에 따른 값을 출력한다.
- 퍼셉트론에서는 '가중치'와 '편향'을 매개변수로 설정한다.
- 퍼센트론으로 AND. OR 게이트 등의 논리 회로를 표현할 수 있다.
- XOR 게이트는 단층 퍼셉트론으로는 표현할 수 없다.
- 2층 퍼셉트론을 이용하면 XOR 게이트를 표현할 수 있다.
- 단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있다.
- 다층 퍼셉트론은 (이론상) 컴퓨터를 표현할 수 있다.
'Python > DL' 카테고리의 다른 글
[밑딥] 신경망 학습 (0) | 2023.02.27 |
---|---|
[밑딥] 신경망 (0) | 2023.01.21 |
[NLP] koBERT 실습 (1) | 2022.10.15 |
[NLP] N-gram (0) | 2022.10.14 |
[NLP] BERT (0) | 2022.10.07 |