728x90
반응형



퍼셉트론(Perceptron) 




1. 퍼셉트론이란?


퍼셉트론은 프랑크 로젠블라트가 1957년에 고안한 알고리즘으로 신경망(딥러닝)에 기원이 되는 알고리즘이다. 그래서 퍼셉트론의 구조를 배우는 것은 신경망 딥러닝으로 나아가는 데 중요한 아이디어를 배우는 일이 된다.


퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호를 출력한다. 여기서 말하는 신호란 전류나 강물처럼 흐름이 있는 것을 말한다. 신호가 흐를 때는 1, 신호가 흐르지 않을 때는0으로 간주한다. 



위 그림은 입력으로 2개의 신호를 받은 퍼셉트론의 예시이다. 


x1, x2 : 입력신호

y : 출력신호

w1, w2 :가중치

그림의 원 : 뉴런 or 노드

 


입력 신호가 뉴런에 보내질 때는 각각 고유한 가중치가 곱해진다. 뉴런에서 보내온 신호의 총합이 정해진 한계를 넘어설 때만 1을 출력하게 된다. 이를 뉴런이 활성화 한다 라고 표현 할 수 있다. 그 한계를 

'임계값' 이라고 한다. 임계값은 보통 θ(세타)로 표현된다. 퍼셉트론은 복수의 입력 신호 각각에 고유한 가중치를 부여하게 된다. 가중치는 각 신호가 결과에 주는 영향력을 조절하는 요소로 작용된다. 즉, 가중치가 클수록 해당 신호가 그만큼 더 중요하다는 뜻이다.





2. 단순한 논리회로


2.1 AND 게이트


AND 게이트는 입력이 둘이고 출력이 하나인 대표적인 퍼셉트론으로 나타낼 수 있는 예시이다. 위와 같은 대응표를 진리표라고 하는데 입력이 모두 1일 때만 1을 출력하고 그 외에는 0을 출력한다. 이 AND 게이트를 퍼셉트론으로 표현 하고 싶을 때 가중치 값(w1, w2)과 임계값(θ)을 정하는 일이다. 

 


예를들어 (w1, w2, θ) 이 (0.5, 0.5, 0.8) 인 경우를 생각해보자.


식 1에 의해 계산해 보면, 


(0*0.5) + (0*0.5) = 0.0         <  0.8        -> 0

(0*0.5) + (1*0.5) = 0.5        <  0.8        -> 0

(0*0.5) + (0*0.5) = 0.5        <  0.8        -> 0

(1*0.5) + (1*0.5) = 1.0         >  0.8        -> 1


이렇게 AND 게이트의 값을 만족한다.

이러한 (w1, w2, θ) 경우의 수는 무수히 많다.




2.2 NAND 게이트와 OR 게이트


 

NAND 게이트는 즉 AND에 NOT 연산을 한 것이다. (AND 결과에서 0을 1로, 1을 0으로) 즉, AND 게이트의 출력을 뒤집은 것이다. 진리표는 아래와 같다. NAND 게이트도 마찬가지로 진리표의 값들을 만족하는 (w1, w2, θ) 순서쌍이 존재한다. 예를 들면 (-0.5, -0.5, -0.7) 이다.

 


OR 게이트는 입력 신호 중 하나 이상이 1이면 출력이 1이 되는 논리회로이다. 이 OR 게이트의 매개변수는 (3, 3, 2) 등이 있다. 



이와 같이 퍼셉트론으로 AND, NAND, OR 논리회로를 표현 할 수 있다. 가장 중요한 점은 퍼셉트론의 구조는 모든 게이트에서 같다는 점이다. 다른 것은 매개변수 (가중치와 임계값) 뿐이다. 




2.3 파이썬으로 간단한 퍼셉트론 구현하기


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




2.3.1 가중치와 편향


θ를 -b 로 치환하면 퍼셉트론의 동작이 식처럼 된다. 


b는 편향(Bias) 이라고 일컫는다. 


퍼셉트론은 입력신호에 가중치를 곱한 값과 편향을 합하여, 그 값이 0을 넘으면 1을 출력하고 그렇지 않으면 0을 출력한다. 



중요한 것은 편향은 가중치와 다르다는 것이다.

