티스토리 뷰

반응형

1. Activation Function의 사용이유

딥러닝의 신경망을 공부하다 보면, 활성화 함수에 대해 알 수 있다. 활성화 함수란, 출력값을 활성화를 일으키게 할 것인가를 정하고 그 값을 부여하는 함수라고 할 수 있다. 활성화 함수의 사용이유는 Data를 비선형으로 바꾸기 위해서이다. 그런데 왜 비선형으로 바꾸는가? 사실 우리는 딥러닝을 배울 때, 선형시스템에 대해 배운다. 선형은 쉽지만, 망이 깊어지지않는 단점이 있다. 신경망으로 설명해 보면 선형을 이용하여 아무리 복잡하게 만들고 싶어서 hidden layer가 하나 밖에 안나온다. 식으로 보면 상수인 a, b가 있고 변수인 x, y가 있다면, f(ax + by) = af(x) + bf(y)의 성질을 가졌기 때문에 망이 아무리 깊어져도 hidden layer가 하나 밖에 안나오는 것이다.

 

2. hidden layer

 hidden layer가 많다는건 어떤 장점이 있을까?

  • 매개 변수가 많이 필요가 없다. layer가 깊어지면 같은 수준의 정확도의 layer를 구현하더라도 매개변수가 더 적게 필요하다
  • 필요한 연산의 수가 줄어든다. Fiter의 크기를 줄이고, 망을 깊게 만들면 연산 횟수가 줄어들면서 정확도를 유지하는 결과를 낸다.

이렇게 layer가 깊어질수록 효과를 내기 때문에 Deep Learning이라고도 한다. 즉, 선형시스템의 경우에는 망이 깊어지지 않으므로 망이 깊어지는 것에 대한 장점을 활용 할 수 없다. 만약 활성화 함수를 사용하면 입력이 들어갈때, 출력값이 선형으로 나오지 않기 때문에 망을 깊게 만들 수 있다.

3. 활성화 함수의 종류

우리가 알아볼 함수는 Sigmoid Function, Step Function, ReLU Function 순서로 알아볼것이다.

3.1 Sigmoid Function

이 함수는 앞에서도 많이 봤지만, 간단히 설명하면 일단 식은 다음과 같다.

코드로 나타내 보면

import numpy as np
import matplotlib.pyplot as plt

def sigmoid(x):
    return 1/(1+np.exp(-x))

x = np.arange(-5,5,0.1)
y = sigmoid(x)
plt.plot(x,y)
plt.ylim(-0.1,1.0)
plt.show()

코드를 해석해 보자면, Sigmoid 함수 선언 후에 -5부터 5까지의 범위에서 x=0.1 간격으로 출력 값을 확인한 것이다.

xlim 명령과 ylim 명령들은 그림의 범위가 되는 x축, y축의 최소값과 최대값을 지정하는 것이다.

 

 

3.2 Step Function

Step Function은 말 그대로 계단 모양 함수로, 특정값 이하는 0이고 특정값 이상은 1로 출력하도록 만들어진 함수이다. 식으로 나타내면 y = 1 (x >= 0), 0 (x < 0)

import numpy as np
import matplotlib.pyplot as plt

def step_function(x):
    return np.array(x>0.0, dtype = np.int)

x = np.arange(-5, 5, 0.001)
y = step_function(x)
plt.plot(x,y)
plt.show()

위 구현은 -5부터 5 범위에서 0.001 간격으로 값을 출력하고, 0을 기준으로 0과 1의 출력을 구분지어 나오게 하였다.

x>0.0 을 만족하면 True, 불만족하면 False를 반환한다. 그리고 dtype는 데이터 타입에 관한 것인데, np.int라는 것은 true는 1을 반환하고 false이면 0을 반환한다.

 

 

3.3 ReLU function

ReLU 함수는 입력이 특정값을 넘으면 입력이 그대로 출력되고, 그 외는 0을 반환한다.

식은 y = x (when x>=0), 0 (when x<0)

def ReLU(x):
    return np.maximum(0,x)

x = np.arange(-5, 5, 0.1)
y = ReLU(x)

plt.plot(x,ReLU(x))
plt.show()

numpy 객체의 maximum 메소드를 사용하여 구현하였다.

np.maximum(0,x)는 0과 x 두 인자 가운데 큰 것을 반환하는 메소드 함수이다.

 

 

정리하면 핵심 포인트는 활성화 함수는 딥러닝 과정에서 비선형 시스템으로 만들기 위함이라 생각하자.

 

구현 예

Input x와 가중치 W의 내적한 값에 Bias를 더한 값을 A라고 하면 식은 A = XW + B 가 된다.

=> 구한 A를 sigmoid함수의 Input 으로 들어가 output은 Y라고 하면 식은 Y = sigmoid(A)가 된다.

=> 구한 Y는 다음 신경망층의 Input이 되고, 이러한 과정을 반복하면서 학습을 한다.

 

이거 보고 바로 다음 글인 [Deep learning] Activation Function(활성화 함수) 사용빈도 도 바로 읽어보자.

반응형
공지사항
최근에 올라온 글
최근에 달린 댓글
Total
Today
Yesterday
링크
«   2024/05   »
1 2 3 4
5 6 7 8 9 10 11
12 13 14 15 16 17 18
19 20 21 22 23 24 25
26 27 28 29 30 31
글 보관함