본문 바로가기

딥러닝 & 머신러닝/[2020-2] 머신러닝 수업

머신러닝 과제 (활성화 함수 조사)

ReLU: 입력값 x가 양수면 그대로 x를 출력하고, x가 음수면 그냥 0을 출력하는 활성화 함수다. 기울기가 1이기 때문에 Gradient Vanishing 문제를 해결하였다. 또한 함수가 간단해서 계산속도가 빨라 효율적이다. 그러나 중심값이 0이 아니고, x가 음수면 그 결과로 전부 0을 출력하기 때문에 몇몇 가중치들이 갱신되지 않는, Dying ReLU 문제가 발생한다. 수식은 다음과 같다.

 

ReLU6: 기존 ReLU 함수의 upper bound를 6으로 고정시킨 활성화 함수다. 테스트 시 ReLU보다 성능이 좋았고, 최적화 관점에서도 더 좋다는 것이 밝혀졌다. 수식은 다음과 같다.

 

ELU: ReLU의 특성을 공유하며, Dying ReLU 문제를 해결하였다. 수식은 다음과 같다.

 

SELU: ELU와 마찬가지로 ReLU의 특성을 공유하며, Dying ReLU 문제를 해결하였다. 다른 활성화 함수들보다 더 빠르고 좋은 성능을 보인다.

 

Leaky ReLU: 기존의 ReLU 함수에서 x가 음의 값일때 0이 아닌 0.01 의 기울기를 가지도록 함으로써 Dying ReLU 문제를 어느 정도 해결한 활성화 함수다. 수식은 다음과 같다.

 

PReLU: Parametic ReLU의 약자다. Leaky ReLU에서 한층 더 발전한 것으로, x<0인 상태에서의 함수의 기울기 a를 신경망의 파라미터처럼 학습시키기 위해 만들어진 것이다. 수식은 다음과 같다.

 

Threshold: 계단 함수(Step function)과 같다. 기준치 0을 기준으로 입력값이 0 미만이면 0, 입력값이 0 이상이면 1을 출력하는 활성화 함수다. 미분이 불가능한 함수이기 때문에 이에 따른 gradient도 없어서 gradient를 활용한 학습이 불가능하다. 수식은 다음과 같다.

 

HardTanh: Tanh와 비슷한 모양의 그래프를 갖지만 좀 더 각진 형태의 함수이다. 입력값이 1보다 크면 1을 출력하고, 입력값이 -1보다 작으면 -1을 출력하고, 그 외의 경우엔 입력값을 그대로 출력값으로 내보낸다. 수식은 다음과 같다.

 

Sigmoid: 0~1 사이의 값을 가진다. 입력값 x가 양수면 0.5보다 큰 값, x가 음수면 0.5보다 작은 값을 출력하는 활성화 함수다. 따라서 threshold 0.5를 기준으로 이진 분류 문제에 많이 쓰인다. 그러나 역전파시 각 단계마다 곱해지는 sigmoid의 미분 값들이 0~0.25사이이기 때문에 Gradient Vanishing 문제가 발생한다. 수식은 다음과 같다.

 

Tanh: sigmoid 함수를 재활용하기 위한 함수다. sigmoid 함수의 중간값이 0.5라서 생기는 단점을 극복하기 위해 함숫값 범위를 0~1이 아니라 -1~1로 잡았다. 그러나 여전히 그래프의 모양이 sigmoid 함수와 같다. 즉, sigmoid 함수와 마찬가지로 tanh 함수도 Gradient Vanishing 문제를 갖고 있다. 수식은 다음과 같다.