AI/밑바닥부터 시작하는 딥러닝

[밑바닥부터 시작하는 딥러닝] 활성화함수란? 활성화 함수의 종류, 역할 및 구현 in python 파이썬 (What is activation function?)

슈퍼짱짱 2019. 9. 15. 08:00
반응형

지난 시간에 신경망이란? 에 대해 알아보았다.


>> 신경망이란? 바로가기


이번에는 신경망의 특징 중 하나인 활성화 함수에 대해 알아보겠다.




활성화함수란? What is activation function?


활성화함수(Activation Function)란? 입력 신호의 총합을 출력 신호로 변환하는 함수로, 입력 받은 신호를 얼마나 출력할지 결정하고 Network에 층을 쌓아 비선형성을 표현 할 수 있도록 해준다.


Activation Function을 자세히 설명하기에 앞서 퍼셉트론에 대해 복습해 보겠다.


>> 퍼셉트론이란? 바로가기

>> 퍼셉트론으로 논리회로 구현하기 바로가기

>> XOR 게이트로 알아보는 퍼셉트론의 한계 바로가기

>> 퍼셉트론으로 XOR 게이트 구현하기 바로가기


x1과 x2라는 두 신호를 입력받아 y를 출력하는 것이 퍼셉트론이다. 이를 수식으로 나타내면 다음과 같다.


이를 그림으로 표현하면 다음과 같다.



여기에 활성화 함수 h(x) 는 다음과 같이 나타낼 수 있다.


즉, 퍼셉트론에서 사용된 활성화 함수는 "계단 함수(step function)" 이다.




활성화 함수의 종류 및 파이썬으로 활성함수 구현하기


1. 계단 함수 (step function)


퍼셉트론에서 사용된 활성화 함수는 "계단 함수" 이다.

식은 다음과 같다.


계단 함수를 파이썬에서 구현하면 다음과 같다.


1
2
3
4
import numpy as np
def step_function(x):
    y = x>0
    return y.astype(np.int)
cs


계단 함수의 그래프는 다음과 같다.


1
2
3
4
5
6
import matplotlib.pyplot as plt
= np.arange(-5,5,0.1)
= step_function(x)
plt.plot(x,y)
plt.ylim(-0.1,1.1)
plt.show()
cs



2. 시그모이드 함수 (sigmoid function)


sigmoid activation function은 신경망 초기 모델에 많이 사용하던 활성화 함수이다.

식은 다음과 같다.


시그모이드 함수를 파이썬에서 구현하면 다음과 같다.


1
2
3
4
5
6
7
8
def sigmoid(x):
    return 1/(1+np.exp(-x))
 
= np.arange(-5,5,0.1)
= sigmoid(x)
plt.plot(x,y)
plt.ylim(-0.1,1.1)
plt.show()
cs



3. ReLU 함수


최근 신경망 모델들은 대부분 activation function으로 ReLU를 사용한다. 그 이유는 vanishing gradient 현상을 해결하기 때문인데 이는 다음에 더 자세히 다루도록 하겠다.


ReLU function의 식은 다음과 같다.

ReLU 함수를 파이썬에서 구현하면 다음과 같다.


1
2
3
4
5
6
7
def ReLU(x):
    return np.maximum(0,x)
 
= np.arange(-5,5,0.1)
= ReLU(x)
plt.plot(x,y)
plt.show()
cs





활성화 함수의 역할


Step function과 Sigmoid function의 공통점과 차이점으로 activation function의 역할을 알아보겠다.


1. 차이점


계단 함수와 시그모이드 함수를 비교해보면 다음과 같다.


시그모이드 함수가 계단 함수에 비해 부드럽다.

즉, step function을 사용하는 perceptron은 0과 1만 출력했다면, sigmoid를 사용하는 신경망 모델은 역속적인 값을 전달한다. 시그모이드 함수가 계단 함수에 비해 더 많은 정보를 전달 할 수 있다.


2. 공통점


두 함수의 공통점은 모두 비선형 함수 라는 것이다.

활성화함수는 꼭 비선형 함수이어야 한다. 선형 함수를 사용하면 신경망의 층을 깊게 쌓는 것에 의미가 없어지기 때문이다. 

그 이유는 예를 들어, 활성화 함수를 h(x) = cx 라는 선형함수라 해보자. 

3층으로 구성된 네트워크라 할 때, y(x) = h(h((x))) = c*c*c*x = c^3*x이다. 이는 곧 y = ax에서 a=c^3과 같다. 

즉, 기껏 3층이나 쌓았지만 1층만 쌓은 네트워크와 같아진다. 이것이 바로 활성함수의 역할이다. 

반응형