Introduction
퍼셉트론(perceptron)은 Frank Rosenblatt에 의해 1957년에 고안된 알고리즘이다
이 알고리즘은 신경망(딥러닝)의 기원이 되는 알고리즘 이다
퍼셉트론이란?
퍼셉트론은(인공뉴런, 단순 퍼셉트론)은 다수의 신호를 입력으로 받아 하나의 신호를 출력
x1, x2는 입력 , y는 출력 , w1과 w2는 가중치 , 원은 노드 혹은 뉴런
뉴런에서 보내온 신호의 총합이 정해진 한계(\(\theta\))를 넘으면 1을 출력. 아니면 0.
여기서는 임계값(\(\theta\)) 으로 표현
이를 수식으로 나타내면 다음과 같다. $$y = \begin{cases} 0 & (w_1x_1 + w_2x_2 \leq \theta) \\ 1 & (w_1x_1 + w_2x_2 > \theta) \end{cases}$$
가중치는 전류에서 말하는 저항 으로 볼 수도 있다.
단순한 논리 회로
AND 게이트
입력이 둘이고 출력은 하나. 다음과 같은 입력 신호와 출력 신호의 대응표를 진리표라고 한다. 두 입력이 모두 1일 때만 1을 출력, 그 외에는 0을 출력 $$ \begin{array}{cc:c} x_1 & x_2 & y \\ \hdashline 0 & 0 & 0 \\ 1 & 0 & 0 \\ 0 & 1 & 0 \\ 1 & 1 & 1 \\ \end{array}$$
이 AND 게이트로 퍼셉트론을 표현하려면 어떻게 해야 할까? → w1, w2, \(\theta$를 정하면 된다
위 표를 만족하는 조합은 무수히 많다. (0.5, 0.5, 0.8), (1.0, 1.0, 1.0) 등…
NAND 게이트와 OR 게이트
NAND(Not And) : AND 게이트의 출력을 뒤집은 것, 두 값이 같으면 1 아니면 0 출력 $$\begin{array}{cc:c} x_1 & x_2 & y \\ \hdashline 0 & 0 & 1 \\ 1 & 0 & 1 \\ 0 & 1 & 1 \\ 1 & 1 & 0 \\ \end {array}$$
(w1, w2, \(\theta\)) = (-0.5, -0.5, -0.7), (1, -0.5, -1)…
사실 AND 게이트의 Weight와 \(\theta\)를 부호만 바꾸면 된다
OR 게이트: 입력 신호 중 하나 이상이 1이면 출력이 1
$$\begin{array}{cc:c} x_1 & x_2 & y \\ \hdashline 0 & 0 & 0 \\ 1 & 0 & 1 \\ 0 & 1 & 1 \\ 1 & 1 & 1 \\ \end {array}$$
(w1, w2, \(\theta\)) = (0.2, 0.2, 0.1) …
여기서 퍼셉트론의 매개 변수 값을 정하는 것을 컴퓨터가 자동으로 하도록 하는 것이 학습 이다.
중요한 것은 AND, NAND, OR 게이트에서의 퍼셉트론의 구조는 모두 똑같다. 다른 것은 가중치 뿐이다.
퍼셉트론 구현하기
가중치와 편향 도입
\(\theta\)를 -b로 치환하면 다음과 같이 된다 $$y = \begin{cases} 0 & (b + w_1x_1 + w_2x_2 \leq 0) \\ 1 & (b + w_1x_1 + w_2x_2 > 0) \end{cases}$$
여기서 b(편향은) 가중치 w와 기능이 다르다. w는 각 입력 신호가 결과에 주는 영향력(중요도)를 조절하는 매개변수고, 편향은 뉴런이 얼마나 쉽게 활성화 (결과로 1을 출력)되느냐를 조정하는 매개변수
문맥에 따라 둘 다 가중치라고 부르기도 한다.
퍼셉트론의 한계
XOR 게이트
XOR 게이트는 배타적 논리합으로서 x1과 x2중 한쪽이 1일 때만 1을 출력 $$\begin{array}{cc:c} x_1 & x_2 & y \\ \hdashline 0 & 0 & 0 \\ 1 & 0 & 1 \\ 0 & 1 & 1 \\ 1 & 1 & 0 \\ \end {array}$$
퍼셉트론으로는 XOR을 구현할 수 없다. 왜일까?
우선 OR 게이트의 동작을 시각적으로 표현해보면 다음과 같다.
(b, w1, w2) = (-0.5, 1.0, 1.0)이라 하면, $$y=\begin{cases} 0 & (-0.5 + x_1 + x_2 \leq 0) \\ 1 & (-0.5 + x_1 + x_2 > 0) \end{cases}$$회색 영역은 0을 출력, 전체 영역은 OR 게이트의 성질을 만족한다.
0은 원, 1은 삼각형일 때 OR 게이트를 만들려면 O와 삼각형을 직선으로 나눠야한다. 위 그림의 직선은 네 점을 제대로 나누고 있다.
반면 다음과 같은 XOR 게이트의 출력은 직선 하나로 만들 수 없다.
하지만 직선 하나로 O와 △을 나눌순 없지만 곡선이라면 가능하다.
곡선의 영역을 비선형 영역, 직선의 영역을 선형 영역이라고 한다.
다층 퍼셉트론이 출동한다면
퍼셉트론으로는 XOR 게이트를 표현할 수 없지만 다층 퍼셉트론(Multi-layer perceptron)은 가능하다.
기존 게이트 조합하기
XOR 게이트를 만드는 방법은 다양하다. AND, NAND,OR 게이트를 조합하면 된다.
다음 그림에서 '?'에 게이트를 하나씩 대입하면 XOR를 완성할 수 있다.
XOR 게이트의 진리표 $$\begin{array}{cc:cc:c} x_1 & x_2 & s_1 & s_2 & y \\ \hdashline 0 & 0 & 1 & 0 & 0 \\ 1 & 0 & 1 & 1 & 1 \\ 0 & 1 & 1 & 1 & 1 \\ 1 & 1 & 0 & 1 & 0 \\ \end {array}$$
s1 = NAND 게이트 출력, s2= OR 게이트 출력
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을 출력
XOR 게이트를 뉴런을 이용한 퍼셉트론으로 표현하면 다음과 같이 된다.
0, 1, 2 세 개의 층으로 구분되지만, 가중치를 갖는 층은 2개 뿐이라 2층 퍼셉트론이라고 부른다.
위 그림과 같은 2층 퍼셉트론에서는 0층에서 1층으로 신호가 전달되고, 이어서 1층에서 2층으로 신호가 전달 된다.
단층 퍼셉트론으로는 표현하지 못한 것을 층을 하나 늘려 구현할 수 있다.
책에는 안나와있지만 아래처럼 그림을 그릴 수 있음
XOR 게이트는 계단식 Activation Function이 있는 비선형 함수라고 생각해야함! 즉, 위에서 2개의 레이어를 쌓을 때, 선형 함수 조합이 아니라 비선형 조합이기 때문에 비선형성이 필요한 XOR 문제를 해결 할 수 있었다고 봐야한다. 헷갈리지 말자
NAND에서 컴퓨터까지
다층 퍼셉트론은 복잡한 회로를 만들 수 있다. 예를 들면, 덧셈을 처리하는 계산기, 2진수를 10진수로 변환하는 인코더, 어떤 조건을 충족하면 1을 출력하는 회로(패리티 검사 회로)도 퍼셉트론으로 표현 할 수 있다.
사실은 퍼셉트론을 이용하면 ‘컴퓨터’마저 표현할 수 있다.
컴퓨터 내부에서 이뤄지는 처리가 매우 복잡할 거 같지만 사실은 NAND 게이트의 조합만으로 컴퓨터가 수행하는 일을 재현할 수 있다.
그럼 어떤 구조의 퍼셉트론이면 컴퓨터를 표현할 수 있을까? 층을 얼마나 깊게 하면 컴퓨터가 만들어 질까?
답은 “이론상 2층 퍼셉트론이면 컴퓨터를 만들 수 있다”
정확히는 비선형인 시그모이드 함수를 활성화 함수 로 이용하면 임의의 함수를 표현할 수 있다는 사실이 증명되었다.
그러나 실제로 2층 퍼셉트론 구조에서 가중치 조절만으로 컴퓨터를 만다는 것은 너무 어렵다.
실제로도 NAND 등의 저수준 소자에서 시작하여 컴퓨터를 만드는 데 필요한 부품(모듈)을 단계적으로 만들어가는 쪽이 자연스럽다. 즉, 처음에는 AND와 OR 게이트, 그다음에는 반가산기와 전가산기, 그 다음에는 산술 논리 연산 장치(ALU), 그 다음에는 CPU…
정리
퍼셉트론은 입출력을 갖춘 알고리즘이다. 입력을 주면 정해진 규칙에 따른 값을 출력한다.
퍼셉트론에서는 ‘가중치’와 ‘편향’을 매개변수로 설정한다.
퍼셉트론으로 AND, OR 게이트 등의 논리 회로를 표현할 수 있다.
XOR 게이트는 단층 퍼셉트론으로는 표현할 수 없다.
2층 퍼셉트론을 이용하면 XOR 게이트를 표현할 수 있다.
단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있다.
다층 퍼셉트론은 (이론상) 컴퓨터를 표현할 수 있다.
질문