상세 컨텐츠

본문 제목

[파이썬][딥러닝] Perceptron 퍼셉트론

Python

by 경밤 2020. 3. 28. 17:45

본문

반응형

퍼셉트론에 대해 공부하였으니 글을 쓰도록 하겠습니다.

1. 퍼셉트론이란?

퍼셉트론은 여러개의 입력을 받아 한개의 출력합니다.

예를 들어서, x1과 x2를 입력받았습니다. 퍼셉트론은 이 값들에 대하여 어떠한 연산을 한 후 

활성화 함수 라는것을 거쳐서 그 반환값을 반환합니다.

퍼셉트론에 대한 식은 간단히 설명하자면, 입력값들에 각각 가중치를 곱한 후의 수가 임계값에 대해 어떤 조건을 충족했을때 이러한 동작을 합니다.

여기서 보면 가중치가 y에 대해 중요한 역할을 합니다.(따로 생각하면 가중치가 클수록 해당 입력이 중요하다는 말이겠죠?) 가중치는 수동으로 작성해야하지만, 딥러닝에서는 이 값을 맞춰가는 작업을 자동으로 하게 합니다.

 

2. 간단한 퍼셉트론 구현

간단하게 논리회로 OR을 구현해보도록 하겠습니다.

import numpy as np

def OR(x):
    w = np.array([0.5, 0.5])
    theta = 0.4
    tmp = np.sum(x * w)
    
    if theta < tmp:
        return 1
    elif theta >= tmp:
        return 0

print(OR(np.array([1, 0])))

위와 같이 간단히 OR게이트를 구현했습니다. 조금더 친해질 수 있었습니다.

3. 편향의 도입

여기서부턴 임계값을 -편향(b)로 치환하겠습니다. 이를 통해 식을

0보다 크냐 작냐로 구분할 수 있게됩니다.

def OR(x):
    w = np.array([0.5, 0.5])
    b = -0.4
    tmp = np.sum(x * w) + b

    if 0 < tmp:
        return 1
    elif 0 >= tmp:
        return 0

그래프로 쉽게 표현해보겠습니다.

첫번째 그래프는 입력값 연산 결과가 임계치 보다 작은 모습입니다. 이 그래프에 편향 개념을 더하고 구현한 모습을 수정해보겠습니다.

첫번째 그래프에서 임계치를 y절편으로써 빼주었습니다.  그랬더니 0이 임계치로써 역할을 하고, b를 그래프의 y절편 처럼 전체적인 평행이동을 할 수 있게 되었습니다.

즉, 편향 개념을 도입함으로써 '임계치를 얼마나 내릴까?' 에서 '얼마나 쉽게 통과시킬까?' 로써 조금 더 친화 되었다고 볼 수도 있습니다.

4. 단층 퍼셉트론의 한계

네 이때까지 살펴본것은 단층 퍼셉트론이였습니다. 단층 퍼셉트론에서는 Or, Nand, And 만 구현이 가능합니다.

Xor은 구현을 할 수 없습니다. 왜냐면 단층 퍼셉트론은 선형으로 나눌수밖에없기 때문입니다.

하지만 2층 퍼셉트론을 사용하면 가능합니다 Nand와 Or, And를 조합해 Xor를 구현할 수 있습니다.

 

5. 마무리

단층 퍼셉트론으로 Or 게이트를 구현해보았습니다. 여기서 중요한점은 다른 And와 Nand 게이트를 만들어볼때

변하는 점은 단순히 편향(다른 방식으로는 임계치가 있습니다)을 잘 조정해서 선형 그래프를 움직여서

논리 게이트를 작성한다는 것 뿐입니다. 단순히 And 게이트를 구현한다 하면, b의 값은 -0.6정도가 있겠습니다.

왜냐면 And는 입력이 1, 1 일때만 1을 반환하는데, 여기서는 가중치가 0.5, 0.5 임으로 서로 반반입니다.

여기서 둘 모두 합했을때는 1이 나옵니다. 여기서 편향을 빼줘야 하고, 이 뺄셈한 값이 0보다 크고, 0.5보다 작거나 같은 값이 나오는 편향을 빼야합니다. 왜냐면 편향을 빼 주었는데도 0.5보다 큰 값이 나오면 입력값 중에 0이 있어도 남은 한개가 1이면 0.5 - (0.5보다 작은값) 은 0보다 크기 때문입니다.

 

이상 오늘 한 것에 대한 정리였습니다.

감사합니다~

반응형

관련글 더보기