[밑바닥부터 시작하는 딥러닝 정리] CHAPTER 2. 퍼셉트론

shoulmon·2021년 1월 24일
2

CHAPTER 1은 python 문법과 numpy, matplotlib 등의 패키지 관련 내용이어서 생략한다.
책이 내용을 전개하는 방식이, 질문을 던지고 답을 제시하는 방식이기 때문에 답을 읽기 전에 질문에 스스로 고민하는 시간을 갖는 것이 도움이 될 것 같다.


퍼셉트론(Perceptron)은 딥러닝의 기원이 되는 알고리즘이다.

퍼셉트론이란? (단층 퍼셉트론)

퍼셉트론은 여러 신호를 입력받아 하나의 신호를 출력하는 알고리즘이다

그림 속의 각각의 원을 뉴런 혹은 노드라고 한다.

x1, x2 : 입력 신호
w1, w2 : 가중치
y : 출력 신호

가중치 w1, w2는 x1과 x2가 각각 출력 신호 y에 대해 영향을 끼치는 정도를 정한다.

이 때, w1x1 + w2x2의 값이 특정 값(이하 θ)을 넘을 때만 1을 반환하고, 그렇지 않으면 0을 반환하는데, 이런 알고리즘을 퍼셉트론이라고 한다.

이를 수식으로 나타내면 다음과 같다.

단순한 논리회로

AND 게이트

AND 게이트를 퍼셉트론으로 표현해보자.

입력 값 (x1, x2)는 (0, 0), (0, 1), (1, 0), (1, 0)이며, 우리가 해야할 것은 매개변수인 가중치와 θ 값을 찾는 것이다.

(w1, w2, θ) = (1, 1, 1)을 포함해 여러 조합이 가능하다.

NAND 게이트와 OR 게이트

NAND는 Not AND를 의미한다.

NAND 게이트와 OR 게이트를 퍼셉트론으로 표현하기 위한 매개변수는 각각 (w1, w2, θ) = (-0.5, -0.5, -0.7)(w1, w2, θ) = (0.5, 0.5, 0.3)을 포함해 여러 조합이 가능하다.

퍼셉트론은 매개변수 값만 적절히 조정하면, AND, NAND, OR을 모두 표현할 수 있다!

머신러닝에서의 학습이란 위와 컴퓨터가 표현하고자 하는 대상에 적절한 매개변수 값을 찾는 과정이다.

퍼셉트론 구현하기

간단한 구현부터

# AND
def AND(x1, x2):
	w1, w2, theta = 1, 1, 1
	if x1 * w1 + x2 * w2 > theta:
		return 1
	else:
		return 0

이 때, theta를 좌변으로 넘겨 0보다 큰지 아닌지를 가지고 출력 신호를 판단해보자.

가중치와 편향 도입

기존의 식에서 theta 대신 편향(bias)을 의미하는 b를 좌변에 포함시키면 아래와 같은 식이 나온다.

편향은 뉴런이 얼마나 쉽게 활성화되는지를 정한다. (1을 출력하는 것을 뉴런이 활성화 되었다고 한다.)

편향을 이용해 위에 구현한 AND 게이트를 다시 표현하면 아래와 같다.(numpy 사용)

import numpy as np

def AND(x1, x2):
	x = np.array([x1, x2])
	w = np.array([1, 1])
	b = -1
	if sum(x * w) + b > 0:
		return 1
	else:
		return 0

뉴런이 얼마나 쉽게 활성화되는지를 편향이 결정한다는 말을 위 코드를 보면서 생각해보자.

편향이 -0.1이라면, 신호에 가중치를 곱한 값들의 합이 0.1만 넘으면 뉴런은 활성화된다.

하지만 편향이 -100이라면, 신호에 가중치를 곱한 값들이 100을 넘어야만 뉴련이 활성화된다.

따라서 편향은 뉴런이 얼마나 쉽게 활성화되는지를 정하는 요소다.

NAND와 OR도 코드로 구현해보자.

import numpy as np

def NAND(x1, x2):
	x = np.array([x1, x2])
	w = np.array([-0.5, -0.5])
	b = 0.6
	if sum(x * w) + b > 0:
		return 1
	else:
		return 0

def OR(x1, x2):
	x = np.array([x1, x2])
	w = np.array([0.5, 0.5])
	b = -0.2
	if sum(x * w) + b > 0:
		return 1
	else:
		return 0

퍼셉트론의 한계

도전! XOR 게이트

위의 단층 퍼셉트론으로는 XOR 게이트를 표현할 수 없다.

선형과 비선형

단층 퍼셉트론은 직선 하나로 나눠진 영역만 표현할 수 있다.

하지만, XOR 게이트는 직선 하나로 영역을 적절하게 나눌 수 없다.

다음 그림(OR 게이트를 입력 신호에 따라 표현)에 표시된 영역을 선형 영역이라 하고,


아래와 같은 영역을 비선형 영역이라 한다.

다층 퍼셉트론이 출동한다면

비선형 방식으로만 구현이 가능한 XOR 게이트 문제를 퍼셉트론을 이용해 구현할 수 있는 방식이 있다.

바로 단층 퍼셉트론을 여러 개 활용해 만든 다층 퍼셉트론이다.

기존 게이트 조합하기

XOR 게이트는 다음과 같은 방식으로 OR, NAND, AND 게이트를 조합해 만든 다층 퍼셉트론으로 구현할 수 있다.

각 그림의 의미는 다음과 같다.

XOR 게이트 구현하기

다층 퍼셉트론을 활용하면, 단층 퍼셉트론으로는 표현하지 못한 것을 표현할 수 있다.

def XOR(x1, x2):
	s1 = OR(x1, x2)
	s2 = NAND(x1, x2)
	y = AND(s1, s2)
	if y > 0:
		return 1
	else:
		return 0

이를 퍼셉트론의 뉴런으로 표현하면 다음과 같다.

그림을 보면 3개의 층으로 구성되었으므로 3층 퍼셉트론이라고 부르는 사람도 있지만, 가중치를 갖는 층은 0층과 1층, 2개의 층 뿐이므로 2층 퍼셉트론이라고 부르는 사람도 있다.

NAND부터 컴퓨터까지

이론상 다층 퍼셉트론(2층 퍼셉트론)을 이용해 컴퓨터를 구현할 수도 있다고 한다.

The Elements of Computing System: Building a Modern Computer from First Principle(the MIT Press, 2005)를 읽어보자.

profile
공부하고 정리하는 블로그입니다.

0개의 댓글