AI

[밑.시.딥.1] 퍼셉트론

amy_ 2024. 7. 1. 22:58

1. 퍼셉트론 이란?

퍼셉트론 : 프랑크 로젠블라트가 1957년 고안한 알고리즘으로, 신경망∙딥러닝의 기원이 되는 알고리이다.

** 아래에서 설명할 퍼셉트론은 정확히 '인공 뉴런' 혹은 '단순 퍼셉트론'으로 불리는 것이다.

 

퍼셉트론은 다수의 신호를 입력으로 받아 하나의 신호를 출력한다. 퍼셉트론 신호는 흐른다/안 흐른다(1이나 0)의 두가지 값을 가질 수 있다. 아래는 입력으로 2개의 신호를 받은 퍼셉트론의 예이다.

입력이 2개인 퍼셉트론

 

x1, x2는 입력 신호, y는 출력 신호, w1과 w2는 가중치를 뜻한다. 입력 신호가 뉴런에 보내질 때는 각각 고유한 가중치가 곱해진다. 뉴런에서 보내온 신호의 총합이 정해진 한계를 넘어설 때만 1을 출력한다. 그 한계를 임계값이라고 하며, ⍬ 기호로 나타낸다.

$$y = \left\{\begin{matrix}0\,(w_{1}x_{1}+w_{2}x_{2}\leq \theta ) \\1\,(w_{1}x_{1}+w_{2}x_{2}>  \theta )\end{matrix}\right.$$

 

가중치는 각 신호가 결과에 주는 영향력을 조절하는 요소로 작용한다. 즉, 가중치가 클수록 해당 신호가 더 중요함을 뜻한다.

 

 

2. 가중치와 편향 도입

위의 식에서 ⍬를 -b로 치환하면 아래와 같다.

$$y = \left\{\begin{matrix}0\,(w_{1}x_{1}+w_{2}x_{2}\leq 0) \\1\,(w_{1}x_{1}+w_{2}x_{2}>  \theta )\end{matrix}\right.$$

 

여기에서 b를 편향이라고 한다. 가중치가 각 입력 신호가 결과에 주는 영향력(중요도)을 조절하는 매개변수라면, 편향은 뉴런이 얼마나 쉽게 활성화(결과로 1을 출력(하느냐를 조정하는 매개변수 이다.

** 편향보다 가중치 개념이 훨씬 중요하다.

 

 

3. 단순 논리 회로

1) AND 게이트

AND 게이트는 두 입력이 모두 1일 때만 1을 출력하고, 그 외에는 0을 출력한다. AND 게이트를 퍼셉트론으로 표현하고 싶다면, 아래의 진리표대로 작동하도록 하는 $w_{1},w_{2},\theta$의 값을 정하면 된다.

$x_{1}$ $x_{2}$ y
0 0 0
1 0 0
0 1 0
1 1 1

사실 $\left ( w_{1},w_{2},\theta \right )$을 만족하는 매개변수 조합은 매우 많다. $(0.5, 0.5, 0.7)$, $(1, 1 ,1)$ 모두 AND 게이트의 조건을 만족한다.

 

2) NAND 게이트

NAND는 Not AND를 의미하며, 두 입력이 모두 1일 때만 0을 출력하고, 그 외에는 1을 출력한다.

$x_{1}$ $x_{2}$ y
0 0 1
1 0 1
0 1 1
1 1 0

AND 게이트를 구현하는 매개변수의 부호를 모두 반전하기만 하면 NAND 게이트가 된다. 즉, $\left ( w_{1},w_{2},\theta \right )$ = $(-0.5, 0.5, 0.7)$, $(-1, -1, -1)$ 등이 있다.

 

3) OR 게이트

OR 게이트는 입력 신호 중 하나 이상이 1이면 출력이 1이 된다.

$x_{1}$ $x_{2}$ y
0 0 0
1 0 1
0 1 1
1 1 1

$\left ( w_{1},w_{2},\theta \right )$ = $(-0.5, 1, 1)$

 

4) 논리회로 표현

위의 AND, NAND, OR 게이트에서 매개변수의 값만 달랐지, 퍼셉트론의 구조는 모두 동일하다.

여기서 퍼셉트론의 매개변수 값을 정하는 것은 컴퓨터가 아니라 사람이다. 기계학습 문제는 이 매개변수의 값을 정하는 작업을 컴퓨터가 자동으로 하도록 한다. 학습이란 적절한 매개변수 값을 정하는 작업이다.

 

 

4. 퍼셉트론 구현하기

아래 두 코드는 모두 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
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

 

 

5. 퍼셉트론의 한계

XOR 게이트는 배타적 논리합이라는 논리 회로이다. 두 입력중 한쪽이 1일 때만 1을 출력한다.

지금까지 본 퍼셉트론으로는 이 XOR 게이트를 구현할 수 없다. 아래의 그림을 봐보자. 직선 하나로 나누는 방법은 불가능하다.

하지만 곡선이라면 나눌 수 있다.

 

이처럼 퍼셉트론은 직선 하나로 나눈 영역만 표현할 수 있다는 한계가 있다. 정확히 말하면, 단층 퍼셉트론으로는 비선형 영역을 분리할 수 없다.

 

 

6. 다층 퍼셉트론

방법이 없는 건 아니다. XOR 게이트를 만들기 위해선 AND, NAND, OR 게이트를 조합하면 된다. 

def XOR(x1, x2):
	s1 = NAND(x1, x2)
    s2 = OR(x1, x2)
    y = AND(s1, s2)
    return y

 

이처럼 층이 여러 개인 퍼셉트론다층 퍼셉트론이라고 한다. 이처럼 퍼셉트론은 층을 쌓아 더 다양한 것을 표현할 수 있다.

 

다층 퍼셉트론은 지금까지 보아온 회로보다 복잡한 회로를 만들 수 있다. 컴퓨터 내부에서 이뤄치는 처리가 매우 복잡할 거 같지만, 사실은 NAND 게이트의 조합만으로 컴퓨터가 수행하는 일을 재현할 수 있다. 이처럼 다층 퍼셉트론은 컴퓨터도 만들 정도로 복잡한 표현을 해낸다. 이론상 2층 퍼셉트론이면 컴퓨터를 만들 수 있다.

중요한 건, 퍼셉트론은 층을 거듭 쌓으면 비선형적인 표현도 가능하고, 이론상 컴퓨터가 수행하는 처리도 모두 표현할 수 있다는 것이다!!