상세 컨텐츠

본문 제목

[파이썬][딥러닝] 퍼셉트론 - 활성화 함수

Python

by 경밤 2020. 3. 28. 22:43

본문

반응형

퍼셉드론에 대해 모르시는 분은 아래 글을 읽으시고 진행하세요

https://manufacture.tistory.com/20

 

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

퍼셉트론에 대해 공부하였으니 글을 쓰도록 하겠습니다. 1. 퍼셉트론이란? 퍼셉트론은 여러개의 입력을 받아 한개의 출력합니다. 예를 들어서, x1과 x2를 입력받았습니다. 퍼셉트론은 이 값들에 대하여 어떠한 연..

manufacture.tistory.com

1. 퍼셉트론 조건분기 동작 분해

퍼셉트론은 입력과 가중치의 곱의 총합과 편향의 합에 대하여 어떠한 조건을 만족시켰을떄 나오는 결과 로 나타내어 질 수 있다는 것을 알고 계시다는 전제하에 설명하겠습니다.

위의 말에서 '어떠한 조건을 만족시켰을때' 부분을 따로 빼, '활성화 함수'로 부를수있습니다.

이렇게 활성화 함수로 따로 떼어네 구현해보겠습니다.

import numpy as np

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

def activate(x):
    if 0 < x:
        return 1
    elif 0 >= x:
        return 0

print(activate(calculate(np.array([1, 0]))))

이렇게 간단하게 조건 분기 동작을 떼어네 '활성화 함수'로 마치 블럭 처럼 조립할 수 있다는 것을 확인했습니다. 위의 activate함수로 보았을때, 활성화 함수는 입력들의 총합에 대해 1 과 0으로 활성화 여부를 정하는 역할을 했습니다. 즉, y를 구하는 단계와 y에 대해 활성화 여부를 결정하는 단계 총 2단계로 처리가 되는 것을 볼 수 있습니다.

조잡하지만 위와 같은 형태가 됩니다. a는 가중치를 곱한 입력값과 편향의 덧셈이 됩니다. 그렇게해서

총합 y가 나오면, 그 y는 활성화 함수 h(a)를 통과해 활성화 여부의 값으로 반환됩니다.

위의 매우 큰 원이 '뉴런'입니다. 방금 뉴런 하나를 만드셨습니다 축하드립니다.

보통 아래와 같이 간단하게 나타냅니다.

2. 다양한 활성화 함수

2-1. 계단 함수

def step(x):
    if x > 0:
        return 1
    elif x <= 0:
        return 0

이름만 activate에서 step으로 바꾼 아까 작성한 활성화 함수입니다.

왜 굳이 '계단' 함수 일까요? 계단 함수는 임계값에 대해 크면 1, 작거나 같으면 0을 반환합니다.

임계치를 1이라 생각하고 0부터 2까지 계단함수에 대입해보세요.

0.1, 0.2, 0.3,.....1 까지 모두 0이 반환됩니다. 그런데 1.1이 되는 순간 그래프는 수직상승해서 y값이 1으로 상승합니다 그 이후로 모두 1인 상황이 발생합니다.

마치 계단 같이 생긴것을 보실 수 있습니다. 그래서 '계단' 함수라는 이름이 붙여졌습니다.

2-2. 시그모이드 함수

시그모이드 함수 h(x) = 1 / 1 + exp(-x) 꼴로 정의 될 수 있습니다.

시그모이드 함수 h(x)에 -10부터 10까지 0.1단위로 그래프를 그려보겠습니다.

최저값에 가까워질수록 0에 수렴하고 최댓값에 가까워 질 수록 1에 수렴하는것을 볼 수 있습니다.

2-3. 렐루 함수

ReLU, 렐루함수는 입력이 0이하 일때 0을 반환하고, 아니면 입력을 그대로 반환합니다.

수식으로는 ReLU 함수를 h(x) = { x(x > 0) 0 (x =< 0 ) 으로 나타 낼 수 있습니다.

최근에는 시그모이드 함수 대신 ReLU함수를 주로 이용합니다.

마찬가지로 0이면 활성화가 되지 않은것이고 그 외의 값들은 활성화과 됨의 의미와 동시에 더욱 상세한 의미를 전달합니다.

0과 x를 비교해서 더 큰값을 반환하도록 작성해서 그래프로 표현하였습니다.

 

3. 마무리

위 3가지의 활성화 함수 모두 비선형 함수입니다 그 말인 즉슨, 직선 한개로 이루어진 활성화 함수가 아니라는 겁니다. 그럼 왜 직선 1개로 이루어진 선형 활성화 함수는 사용하지 않을까요?

존재 할 수 있습니다. 하지만 의미가 없습니다. f(x) = ax + b형태의 일차함수가 선형 활성화 함수의 식입니다. 이 식을 비 선형 함수처럼 중첩사용한다고 의미가 있을까요? f(f(f(f(a))))은 결국 결과 c의 거듭제곱일 뿐입니다. 그렇기에 신경망에서 '층'을 쌓는 행위는 무의미 해 집니다 신경 층을 쌓는 행위에 대한 혜택을 받고싶다면 선형함수는 사용해서는 안됩니다.

 

아래에는 사용한 활성화 함수 3가지의 구현을 작성해놓았습니다.

그리고 계단 함수에 대한 Numpy의 브로드캐스트를 적용하여 입력값이 Numpy 배열이라도 결과가 Numpy 배열로 나타내어 질 수 있겠금 수정 하였습니다.

 

반응형

관련글 더보기