Chapter 2. 퍼셉트론
- 퍼셉트론(perceptron) 알고리즘
- 프랑크 로젠브라크(Frank Rosenblatt)가 1957년 고안
- 신경망(딥러닝)의 기원
2.1 퍼셉트론이란?
퍼셉트론
- 다수의 신호를 입력받아 하나의 신호로 출력
- *신호 흐름과 유사, 흐른다 => 1, True 흐르지 않는다 => 2, False
- 인공 뉴런, 단순 퍼셉트론
- $x1$, $x2$ : 입력신호
- $y$ : 출력신호
- $w1$, $w2$ :가중치(weight)
- 그림의 원 : 뉴런 or 노드
- 가중치가 클수록 강한 신호 (전류에서의 저항과 유사)
- 입력신호가 뉴런에 보내질 때 고유한 가중치를 곱함
- $\theta$ : 임계값
$y= \begin{cases}
0 \ (w_1x_1 + w_2x_2 <= \theta) \\\
1 \ (w_1x_1 + w_2x_2 > \theta)
\end{cases}$
2.2 단순한 논리 회로
2.2.1 AND 게이트
$x_1$ | $x_2$ | $y$ |
---|---|---|
0 | 0 | 0 |
1 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 1 |
2.2.2 NAND 게이트
$x_1$ | $x_2$ | $y$ |
---|---|---|
0 | 0 | 1 |
1 | 0 | 0 |
0 | 1 | 0 |
1 | 1 | 0 |
2.2.3 OR 게이트
$x_1$ | $x_2$ | $y$ |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 1 |
2.3 퍼셉트론 구현
2.3.1 간단한 구현
$x1$, $x2$를 인수로 받는 AND 함수
def AND(x1, x2):
w1, w2, theta = 0.5, 0.5, 0.7
tmp = x1*w1 + x2*w2
if tmp <= theta:
return 0
elif tmp > theta:
return 1
AND(0, 0) # 0을 출력
AND(1, 0) # 0을 출력
AND(0, 1) # 0을 출력
AND(1, 1) # 1을 출력
2.3.2 가중치와 편향 도입
$b$ : $-\theta$ 치환, 편향(bias)
$y= \begin{cases}
0 \ (b + w_1x_1 + w_2x_2 <= 0) \\\
1 \ (b + w_1x_1 + w_2x_2 > 0)
\end{cases}$
import numpy as np
x = np.array([0, 1]) # 입력
w = np.array([0.5, 0.5]) # 가중치
b = -0.7 # 편향
w*x
>>> array([ 0. , 0.5])
np.sum(w*x)
>>> 0.5
np.sum(w*x) + b
>>> -0.19999999999999996
2.3.3 가중치와 편향 구현
- $w1$, $w2$ : 가중치, 입력신호가 결과에 주는 영향력(중요도) 조절 매개변수
- $b$ : 편향, 뉴런의 활성화(결과로 1 출력) 난이도 조정 매개변수, '한쪽으로 치우쳐 균형을 깬다'
- $w1$, $w2$, $b$ 를 모두 가중치라 할 수도 있음
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
def NAND(x1, x2):
x = np.array([x1, x2])
w = np.array([-0.5, -0.5]) # AND와는 가중치(w와 b)만 다르다.
b = 0.7
tmp = np.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1
def OR(x1, x2):
x = np.array([x1, x2])
w = np.array([0.5, 0.5]) # AND와는 가중치(w와 b)만 다르다.
b = -0.2
tmp = np.sum(w*x) + b
if tmp <= 0:
return 0
else:
return 1
2.4 퍼셉트론의 한계
2.4.1 XOR 게이트
XOR 게이트?
- 배타적 논리합
- 배타적: 자기 외에는 거부
- $x1$과 $x2$가 서로 다를 때 $1$ 출력
- 직선으로 구현 불가
$x_1$ | $x_2$ | $y$ |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
2.4.2 선형과 비선형
선형(직선)으로 불가능하지만 비선형(곡선)으로 XOR 구분 가능
2.5 다층 퍼셉트론
2.5.1 기존 게이트 조합
AND, NAND, OR 게이트를 조합하여 XOR 게이트 만들기
$x_1$ | $x_2$ | $y$ |
---|---|---|
0 | 0 | 0 |
1 | 0 | 1 |
0 | 1 | 1 |
1 | 1 | 0 |
2.5.2 XOR 게이트 구현
def XOR(x1, x2):
s1 = NAND(x1, x2)
s2 = OR(x1, x2)
y = AND(s1, s2)
return y
XOR(0, 0) # 0을 출력
XOR(1, 0) # 1을 출력
XOR(0, 1) # 1을 출력
XOR(1, 1) # 0을 출력
- 다층 퍼셉트론을 통해 단층 퍼셉트론으로 표현하지 못한 것 구현 가능
- 2진수=>10진수 인코더, 가산기, 컴퓨터 등
- 시그모이드 함수를 활성화함수로 사용하여 임의의 함수 표현 가능(Chapter 3 참고)
퍼셉트론 정리
- 퍼셉트론은 입출력을 갖춘 알고리즘
- 퍼셉트론에서는 가중치와 편향을 매개변수로 설정
- 퍼셉트론으로 AND, OR 게이트 등의 논리 회로를 표현 할 수 있음
- XOR 게이트는 단층 퍼셉트론으로는 표현할 수 없음
- 2층 퍼셉트론을 이용하면 XOR 게이트를 표현 할 수 있음
- 단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있음
- 다층 퍼셉트론은 이론상 컴퓨터를 표현 할 수 있다.
댓글