새소식

컴퓨터공학 💻/딥러닝

[딥러닝] Activation Function과 Vanishing Gradient Problem

  • -
Activation Function과 Vanishing Gradient Problem

Activation Function은 간단하게 어떤 Input 데이터가 들어왔을 때 값을 normalize하여 active할지 inactive할지를 결정하는 함수입니다. 이러한 Activation Function에는 여러가지 함수가 존재하며 2가지 범주로 Output Layer에서 사용하는 함수와 Hidden Layer에서 사용하는 함수가 있습니다. 

 

Linear

https://www.researchgate.net/

들어온 Input 데이터에 대해서 선형 연산된 값을 그대로 출력하는 함수입니다.

 

Sigmoid

https://www.researchgate.net/

질문에 대한 답이 Yes일 확률을 계산하는 확률 분포함수이며 0~1 사이의 값을 출력합니다. 일반적으로 2개의 카테고리를 예측할 때 Output layer에서 사용하되 중간의 Hidden Layer에서도 사용합니다. 

 

Hidden Layer로 기능하려면 normalize, 즉 값의 분포를 줄이는 역할을 하는 지, non-linear 한 지 여부를 고려해야 하는데 사용하는 목적은 모든 Activation Function이 non-linear한 특징을 가지기 때문에 값의 분포도를 줄이고 MLP들이 다양한 추론을 할 수 있도록 서브 역할을 같이 수행하는 것입니다.

 

Softmax

n개의 다중 카테고리일 때 Output Layer에서 사용합니다. n개의 요소를 갖는 확률 벡터이며 각 요소의 값이 0~1 사이이고 전체이 합이 1입니다.

 

만약 카테고리가 2개라면, 예를 들어 어떤 사진이 Dog일 확률이 0.7이라면 Cat일 확률은 자동으로 0.3입니다. 그런데 여기에 Human 카테고리를 추가하게 되면 Cat일 확률을 0.3이라고 할 때 Human과 Dog일 확률을 계산할 수 없게됩니다. 그래서 각 다중 카테고리의 확률 값을 모두 계산해야 하는 상황에서는 Softmax 함수를 사용합니다.

 

tanh

https://codetorial.net/numpy/functions/numpy_tanh.html

feature 값의 범위를 줄여주는 역할을 하며 주로 Hidden layer에서만 사용하고 -1~1사이의 값을 출력합니다. 반드시 -1~1사이 혹은 -1과 1의 값으로만 출력해야하는 데이터(의료, 금융 관련 데이터, 이미지 생성)에서 사용합니다. 

 

Relu

https://www.researchgate.net/

Layer가 매우 많은, 다중 카테고리일 때 사용합니다. 입력 값이 < 0 이면 0, 입력 값이 > 0 이면 Linear로 동작합니다.
sigmoid, tanh 보다 학습속도가 빠르다는 장점이 있습니다. 또한 다중 레이어에서 발생할 수 있는 Vanishing Gradient Problem을 해결하는데 큰 도움이 됩니다. 

 

 

Vanishing Gradient Problem이 문제가 되는 이유

레이어가 엄청나게 많을 때 발생하는 문제입니다. Output Layer에서 출력된 예측값과 정답값을 비교해서 계산된 Loss를 토대로 optimizer는 weight값을 조정하려 할 때 어떤 weight가 문제였는지 추적이 힘들어집니다.

https://codetorial.net/numpy/functions/numpy_tanh.html

대표적으로 문제가 발생하는 tanh 그래프를 보시면 Input이 -1일 때와 1일 때의 값의 차이는 매우 큽니다. 하지만 2와 4의 차이는 거의 미미하죠. 분명 Input 값의 차이는 절댓값 2만큼으로 동일하나 결괏값의 차이가 다릅니다. 조금 더 극단적으로, input이 5일 때와 5,000,000 일 때의 결괏값의 차이는 0이라고 봐도 무방합니다. 그래서 레이어가 많아질수록 문제가 되는 weight값을 찾기가 힘든 것입니다. 

 

이러한 면에서 non-linear한 특징과 linear한 특징을 동시에 가지고 있는 relu function의 사용이 필수적입니다.

 

 

Contents

포스팅 주소를 복사했습니다

이 글이 도움이 되었다면 공감 부탁드립니다.