neural network에서 활성화 함수는 왜 사용할까?
이런 갑자기 질문을 받았을때 나는 당황할 수 밖에 없었다. cs231n을 들었음에도 불구하고 질문에 대답을 못한다는게 벙찌게 만들었다
이번 기회에 다시 짚고 기억하기 위해 포스팅을 하겠다.
다양한 Activation function을 알아보고 그 중 왜 sigmoid 같은 non-linear한 함수를 주로 사용하는지 짚고 넘어가야한다.
Activation function
- Linear Function(선형 함수)
먼저 일반적인 직선형 함수이다. 직선형 함수는 neural network에 적합하지 않다.
크게 두 가지 문제가 있다.
back prob시의 문제점
back prob을 할 때, 임의의 입력값 x에 대한 f(x)의 미분값(gradient)를 구한 뒤 weight를 업데이트를 하는 것이 일반적이다. 그러나 A = cx라는 직선 함수가 있을 때, 미분을 하였을 때 입력값 x에 관계없이 항상 c 라는 상수값이 나오게 될 것이고 입력값이 달라지더라도 일정한 gradient만이 나오게되어 제대로된 backprob을 못하게 될 것이다.
여러 layer를 쌓아도 동일한 결과
2개의 Layer를 쌓았지만 치환을 이용하여 정리하면 결국에는 1번째 layer를 쌓았을 때와 동일한 모습을 보이고 있다.
linear function일 때 많은 Layer를 쌓아도 큰 의미가 없어진다.
- Step Function(계단 함수)
step function은 예, 아니오와 같은 이진 출력에서는 사용이 가능하지만, class1, class2, class3과 같은 다중 출력을 할 수 없다. 또한 모델의 Optimization과정에서 gradient을 구하여 업데이트를 하여야 하는데 미분이 가능하지 않기에 neural network의 activation function으로 적합하지 않다.
- Non Linear Function(비선형 함수)
(1) 여러 layer를 쌓아도 단일 layer를 쌓은 효과를 보이는 linear function의 단점, (2) 다중 출력에 적합하지 않은 step function의 단점은 neural network에서는 적합하지 않기 때문에 주로 neural network에서는 비선형 함수를 사용하게 된다.
- Sigmoid
- Tanh
- ReLU
여기 Activation Functions에 대해서 자세하게 설명한 링크가 있다 살펴보긴 바란다.
결론은 Sigmoid, Tanh의 경우 gradient vanishing 문제가 발생하기 때문에 이를 보안한 ReLU activaion function을 많이 사용한다. + 계산도 빠르다.
결론짓자면 neural network에서 활성화 함수는 왜 사용할까? 의 질문은 neural network에서 non linear한 활성화 함수는 왜 사용할까? 라는 질문으로 치환될 것이고
위 포스팅은 그에 대한 대답을 잘하고 있다고 생각하게 된다.
참고자료
[1] http://sanghyukchun.github.io/74/
[3] https://bbangko.tistory.com/5