본문 바로가기

머신러닝

[머신러닝] Sigmoid를 넘어 ReLU 로


1. Sigmoid와 신경망

sigmoid 함수를 활성화 함수로 사용한 심층신경망을 사용하다보면 이상하게 학습이 잘 되지 않는 문제가 발생한다. 왜일까? 우리는 신경망의 파라미터를 조정할 때 backpropagation(오류역전파)을 사용한다. 여기서 문제가 발생하는 것인데 왜 sigmoid가 오류역전파에 문제를 만들어 내는 것일까? sigmoid는 많은 장점을 가지고 있는데 말이다.


2. Vanishing Gradient

sigmoid는 일단 지수함수를 계산해야 하기 때문에 계산이 느리고, 결정적으로 Vanishing Gradient 라고 하는 근본적인 문제를 시그모이드 함수가 가지고 있었다. 
Vanishing Gradient 라는 문제는 미분값이 작기 때문에 (0~1) 0.xxx 를 계속 곱하다 보면 0에 수렴하게 된다는 것인데 오류역전파를 사용할 수록 앞 레이어의 가중치들이 급격하게  무의미하게 변해버려(사라져서) 출력에 미치는 영향이 감소한다는 것이다.  이것은 1986년부터 2006년까지의 2차 신경망 빙하기의 원인이였다고 한다.

이 문제도 여러가지 문제와 마찬가지로 킹갓 제프리 힌튼 교수께서 이것은 wrong type of non-linearty를 쓰고 있었다고 하시며 해결책을 찾아내셨다...


98년도에 르쿤 선생님의 ‘Efficient Backprop’에서 나온 일반적인 Sigmoid보다 평균이 0에 가깝고 원점에 대해 대칭 (symmetric)하기 때문에 normalized된 output을 낼 수 있는 tanh를 사용해서 개선을 해도 이 현상은 해결되지 않았고, 이 문제의 해결책은 시그모이드가 값을 변형하는것을 값을 변형하지 않는 새로운 함수를 만들어 내는 것이었고 그 함수가 바로 ReLU 였다.



3. ReLU, 그리고 그 너머

ReLU와 Sigmoid를 비교해 보자


(김성훈 교수님 lec 10-1)


sigmoid는 값을 변화시키지만 ReLU 함수는 임계값을 넘는 순간 입력을 그대로 넘겨준다.

이것으로 Vanishing Gradient가 해결되는데 0 아니면 양수가 출력됨으로써 기울기가 사라지지 않게 되는 것이다.

참고하자면 ReLU의 뜻은 Rectified Linear Unit 의 약자이다.


이것을 직접 체감해 보기 위해서는 텐서보드로 sigmoid 버전 NN과 ReLU 버전 NN을 비교하면 정확도의 차이가 엄청난 것을 볼 수 있을것이다.


물론 한번 로스가 음수로 떨어지면 그 노드는 학습이 되지 않는다는 문제가 있지만 그 점을 감안해도 ReLU는 훨씬 괜찮은 성능을 낸다.



현재는 ReLU를 넘어 좀 더 다양한 활성화 함수를 사용하고 있는데 최근에 사용되는 활성화 함수들을 정리해 보자

  • ReLU 
  • Leaky ReLU  - ReLU 함수의 변형으로 음수의 값은 0이 아닌 1/10으로 줄인다.
  • ELU - ReLU가 임계값이 0으로 고정되어 있지 않은 버전
  • maxout - 두 개의  W와 b 중에서 큰 값을 선택한다.


4. 정리

sigmoid와 tanh 함수는 NN에서 기울기를 지워버림으로써 모델의 학습을 어렵게 한다. 따라서 이 문제를 해결하기 위해 새로운 함수들이 만들어 졌으며 그 중 가장 대표적인 것이 ReLU이다. ReLU는 sigmoid나 tanh와 달리 복잡한 계산을 줄이고 이 기울기를 지워버리는 문제를 해결했다. 또한 ReLU함수를 바탕으로 한 Leaky ReLU, ELU등 다른 활성화 함수들이 생겨났다. 


[REFERENCE]

1) 김성훈 교수님 모두를 위한 딥러닝 lec 10-1

2)https://plot.ly/~votingelephant/17/sigmoid-function-vs-tanh-function.png