Home 밑바닥부터 시작하는 딥러닝_CH2 퍼셉트론
Post
Cancel

밑바닥부터 시작하는 딥러닝_CH2 퍼셉트론

퍼셉트론이란?

퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호를 출력한다. 퍼셉트론 신호는 1 or 0 두 가지 값을 가질 수 있다.

위의 그림은 2개의 신호를 받은 퍼셉트론의 예이다. $x_1$과$x_2$는 입력신호, $y$는 출력 신호, $w_1$과 $w_2$는 가중치를 뜻한다. 그림의 원은 뉴런 혹은 노드라고 부른다. 입력 신호가 뉴런에 보내질 때 각각 고유한 가중치가 곱해진다. 뉴런에서 보내온 신호의 총합이 정해진 한계를 넘어설 때만 1을 출력하고, 넘지 않는 경우는 0을 출력한다. 그 한계값을 우리는 임계값이라고 부르고, 기호로는 $\theta$로 나타낸다.

퍼셉트론의 동작을 수식으로 나타내 보면 밑의 식으로 나타낼 수 있다.

\[y = \begin{cases} \ 0 & (w_1x_1 \ + \ w_2x_2 \leq \ \theta) \\ \ 1 & (w_1x_1 \ + \ w_2x_2 \gt \ \theta) \end{cases}\]

퍼셉트론은 복수의 입력 신호에 각각에 고유한 가중치를 부여한다. 가중치는 각 신호가 결과에 주는 영향력을 조절하는 역할을 한다. 즉, 가중치가 클수록 해당 신호가 그만큼 더 중요한다는 것을 의미한다.

용어 정리

  • $x_1, x_2$ : 입력신호
  • $y$ : 출력신호
  • $w_1, w_2$ : 가중치
  • 원 : 뉴런 or 노드

단순한 논리 회로

AND 게이트

입력이 모두 1일 때만 1을 출력하고, 그 외에는 0을 출력한다.

ABA AND B
000
100
010
111

NAND 게이트

NAND는 Not AND를 의미한다. 동작은 AND 게이트의 출력을 뒤집은 것이 된다.

ABA NAND B
001
101
011
110

OR 게이트

입력 신호 중 하나 이상이 1이면 출력이 1이 되는 논리 회로이다.

ABA OR B
000
101
011
111

퍼셉트론의 구조는 AND, NAND, OR 게이트 모두에서 똑같다. 세 가지 게이트에서 다른 것은 매개변수(가중치와 임계값)의 값 뿐이다.

퍼셉트론 구현하기

논리 회로를 파이썬, 넘파이로 구현해보자.

가중치와 편향 도입

$\theta$를 -b로 치환하면 퍼셉트론 동작이 밑의 식처럼 된다. 기호 표기만 바꿨을 뿐, 의미는 같다. 여기에서 b는 편향(bias)이라 한다. 식을 해석해보면, 퍼셉트론은 입력 신호에 가중치를 곱한 값과 편향을 합아여, 그 값이 0을 넘으면 1, 넘지 않으면 0을 출력한다.

\[y = \begin{cases} \ 0 & (\ b\ +\ w_1x_1 \ + \ w_2x_2 \leq \ 0) \\ \ 1 & (\ b\ +\ w_1x_1 \ + \ w_2x_2 \gt \ 0) \end{cases}\]

AND게이트 구현

1
2
3
4
5
6
7
8
9
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
	elif tmp > 0:
		return 1

편향을 더하고 가중치를 곱한 입력의 총합이 임계값을 넘으면 1을 반환하고 그외에는 0을 반환한다.

1
2
3
4
AND(0, 0) # 0을 출력
AND(1, 0) # 0을 출력
AND(0, 1) # 0을 출력
AND(1, 1) # 1을 출력

NAND, OR게이트 구현

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
def NAND(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 OR(x1, x2):
    x = np.array([x1, x2])
    w = np.array([0.5, 0.5])
    b = -0.2
    tmp = np.sum(w*x) + b
    if tmp <= 0:
        return 0
    else:
        return 1

퍼셉트론의 한계

지금까지 AND, NAND, OR 게이트를 살펴봤다. 계속해서 XOR 게이트도 생각해보자.

XOR 게이트

XOR 게이트는 베타적 논리합이라는 논리 회로이다. $x_1$과$x_2$ 중 한쪽이 1일 때만 1을 출력한다.

ABA XOR B
000
101
011
110

지금까지 본 퍼셉트론으로는 이 XOR 게이트를 구현할 수 없다. 그 이유는 시각적으로 확인해보자.

우선 OR 게이트의 동작을 시각적으로 생각해보자. OR 게이트는, 예를 들어 가중치 매개변수가 (b, $w_1, w_2$) = (-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 \gt \ 0) \end{cases}\]

