1. 퍼셉트론의 정의
- 인공 뉴론, 단순 퍼셉트론, 인공 신경망의 한 종류
- 1943년 미국 신경외과 의사인 워렌 맥컬록에 의해서 발단이 되었고
1957년 프랑크 로젠 블라트가 퍼셉트론 알고리즘을 고안했다. - 인간의 뇌의 동작을 전기 신호 on/off로 흉내닐수 있다는 이론을 증명했다.
- 인간의 신경세포 하나를 흉내냈다.
- 다수의 신호를 입력받아 하나의 신호를 출력한다.
- 가장 간단한 형태의 피드포워드 네트워크
2. 퍼셉트론의 구조와 식
2-1 퍼셉트론의 구조
2-2 퍼셉트론의 식
2-3 퍼셉트론 구조와 식 설명
x1, x2 | 입력 신호 | |
w1, w2 | 가중치, weight | - 각 신호가 결과에 주는 영향력을 조절하는 요소 - 가중치가 클수록 해당 신호가 그만큼 더 중요하다는 뜻 |
θ | 임계값, -b | |
b | 편향, bias, -θ | - '편향'은 한쪽이 치우쳐 균형이 깨진다는 뜻 - 뉴런이 얼마나 쉽게 활성화(1을 출력) 하느냐를 조정하는 매개변수 |
y | 출력 신호 | - 출력 신호가 1이 되는걸 '뉴런이 활성화한다'라고 표현 |
- 입력 신호(x1, x2)가 뉴런에 보내질 때 각가 고유한 가중치(w1, w2)가 곱해진다. (여기에 편향(b)가 더해지기도 한다.)
- 뉴런에서 보내온 신호가 임계값(θ) 출력 신호(y)가 1을 출력한다.
3. 단층 퍼셉트론
3-1 논리 회로 구현하기
(w1, w2, θ) | 성공 여부 | |
AND | (0.5, 0.5, 0.7) / (1, 1, 1) / ... | 성공 |
NAND | (-0.5, -0.5, -0.7) / ... | 성공 |
OR | (0.5, 0.5, 0.3) / ... | 성공 |
XOR | ??? | 실패 |
- 같은 구조의 퍼셉트론으로 AND, NAND, OR 논리 회로를 표현할 수 있다.
- 매개변수(가중치, 임계값)만 바꾸면 된다.
- 선형(직선)으로 표현할 수 있다.
- 퍼셉트론의 매개변수 값을 컴퓨터가 자동으로 정하게 만드는 작업을 기계학습에서 '학습'이라고 한다.
3-2 AND 게이트
X1 | X2 | Y |
0 | 0 | 0 |
0 | 1 | 0 |
1 | 0 | 0 |
1 | 1 | 1 |
Y = 0 W1*X1 + W2*X2 <= θ
Y = 1 W1*X1 + W2*X2 > θ
# 파이썬 코드로 구현 AND(0,0) AND(0,1) AND(1,0) AND(1,1) |
|
# R 코드로 구현 def AND(x1,x2): w1,w2,theta = 0.5,0.5,0.7 x = np.array([x1,x2]) w = np.array([w1,w2]) tmp = np.sum(w*x) if tmp <= theta: return 0 else: return 1 input = np.array([[0,0],[0,1],[1,0],[1,1]]) for i in input : print(str(i)+" => "+str(AND(i[0],i[1]))) |
3-3 OR 게이트
X1 | X2 | Y |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 1 |
# 파이썬 코드로 구현 def OR(x1,x2): |
3-4 NAND 게이트 (Not AND)
X1 | X2 | Y |
0 | 0 | 1 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
# 파이썬으로 코드구현 |
4. 다층 퍼셉트론
XOR 게이트 (eXclusive OR)
X1 | X2 | Y |
0 | 0 | 0 |
0 | 1 | 1 |
1 | 0 | 1 |
1 | 1 | 0 |
퍼셉트론의 한계
- 직선 하나로 XOR의 출력을 구분할 수 없다.
- 퍼셉트론(단층 퍼셉트론)은 직선 하나로 나눈 영역만 표현할 수 있다는 한계가 있다.
- 민스키 교수님이 기존 퍼셉트론의 문제점을 지적했는데 XOR 분류를 못한다는 문제점을 지적하고 인공지능의 겨울기가 시작되었다.
다층퍼셉트론(Multi layer perceptron)
XOR(eXclusive OR)
X1 | X2 | OR | NAND | AND | XOR |
0 | 0 | 0 | 1 | 0 | 0 |
0 | 1 | 1 | 1 | 1 | 1 |
1 | 0 | 1 | 1 | 1 | 1 |
1 | 1 | 1 | 0 | 0 | 0 |
- X1, X2를 통해 OR층을 만든다.
- X1, X2를 통해 NAND층을 만든다.
- OR층과 NAND층을 AND 계산 작업을 하면 XOR를 만들 수 있다.
# 파이썬으로 구현하기 input = np.array([[0,0],[0,1],[1,0],[1,1]]) for i in input : print(str(i)+" => "+str(XOR(i[0],i[1]))) |
'인공지능 > 딥러닝' 카테고리의 다른 글
손실 함수(Loss Function)와 최적화(Optimizer) (0) | 2020.04.27 |
---|---|
신경망의 출력층 (0) | 2020.04.21 |
활성화 함수 (0) | 2020.04.20 |
인공지능 / 머신러닝과 딥러닝의 차이점 (0) | 2020.04.19 |
신경망 (0) | 2020.04.13 |