Chap.02 퍼셉트론

2022. 1. 5. 12:07

2-1. 퍼셉트론이란? 

💡 퍼셉트론이란?
다수의 신호를 입력으로 받아 하나의 신호를 출력하는 인공 뉴런

단순한 퍼셉트론 이미지

그림의 원은 뉴런 혹은 노드라고 불른다. 

x1,x2는 입력값, w1,w2는 가중치를 나타낸다.

💡 여기서 가중치란? 
각 신호가 결과에 주는 영향력을 조절하는 역할을 하며 전류에서 말하는 저항과 비슷한 역할을 한다.

위에 퍼셉트론 이미지를 수식화 하면 아래와 같다.

단순한 퍼셉트론을 수식화

수식을 보면 각각의 입력값 (x1, x2)는 가중치 (w1, w2)를 곱해 최종적으로 y에 전달된다. 

이후 y에서는 전달받은 값들을 더하고 그 값이 임계값 보다 작으면 0을 출력하고 크면 1을 출력하게 된다.

💡 여기서 임계값이란?
뉴런들로 부터 전달받은 신호의 총합을 비교할 때 쓰는 값

2-2. 단순한 논리 회로 

AND, NAND, OR게이트의 진리표

먼저 AND, NAND, OR게이트의 진리표를 살펴보자

and, nand, or 게이트의 진리표

진리표란 입력 신호와 출력 신호의 대응 표이다.

다음 3개의 진리표를 퍼셉트론으로 구현 하기 위해서는 가중치(w1,w2)와 임계값(theta)값만 정하면 쉽게 구현할 수 있다.


2-3. 퍼셉트론 구현하기

간단한 구현

앞에서 살펴본 진리표를 토대로 퍼셉트론을 구현해보자.

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
'''

위에 코드는 진리표대로 AND게이트를 퍼셉트론으로 구현한 것이다.

입력값(x1,x2)는 가중치(w1,w2)와 각각 곱해져 tmp에 저장되고 이 후 임계값(theta)와 비교하면서 값이 작으면 0 크면 1을 출력한다.

편향 도입

💡 편향이란?
쉽게 생각해 앞에서 말한 임계값의 부호를 반대로 바꿔준 것이다. 역할은 임계값과 같은 역할을 한다. 

편향을 도입한 퍼셉트론의 수식은 아래와 같다.

수식을 보면 전에 수식에서 theta값이 사라지고 편향이 생긴 것을 확인할 수 있다. 

다른점은 전에 수식에서는 입력받은 신호의 총합을 임계값과 비교했다면 이번 수식에서는 전달받은 신호의 총합에 편향값을 더해 0과 비교하게된다. (그 뿐이다!)

 

편향을 도입한 퍼셉트론 구현하기 (numpy 활용)

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

위의 코드는 편향을 도입한 AND게이트의 코드이다. 

하지만 위의 코드는 이전 코드와 달리 numpy의 array를 사용하여 쉽게 구형하였다.

그렇다면 AND게이트와 마찬가지로 NAND, OR게이트를  구현해보자

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

아주 간단하게 입력값과 편향만 바꿔 쉽게 구현할 수 있다!!

그렇다면 XOR게이트의 경우를 살펴보자.


2-4. 퍼셉트론의 한계

AND, NAND, OR게이트는 쉽게 구현하였지만 XOR게이트를 구현할 때 퍼셉트론의 한계를 볼 수 있다.

먼저 XOR게이트의 진리표를 확인해보면 아래와 같다.

다른 논리 게이트의 진리표와 별다를 것없이 보인다. 

하지만 수식을 그래프로 표현하여 보면 어떠할까?

OR게이트 그래프

위의 그래프는 OR게이트를 그래프화 한것이다. 

그림과 같이 OR그래프는 2개의 영역 (출력에서의 0, 1)으로 나누는데 직선 1개로 나뉠 수 있다.

하지만 XOR게이트의 겨우는 출력값을 직선 1개로 나눌 수 없다. 

이러한 영역을 비선형 영역이라고 한다. (AND, NAND, OR과 같은 경우는 선형 영역)

그렇다면 XOR과 같은 비선형 영역은 퍼셉트론으로 구현할 수 없는 것일까?


2-5. 다층 퍼셉트론 

결론부터 말하자면 '그렇지 않다' 이다.

지금까지는 1층의 퍼셉트론을 구현하였다. 

하지만 XOR게이트를 구현 하기 위해서는 다층 퍼셉트론(실제로는 2층)을 구현할 필요가 있다.

AND, NAND, OR게이트를 가지고 만든 XOR게이트

위의 사진과 같이 XOR게이트는 그 자체로는 한 번에 만들수 없지만 여러개의 게이트를 가지고 만들 수 있다.

그럼 XOR게이트를 구현해보자.

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

끝! 다 구현하였다.

생각보다 복잡할줄 알았던 구현이 위에서 만들어 놓은 게이트들을 사용하여 쉽게 구현하였다.

XOR게이트의 퍼셉트론 층

위의 그림은 XOR게이트의 퍼셉트론을 그림으로 표현한 것이다.

앞에서 구현하였던 AND, NAND, OR게이트와는 다르게 2층의 퍼셉트론으로 구현되었다.

 

0층에서 입력값(x1,x2)는 가중치와 곱하고 편향과 더해져 1층(s1, s2)로 전달되고 1층에서도 마찬가지로 2층으로 전달한다.


chapter 2. 정리 

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

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

'Deep Learning > deep learning from scratch' 카테고리의 다른 글

Chap.06 학습 관련 기술들  (0) 2022.01.09
Chap.05 오차역전파법  (0) 2022.01.07
Chap.04 신경망 학습  (0) 2022.01.07
Chap.03 신경망  (0) 2022.01.05
Intro. Deep learning for scratch  (0) 2022.01.05

BELATED ARTICLES

more