1. Sigmoid와 신경망
sigmoid 함수를 활성화 함수로 사용한 심층신경망을 사용하다보면 이상하게 학습이 잘 되지 않는 문제가 발생한다. 왜일까? 우리는 신경망의 파라미터를 조정할 때 backpropagation(오류역전파)을 사용한다. 여기서 문제가 발생하는 것인데 왜 sigmoid가 오류역전파에 문제를 만들어 내는 것일까? sigmoid는 많은 장점을 가지고 있는데 말이다.
2. Vanishing Gradient
이 문제도 여러가지 문제와 마찬가지로 킹갓 제프리 힌튼 교수께서 이것은 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. 정리
[REFERENCE]
2)https://plot.ly/~votingelephant/17/sigmoid-function-vs-tanh-function.png
'머신러닝' 카테고리의 다른 글
[머신러닝]DCGAN 알아보기 (0) | 2018.02.18 |
---|---|
[머신러닝] 스타일을 바꿔주는 Style Transfer (0) | 2018.02.03 |
[머신러닝]GAN - Generative Adversarial Network 훑어보기 (0) | 2017.12.22 |
[머신러닝] Jensen–Shannon 발산과 Kullback–Leibler 발산 (0) | 2017.12.21 |
[파이썬 딥러닝]퍼셉트론 (0) | 2017.08.03 |