안녕하세요, 이번 포스팅에서는 활성화 함수에 대해서 배워보도록 하겠습니다.
역전파 알고리즘에서 배웠듯이 Weight에 의해서 이전 레이어 있던 값들이 가중합이 활성화 함수에 들어가게 됩니다. 아래의 그림을 보시죠.
저희는 역전파 알고리즘에서 활성화 함수로 Sigmoid Function을 사용했었습니다. 하지만 실제로 활성화 함수는 Sigmoid Function말고 다양한 종류가 있습니다.
우선 시그모이드 함수부터 살펴보도록 합시다.
① 시그모이드 함수
시그모이드 함수는 보시다시피 0~1사이의 값을 가지며, 0을 기준으로 양수를 가지면, 0.5보다 커지고 음수를 가지면 0.5보다 작아집니다.
이러한 특성 때문에 threshold 0.5를 기준으로 binary classifier 함수로 자주 쓰입니다.
하지만 시그모이드함수를 신경망의 활성화 함수로 사용할 때는 큰 문제점이 하나 있습니다. 저번 포스팅에서 배운 아래의 식을 보시면
Input 쪽으로 weight를 업데이트 해나갈 때, 활성화 함수희 미분값이 계속해서 곱해지게된다. 하지만 시그모이드 함수의 미분값은 최대값이 0.25 그리고 x 값이 0에서 멀어질수록 0에 매우 근접한다. 따라서 이 값을 계속 곱해줄수록 Weight의 변화량은 매우 작아지는 현상이 발생하기 때문에, Input 으로 가까워질수록 Weight들이 잘 업데이트 되지 않는다. 우리는 이러한 현상을 'Gradient Vanishing'이라고 말한다.
두번째로, 함수값의 중간이 0이 아니기 때문에, 학습이 느리다는 단점이 있습니다. 이러한 문제들 때문에 딥러닝은 오랜 기간동안 빛을 보지 못했었습니다. 하지만 다다음에 나올 ReLU의 발견으로 딥러닝의 전성기가 오게 됩니다.
② tanh 함수
탄젠트 하이퍼볼릭 함수는 시그모이드 함수의 함수값의 중간이 0이 아니라서 학습이 느리다는 단점을 극복한 함수입니다. 하지만 여전히 Gradient Vanishing 문제를 가지고 있는것으로 볼 수 있습니다.
③ ReLU 함수
ReLU함수의 특징을 보시면, x가 음의 값을 가지면 0을 출력하고, 양의 값을 가지면 x를 그대로 출력합니다.
우선 함수 형태도 max(0,x)로 매우 계산이 간단하기 때문에, 학습의 속도가 매우 빠릅니다.
또한, 기울기가 1로 gradient vanishing 문제가 해결되는 것을 확인할 수 있습니다.
보기에는 평범한 함수이지만, 이 함수의 발견이 딥러닝의 역사를 시작하게 한 함수입니다. (신기하죠?)
하지만 ReLU함수에도 단점이 한가지 있는데, 바로 음의 값을 가지면 전부 그냥 0을 출력하기 때문에, 몇몇 Weight들이 업데이트 되지 않는 문제가 발생하게 됩니다. (Dying ReLU 현상)
④ Leaky ReLU, Parametric ReLU 함수
이 두 함수는 기존의 ReLU 함수에서 음수 값을 가질 때 0이 아닌 0.01이나 a의 기울기를 가지도록 하는 함수입니다.
따라서 Dying ReLU 현상을 어느정도 막을 수 있습니다.
⑤ Exponential Linear Unit (ELU)
ReLU의 음의 값에 대하여 exponential 값이 추가된 함수로 Dying ReLU 현상 해결한 방법입니다.
⑥ Maxout 함수
마지막으로 maxout 함수입니다. ReLU의 장점을 전부 가지고 있으면서, Dying ReLU 현상을 완전히 회복한 함수입니다.
실제로 maxout 함수가 성능이 제일 좋다고 합니다.
하지만 보시다시피 계산량이 복잡한 단점이 있는것을 알 수 있습니다.
'데이터 다루기 > 신경망' 카테고리의 다른 글
[신경망] 8. 오토인코더 (AutoEncoder) (2) (1) | 2019.06.03 |
---|---|
[신경망] 7. 오토인코더 (AutoEncoder) (1) (0) | 2019.06.03 |
[신경망] 5. 역전파 알고리즘 (Backpropogation) (0) | 2019.06.01 |
[신경망] 4. 경사하강법 (Gradient Descent) (3) Momentum (0) | 2019.06.01 |
[신경망] 3. 경사하강법 (Gradient Descent) (2) BGD, SGD (0) | 2019.06.01 |