[DataCamp] 3. Activation function

이번 장에서는 앞서 1. Basic of deep learning and neural networks 와 2. Optimizing a neural network with backward propagation을 알아보았다면 핵심 개념 중 마지막인 Activation function(활성화 함수)를 알아보고자 한다.


인공신경망(Aritificial neural network)은 사람의 신경구조를 모방하였기 때문에

뉴런을 기반으로한 신호 전달 과정과 매우 유사하다.

 

The computational process of artificial neural networks that resembles the neural transmission flowchart of neurons

뉴런은

여러 경로를 통해 들어온 전기신호의 합이 일정치 이상이 되어버리게 되면 다음 뉴런으로 신호를 전달한다.

 

여기서 여러 경로를 통해 들어온 전기신호의 합은 인공신경망에서 input과 weight, bias의 선형곱으로

더해진 값을 의미하며 일정치 이상이 되었을 경우 다음 뉴런으로 신호를 전달하는 역할을 하는 것이

오늘 알아볼 activation function(활성화 함수)이다.

 

Input과 weight, bias의 선형곱으로 더해진 값을 그냥 무지성 전달하지 않고

굳이 activation function을 통해 다음 뉴런으로 왜 전달을 해야하는지를 먼저 알아보기로 한다.


Activation function의 등장하게된 배경으로는 바로 XOR 문제였다.

XOR problem

단순히 f(x) = wx + b 즉, 선형 분류기에 의해서는 AND와 OR의 문제는 해결할 수 있었지만

비선형 문제는 해결할 수 없었으며 아무리 hidden layer를 깊게 쌓는다 하더라도

f(wx + b) = w´x + b´ 로 여전히 linear하게 나오게 된다.

 

그래서 데이터의 분포가 XOR 문제처럼 non-linear한 경우 모델이

비선형적으로 분류를 하기위해 activation function이 등장하게 되었으며 

현실에서는 non-linear한 데이터들이 너무나도 많으므로

모델의 표현성과 성능을 높이기 위해 비선형 활성화 함수(non-linear activation function)는

이제 없어서는 안될 필수적인 구성요소가 되었다.


그렇다면 인공신경망에서 사용되는 비선형 활성화 함수에는 어떤 종류가 있는지

등장한 순서에 따라 한번 알아보고자 한다.


1. Sigmoid function

 

Sigmoid function

Sigmoid function은 대표적인 활성화 함수의 예로 logistic regression에서 사용되는 함수이다.

Sigmoid function은 출력값이 [0, 1] 사이의 값으로 값이 작든 크든 무조건적으로

0에서 1 사이의 값을 갖도록 출력되는 함수이기에 binary classification에서 사용된다.

 

하지만, Sigmoid function의 대표적인 단점인 vanishing gradient 문제가 존재한다.


Vanishing gradient

Derivative of Sigmoid function

인공신경망에서 backpropagation을 할 때 출력층에서 멀어질수록 gradient 값이 매우 작아지는 문제.

Gradient 값이 매우 작아져 0에 수렴하게 되면 gradient descent 하는 과정에서 update 하는

gradient가 매우 작아져 학습 과정이 매우 느려지게 되는 문제점이다.

 


Sigmoid function을 미분하면 최댓값은 0일 때 0.25로 학습이 계속 진행되면 점점 0으로 수렴하는

vanishing gradient 문제가 발생하기에 학습이 매우 느려지고 local optima에 이를 수밖에 없어진다.

 

그래서, Sigmoid function은 binary classification 문제에서 최종 예측한 확률 값을 반환하는 형태로

사용되고 multi classification이나 hidden layer 사이에서는 활용되지 못한다. 


2. Tanh function (Hyperbolic Tangent function)

 

Hyperbolic tangent function

Tanh function은 다른 말로 Hyperbolic Tangent function으로 Sigmoid function의 연장선이다.

 

Sigmoid function and Tanh function

Sigmoid의 출력값이 [0, 1] 이었다면 Tanh는 [-1, 1]의 범위로 확장한 sigmoid function이며