위의 식의 퍼셉트론은 직선으로 나뉜 두 영역을 만든다. 직선으로 나뉜 한쪽 영역은 1을 출력하고 다른 한쪽은 0을 출력한다.

실제로 위의 그림은 직선으로 네 점을 제대로 나누는 것을 확인할 수 있다. 그럼 XOR 게이트의 경우는 어떨까?

위의 그림은 XOR 게이트의 출력을 나타낸다. 네 점을 직선 하나로 나누는 방법은 너무 어렵고, 사실상 불가능하다.

선형과 비선형

직선 하나로는 위의 XOR 게이트의 출력을 제대로 나눌 수 없다. 하지만 ‘직선’이라는 제약을 없앤다면 가능하다.

예를 들어 위의 그림처럼 나눌 수 있다. 퍼셉트론은 직선 하나로 나눈 영역만 표현할 수 있다는 한계가 있다. 위의 그림처럼 곡선은 표현할 수 없다는 것이다. 덧붙여서 위의 그림과 같은 곡선의 영역은 비선형이라고 하고, 직선의 영역은 선형이라고 한다.

다층 퍼셉트론 출현

퍼셉트론으로는 XOR 게이트를 표현할 수 없었다. 하지만, 퍼셉트론의 층을 쌓아 다층 퍼셉트론을 만들 수 있는데, 이를 이용하여 XOR을 표현할 수 있게 되었다.

기존 게이트 조합하기

XOR 게이트를 만드는 방법은 다양하다. 그중 하나는 앞서 만든 AND, NAND, OR 게이트를 조합하는 방법이다.

위의 그림처럼 AND, NAND, OR 게이트를 조합해서 XOR 게이트를 만들어 보았다.

ABA XOR B
000
101
011
110

XOR 게이트 구현

1
2
3
4
5
def XOR(x1, x2):
    s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y

위의 그림은 XOR의 퍼셉트론이다. XOR는 다층 구조의 네트워크이다. 왼쪽부터 차례로 0층, 1층, 2층이라고 부른다. 지금까지 본 AND, OR 퍼셉트론과는 형태가 다르다. 실제로 AND, OR은 단층 퍼셉트론이지만, XOR은 2층 퍼셉트론이다. 이처럼 층이 여러 개인 퍼셉트론을 다층 퍼셉트론이라 한다.

동작을 서술해보면

  1. 0층의 두 뉴런이 입력 신호를 받아 1층의 뉴런으로 신호를 보낸다.
  2. 1층의 뉴런이 2층의 뉴런으로 신호를 보내고, 2층의 뉴런은 y를 출력한다.

이상으로 2층 구조를 사용해 XOR 게이트를 구현할 수 있게 되었다. 다시 말해 단층 퍼셉트론으로는 표현하지 못한 것을 층을 하나 늘려 구현할 수 있었다. 이처럼 퍼셉트론은 층을 쌓아 더 다양한 것을 표현할 수 있다.

정리

  • 퍼셉트론은 입출력을 갖춘 알고리즘이다. 입력을 주면 정해진 규칙에 따른 값을 출력한다.
  • 퍼셉트론에서는 ‘가중치’와 ‘편향’을 매개변수로 설정한다.
  • 퍼셉트론으로 AND, OR 게이트 등의 논리 회로를 표현할 수 있다.
  • XOR 게이트는 단층 퍼셉트론으는 표현할 수 없다.
  • 2층 퍼셉트론을 이용하면 XOR 게이트를 표현할 수 있다.
  • 단층 퍼셉트론은 직선형 영역만 표현할 수 있고, 다층 퍼셉트론은 비선형 영역도 표현할 수 있다.
  • 다층 퍼셉트론은 (이론상) 컴퓨터를 표현할 수 있다.

출처 : 밑바닥부터 시작하는 딥러닝(사이토 고키), 한빛미디어

This post is licensed under CC BY 4.0 by the author.