즉, w1과 w2는 각 입력 신호가 결과에 주는 영향력을 조절하는 매개변수고 , 편향은 뉴런이 얼마나 쉽게 활성화 하느냐를 조정하는 매개변수이다.

일례로 b가 -0.1 이면 각 입력 신호에 가중치를 곱한 값들의 합이 0.1 을 초과할 때만 뉴런이 활성화 된다. 그러나 b가 -20.0 일 경우 각 입력 신호에 가중치를 곱한 값들의 합이 20.0을 넘지 않으면 뉴런은 활성화 하지 않는다.

이처럼 편향의 값은 뉴런이 얼마나 쉽게 활성화 되는지를 결정한다. 






2.4 퍼셉트론의 한계


퍼셉트론은 한계가 존재한다. 여기서 말하는 퍼셉트론은 '단층 퍼셉트론'이다. 지금껏 AND, NAND, OR 논리 회로를 이용해 퍼셉트론이 설명 됬는데, XOR 게이트는 다르다.

 


XOR 게이트는 배타적 논리합 이라는 논리회로이다. 다음과 같이 한쪽이 1일 때만 1을 출력한다. 배타적이라는 것은 자기 외에 다른것을 거부한다는 뜻이다. 그런 의미에서 붙여졌다. 머리에 쏙 들어온다. 



OR 게이트의 매개변수가 (-0.5, 1.0, 1.0) 일 때 퍼셉트론식에 의하여 다음 그림과 같이 나타 낼 수 있다.

 

(보라색 원 : 0인 경우, 빨간색 원 : 1인 경우)

(0, 0) 일 때 0을 출력하고

(0, 1), (1, 0), (1, 1) 일 때는 1을 출력한다.


OR 게이트를 만들려면 보라색 원과 빨간색 원을 직선으로 나누어야 한다.

이 때 위 그림과 같이 직선을 나눌 수 있다. 


그러나 XOR 같은 경우에는 직선 하나로 다음과 같은 경우를 나눌 수 없다.

이 때 직선이라는 제약을 없애고 곡선으로 나눌 수 있다. 

이러한 곡선의 영역을 '비선형' 영역 이라고 한다. 직선은 '선형' 영역이다.






2.5 다층 퍼셉트론


그래서 나온게 다층 퍼셉트론이다.

단층퍼셉트론(위에서 설명했던 퍼셉트론) 만으로는 XOR 게이트를 설명할 수가 없다. 그렇기에 층을 하나 더 쌓은 다층 퍼셉트론으로 이를 구현 할 수 있는데 이는 간단히 AND, NAND, OR 게이트를 조합함으로써 만들 수 있다. 


XOR 게이트 구현은 다음과 같이 할 수 있다.


def XOR(x1, x2) : 

s1 = NAND(x1, x2)

s2 = OR(x1, x2)

y = AND(s1, s2)

return y




이렇게 구현된 XOR를 뉴런을 이용한 퍼셉트론으로 표현하면 다음과 같다.

 


 

층이 여러개인 퍼셉트론을 다층 퍼셉트론 이라고 한다.

단층 퍼셉트론으로는 표현하지 못한 것을 층을 하나 늘려 구현 할 수 있는 것이다.

이렇게 층을 하나씩 쌓고, 깊게(DEEP!!!) 늘려간다면 더 다양한 것을 표현 할 수 있게 된다.


다층퍼셉트론은 2진수를 10진수로 변환하는 인코더, 가산기 등을 구현 할 수 있다.

심지어 컴퓨터 마저도 표현 할 수 있다.

비선형인 시그모이드 함수를 활성화 함수로 이용하면 임의의 함수를 표현할 수 있다고 한다.







퍼셉트론 정리


- 퍼셉트론은 입출력을 갖춘 알고리즘

- 퍼셉트론에서는 가중치와 편향을 매개변수로 설정

- 퍼셉트론으로 AND, OR 게이트 등의 논리 회로를 표현 할 수 있음

- XOR 게이트는 단층 퍼셉트론으로는 표현할 수 없음

- 2층 퍼셉트론을 이용하면 XOR 게이트를 표현 할 수 있음

- 단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있음

- 다층 퍼셉트론은 이론상 컴퓨터를 표현 할 수 있다.






참고자료 1 : 밑바닥부터 시작하는 딥러닝 (책)

 

728x90
반응형