미분을 할 경우 sigmoid의 최대 미분값이 0.25였다면 tanh function에서는 최대 미분값이

1로 증가하였다.

 

Derivative of Tanh function

하지만, tanh function을 미분하더라도 0일 때를 제외하고 학습이 진행되는 과정에서

결국 0에 가까워지는 vanishing gradient problem을 해결하지 못했다는 한계점을 가진다.

 


3. Softmax function

 

Softmax function

Softmax function은 multi-class classification에서 대표적으로 쓰이는 activation function이며

입력값을 각각 지수함수로 취하고 이를 정규화 즉, 총합을 1로 만드는 activation function이다.

 

정규화로 인해 각 출력값은 0~1 값을 가지며 모든 출력값의 합은 반드시 1이기 때문에

N가지 중 한 가지에 속할 확률을 표현하는 multi-class classification에 주로 활용된다.

 

Sigmoid function은 2개의 class를 가지는 classification 문제 즉, binary classification에서

사용되기 때문에 2-Class Softmax와 동일하기에 정리해보면

 

Sigmoid function: Binary classification

Softmax function: Multi-class classification

 

에 사용되는 activation function으로 정리해볼 수 있다.

 


4. ReLU function (Rectified Linear Unit function)

 

ReLU function

ReLU는 Rectified Linear Unit의 약자로 현재까지 딥러닝 분야에서 가장 많이 사용되는

활성화 함수이다. ReLU는 ReLU(x) = max(0, x) 로 단순한 함수이며 비교적 단순함과 달리

미분할 경우 기울기가 1로 기울기가 0에 가까워지는 vanishing gradient 문제를 해결하였으며

양수면 자기 자신을 반환하고, 음수면 0을 반환하는 단순한 공식에 의해 gradient descent를 할 경우

다른 activation function에 비해 학습 속도가 매우 빠르다는 장점을 가지고 있다.

 

ReLU는 vanishing gradient 문제를 해결하고자 나온 activation function이기에

hidden layer 사이사이에만 넣는 것으로 현재까지도 많이 사용되고 있으나 한계점 또한 존재한다.

 

ReLU는 음수 값으로 들어오는 입력값의 경우 모두 0으로 반환하다보니 음수인 경우

기울기가 모두 0이 되어버린다. 따라서 weight가 update되지 않아 해당 뉴런은 그 이후로

0만 반환하여 아무것도 변하지 않는 현상이 발생될 수 있다. 이런 현상을 뉴런이 죽어간다고 해서

Dying ReLU 라고 하며 죽은 뉴런을 회생시킬 수 없다는 단점이 존재한다.

 


5. Leaky ReLU function

Leaky ReLU function

ReLU function의 한계점이었던 Dying ReLU 현상을 극복하고자 다양한 ReLU의 변형 함수들이 등장하였다.

대표적으로 Leaky ReLU가 있으며 Leaky ReLU는 입력값이 음수일 때 출력값을 0으로만 반환하던 ReLU에서

출력값을 0이 아닌 아주 작은 값을 출력할 수 있도록 변형되었으며 뉴런을 죽이지 않고 살릴 수 있도록 변형이 되었다.

 

Leaky ReLU 이외에도 ReLU로부터 파생된 다양한 activation function들이 존재한다.

(ex. PReLU, ELU, SELU 등)

다양한 ReLU 기반의 activation function들이 궁금하다면 한번 찾아보길 추천드린다.

 


여기까지 activation function을 사용하는 이유와 다양한 종류들을 알아보았다.

 

끝내는 말로 사실 activation function을 사용하는 이유에 대해 정확하게는 파악하지 못하고

network hidden layer 끝날 때 사이사이마다 relu를 쓰고 multi-class의 경우 마무리로 softmax,

regression의 경우 linear 처럼 정확하게 그 이유를 알지 못하고 써왔는데 직접 정리해보니

확실히 어느 정도 개념을 이해하고 network를 설계하는 것에 대한 중요성을 다시 일깨우게되며

앞으로 더 많이 기본 개념을 정립해야겠다는 다짐을 하며 글을 마친다.

댓글

Designed by JB FACTORY