Data Science/Neural Network

ReLU를 사용하는 이유

준나이 2018. 5. 24. 21:29

[ReLU란?]


(수식)

h=max(0,a) where a=Wx+b



(그래프)


왼편은 일반적인 활성화 함수의 형태이고 우측은 gradient descent에 사용되는 역함수를 취했을 때의 형태이다.



[ReLU의 대표적인 장점]


- Sparsity

- Vanishing Gradient


위 장점은 sigmoid 함수와의 비교했을 때 이다.

ReLU가 나오기 전에는 주로 sigmoid가 많이 쓰였으므로 sigmoid와 비교하는 것이 옳다. 

sigmoid는 tanh와 비슷한 경향이 있다. 단, tanh는 sigmoid에 비해 Vanishing Gradient가 개선된 경우이지 극복한 것은 아니다.




[ReLU를 사용하는 이유]


1) Sparsity (a가 0보다 작을 때 / a≤0)


 (Sparse 하다는 것은?)


sparse하다는 뜻은 벡터를 표시하는 값들 중에 0이 많은 수를 차지한다는 것, 즉 값이 비어있다는 뜻이다. 그 반대는 값이 차있는 dense한 경우라고 표현한다. (one hot vector는 매우 sparse하다고 볼 수 있고, embedding vector는  dense하다고 볼 수 있다.)


 (Sparsity가 유용한 이유)


 활성화 값(a)이 0보다 작은 뉴런들이 많을수록 더욱 더 sparse한 모습을 띄게 된다. 하지만 기본적으로 (혹은 전통적으로) neural network에서 사용해온 sigmoid 함수는 항상 0이 아닌 어떠한 값(eg. 0.2, 0.01, 0.003 ...)을 만들어내는 경향이 있어 dense한 모습을 나타내게 된다. 


 뉴런의 활성화값이 0인 경우, 어차피 다음 레이어로 연결되는 weight를 곱하더라도 결과값은 0을 나타내게 되서 계산할 필요가 없기에 sparse한 형태가 dense한 형태보다 더 연산량을 월등히 줄여준다. (하지만 0으로 한번 할당되면 다시 활성화 되지 않으므로 해당 뉴런을 dead neuron / dying Relu 이라고 표현하기도 한다.)


Hidden Layer에서 흰색 박스는 a값이0보다 작은 경우, 파란색 박스는 a값이 0보다 큰 경우이다.



2) Vanishing Gradient (a가 0보다 클 때 / a>0)


sigmoid의  gradient는 x의 절댓값이 증가하는 만큼 작아지게 되는 것에 비해, ReLU의 역함수는 1이므로 ReLU의 경우에는 gradient로 상수를 갖게된다. 일정한 gradient값은 빠르게 학습하는 것을 도와준다.


자세한 내용은 추후에 vanishing gradient 문제에 관한 포스팅에 sigmoid, tanh, ReLU 한 번에 언급하도록 하겠습니다.



[Reference]


https://stats.stackexchange.com/questions/126238/what-are-the-advantages-of-relu-over-sigmoid-function-in-deep-neural-networks


https://www.quora.com/What-does-it-mean-that-activation-functions-like-ReLUs-in-NNs-induce-sparsity-in-the-hidden-units