퍼셉트론이란?

퍼셉트론은 프랑크 로젠블라트가 1957년에 고안한 알고리즘으로 딥러닝(신경망)의 기원이 되는 알고리즘이다. 미분적분학을 하기 전에 사칙연산을 하는 것처럼, 딥러닝을 배우기 위해서는 퍼셉트론의 구조를 배우는 것이 매우 중요한 일이기 기 때문에 익혀둬야 한다.

퍼셉트론이란 위 사진처럼 신호(x1, x2)를 입력받아 하나의 신호(y)를 출력하는 것을 말합니다. 그림에 있는 원들을 뉴런 또는 노드라고 부르며, 입력 신호가 뉴런에 보내질 때는 각각 고유한 가중치(w1, w2)가 곱해집니다. 뉴런에서 보내온 신호의 총합이 정해진 한계를 넘어설 때만 1(흐른다)를 출력하고, 이를 '뉴런이 활성화한다'라고 표현하기도 합니다. 그리고 이 한계를 임계값이라고 부르며 θ라는 기호로 나타냅니다.

위의 그림은 퍼셉트론의 동작 원리는 수식으로 나타낸 것입니다. 가중치가 클수록 해당 신호가 더 중요하다는 것을 알수 있습니다.


논리 회로

AND 게이트

퍼셉트론을 활용한 간단한 문제를 살펴보자면 논리 회로를 알아야 한다. 논리 회로는 위 그림과 같이 입력 신호와 출력 신호의 진리표처럼 구성되고, 위 그림은 AND 게이트의 진리표이다. AND 게이트의 진리표는 입력이 모두 1일 때만 1을 출력하고, 그 외에는 0을 출력한다.(AND 조건을 생각하면 편하다. 모두가 1을 만족할 때 -> 1)

퍼셉트론으로 들어오자면 그림을 만족하는 퍼셉트론의 매개변수 조합은 무한히 많다. (w1, w2, θ)값이 (0.5, 0.5, 0.8)이나 (1.0, 1.0, 1.0) 때 모두 AND 게이트의 조건을 만족하고 x1과 x2 모두가 1일 때 가중 신호의 총합이 주어진 임계값을 웃돌게 된다.

 

NAND 게이트

NAND 게이트는 AND를 부정하는 것이라고 생각하면 편하다.(AND의 출력값을 반대로) 매개변수는 (w1, w2, θ) = (-0.5, -0.5, -0.7) 조합처럼 AND 게이트를 구현하는 매개변수의 부호를 모두 반전하는 것이다.

 

OR 게이트

OR 게이트는 위 그림처럼 둘 중에 하나만 1이 있다면 출력 신호를 1을 반환하는 것이다. 매개변수로는 (w1, w2, θ) = (0.5, 0.5, 0)이 있다.

 

이처럼 퍼셉트론으로 여러가지 논리 회로를 표현할 수 있는데, 중요한 점은 퍼셉트론의 구조는 모두 똑같다는 것이다. 세 가지 게이트에서 다른 점은 매개변수(가중치, 임계값)뿐만이다. 즉 매개변수 값을 정하는 작업은 학습을 통해 컴퓨터가 자동적으로 조절하고, 사람은 구조(모델)을 짜는 역할을 해야한다.

 

코드 구현

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을 출력

논리 회로를 python으로 구현하자면 x1과 x2를 인수로 받는 AND함수를 짤 수 있고, 가중치를 곱한 입력의 총합이 임계값을 넘으면 1을 반환하고 그 외에는 0을 반환한다.


가중치와 편향

앞에서 구현한 AND 게이트는 직관적이지만 θ를 -b로 치환하면 퍼셉트론의 동작이 위 수식처럼 될 수 있다. 여기서 b를 편향(bias)라고 하며 w1과 w2는 그대로 가중치이다. 

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(w*x) + b
    if tmp <= 0:
    	return 0
    else:
    	return 1

numpy라는 수학, 배열 연산 패키지를 활용해 위 수식을 코드로 구현하면 다음과 같다. 각 값을 곱해서 더하고 편향을 더하면 식의 계산이 완료된다. w1과 w2는 각 입력 신호가 결과에 주는 영향력(중요도)을 조절하는 매개변수이고, 편향은 뉴런이 얼마나 쉽게 활성화(결과로 1을 출력)하느냐를 조절하는 매개변수이다. 예를 들면 b가 -0.1이면 각 입력 신호에 가중치를 곱한 값들의 합이 0.1을 초과할 때만 뉴런이 활성되고, b가 -20.0이면 가중치를 곱한 값들의 합이 20.0을 초과할 때 활성화 된다.

 

퍼셉트론의 한계

XOR 게이트

XOR 게이트는 배타적 논리합이라는 논리 회로이다. x1과 x2중 한쪽이 1일 때만 1을 출력한다는 의미이다.('배타적'이라는 의미는 자기 외에는 거부한다는 의미이다.) XOR게이트는 지금까지 본 퍼센트론으로는 구현할 수 없다. 그 이유는 아래에서 설명하고자 한다.

좌 - OR 게이트, 우 - XOR 게이트

지금까지 본 게이트는 왼쪽 그림과 같이 직선 하나로 구분을 지을 수 있는데, XOR 게이트는 오른쪽 그림과 같이 직선 하나로 O와 △를 구분하지 못하기 때문이다.

 

선형과 비선형

 

하지만 직선이라는 제약을 없앤다면 위와 같이 XOR게이트도 퍼셉트론으로 표현할 수 있지만, 그림과 같은 곡선은 표현할 수 없다. 곡선을 바로 비선형이라고 부르고, 직선을 선형이라고 부른다. 선형과 비선형은 기계학습 분야에서 자주 쓰이는 용어로 꼭 기억해둬야 한다.


다층 퍼셉트론

퍼셉트론의 한계를 알아봤는데, 이 퍼셉트론을 겹겹이 쌓아 층을 만든다면 어떻게 될까? 이 관점에서 시작한 것이 바로 다층 퍼셉트론(Multi-layer perception)이다.

다층 퍼셉트론을 알아보기 전에 XOR 게이트를 기존의 AND, NAND, OR 게이트로 표현하자면 위 그림과 같다. x1과 x2를 각각 NAND, OR 게이트의 입력으로 받고 AND 게이트를 거친다면 XOR을 표현할 수 있다.

XOR의 진리표는 다음과 같고, 퍼셉트론으로 구조화한다면 밑에 그림과 같다.

위 그림은 다층 구조의 네트워크로 0층, 1층, 2층처럼 층이 여러 개인 퍼셉트론을 다층 퍼셉트론이라고 부른다. 즉 0층에서 1층으로 신호가 전달되고, 1층에서 2층으로 신호가 전달되는 것이다. 이렇게 단층 퍼셉트론으로는 표현하지 못한 것들을 층을 늘려 구현할 수 있고, 다층 퍼셉트론이 탄생하게 된 계기다.

 

퍼셉트론을 정리하자면 층을 거듭 쌓으면 비선형적인 표현도 가능하고, 이론상 컴퓨터가 수행하는 처리 모두를 표현할 수 있다. 그리고 이 퍼셉트론이 다음 배울 신경망의 기초가 된다.

728x90
반응형
  • 네이버 블러그 공유하기
  • 네이버 밴드에 공유하기
  • 페이스북 공유하기
  • 라이프코리아트위터 공유하기
  • shared
  • 카카오스토리 공유하기