https://nittaku.tistory.com/267
https://inhovation97.tistory.com/23
https://www.youtube.com/watch?v=wEoyxE0GP2M&list=PLC1qU-LWwrF64f4QKQT-Vg5Wr4qEE1Zxk&index=6
출처 : cs231n
Activation function은 딥러닝을 학습하는데 비선형성을 더해주는 역할을 한다.
비선형성을 더해줌으로써, 더욱 더 복잡한 모델을 만들고 좋은 성능을 나타낼 수 있다고 한다. 단순히, 선형적으로 layer를 쌓는다면 결국은 그건 하나의 single layer로 표현할 수 있기에 비선형성의 중요성이 크다고 말할 수가 있다.
출처 : cs231n
출처 : cs231n
앞선 노드에서 나온 값에 Sigmoid를 적용하면 그 값은 0과 1 사이의 값을 갖게 된다. Sigmoid 는 학습과정에서 2가지 역할로 쓰일 수 있다. Activation function으로 사용할 때는 각층의 Layer마다 들어가서, 모델의 복잡도를 높인다.또 하나는 Output function으로 사용된다.
Sigmoid를 Activation Function으로 사용하면 몇가지의 문제점이 발생한다.
위의 사진을 보면 gradient가 saturation 되는 현상을 볼 수가 있다. saturation이 발생하게 되면 w는 더이상 학습하는 동안 업데이트가 되지 않는다.
여기서 gradient를 살펴본다면
saturation이 일어나면 이 된다는 뜻이다.
뒤 쪽의 Layer가 Saturation 되고 앞의 모든 Layer도 saturation되어 w의 업데이트가 중지된다. saturation현상을 포함해서 w의 업데이트가 0이 되는 현상을 모두 일컬어 vanishing gradient라고 한다.
또 다른 sigmoid의 단점은 sigmoid의 결과값이 0~1사이로 나오게 된다는 것이다. sigmoid의 gradient는 0~0.25사이이다. 그 결과, 의 업데이트량은 하나의 부호로 결정된다.
출처: cs231n
위의 그림은 를 축으로 한 그래프다. 파란색 선이 제대로 학습할 수 있는 방향인데 업데이트량이 항상 같은 부호이면, 지그재그 현상이 발생한다. 그로 인해, 업데이트 속도가 느려진다. 그리고 마지막으로 exp연산은 연산시간이 오래걸리게 된다.
- Vanishing gradient
- zero-centered의 문제
- exp의 연산이 있는 문제
이로 인해, sigmoid는 activation 함수로 잘 사용되지 않는다.
출처 : cs231n
output이 [-1,1]이어서, (-)와 (+)가 나오는 비중이 비슷해 지그재그 현상이 덜하다. 그러나 여전히 Vanishing gradient의 문제가 발생한다.출처 : cs231n
saturation이 일어나는 부분이 한 곳으로 줄었다. 또한, exp연산 없이 단순하고 빠르다. loss수렴 속도가 sigmoid와 tanh보다 6배 가까이 빠르다. 그래도 음의 부분을 전부 0으로 두기 때문에 vanishing gradient, zero-centered output의 문제가 남아있기는 하다.
출처 : cs231n
(-)영역에도 경미하게 기울기를 주어 vanishing gradient를 해결하였다.
출처 : cs231n
ELU는 0에서의 미분 불가점을 미분가능하게 하였다. 이 함수는 Leaky ReLU와 비교했을 때, 노이즈에 대해서 강건하다고 한다. 아마 0에서 미분가능한 점이 그런것 같다. 또한 zero mean의 output을 출력한다. 그러나 다시 (-)부분에서 기울기가 소실이 되고, exp연산으로 연산이 복잡해지는 단점이 있다.데이터에 따라서 어떤 activation function을 쓸지 정하는데, 웬만해서 ReLU를 쓰는 것 같다.