티스토리 뷰

2015년 12월 Quora 글

https://www.quora.com/What-is-the-vanishing-gradient-problem 의 번역


글쓴이 Nikhil Garg - Quora 엔지니어링 매니저


Vanishing Gradient Problem(기울기값이 사라지는 문제)는 인공신경망을 기울기값을 베이스로 하는 method(backpropagation)로 학습시키려고 할 때 발생되는 어려움이다.

특히 이 문제는 네트워크에서 앞쪽 레이어의 파라미터들을 학습시키고, 튜닝하기 정말 어렵게 만든다. 이 문제는 신경망 구조에서 레이어가 늘어날수록 더 악화된다.


이것은 뉴럴 네트워크의 근본적인 문제점이 아니다. 이것은 특정한 activation function를 통해서 기울기 베이스의 학습 method를 사용할 때 문제가 된다.

자 한번 이러한 문제를 직관적으로 이해해보고, 그것으로 인해 야기되는 문제를 짚어보자.


[문제]

Gradient 기반의 method는 parameter value의 작은 변화가 network output에 얼마나 영향을 미칠지를 이해하는 것을 기반으로 parameter value를 학습시킨다.

만약 parameter value의 변화가 network's output의 매우 작은 변화를 야기한다면, 네트워크는 parameter를 효과적으로 학습시킬 수 없게 되는데 이것이 문제다.

=> gradient라는 것이 결국 미분값 즉 변화량을 의미하는데, 이 변화량이 매우 작다면, network 를 효과적으로 학습시키지 못하고, error rate이 미쳐 다 낮아지지 못한채 수렴해버리는 문제가 발생한다는 것 같다.


이 상황이 바로 vanishing gradient problem으로 발생하는 문제인데, 이 문제로 초기 레이어에서 각각의 parameter들에 대한 network's output의 gradient는 극도로 작아지게 된다. 이걸 좀 근사하게 얘기하면, 초기 레이어에서 parameter value에 대해 큰 변화가 발생해도 output에 대해서 큰 영향을 주지 못한다는 것이다.

그렇다면, 언제, 왜 이러한 문제가 발생하는지 살펴보자.


[원인]

Vanishing gradient problem은 activation function을 선택하는 문제에 의존적으로 일어난다. sigmoid나, tanh 등 요즘 많이들 사용하는 activation function들은 매우 비선형적인 방식으로 그들의 input을 매우 작은 output range로 짓이겨넣는다('squash')

예를 들어서, sigmoid는 실수 범위의 수를 [0, 1]로 맵핑한다. 그 결과로 매우 넓은 input space 지역이 극도로 작은 범위로 맵핑되어버린다.

이렇게 되어 버린 input space에서는 큰 변화가 있다고 하더라도, output에는 작은 변화를 보이게 된다.  gradient(기울기)가 작기 때문이다.


이러한 현상은 우리가 서로(??)의 꼭대기 층에 그러한 비선형성을 여러개 레이어로 쌓을 때 더욱 악화된다.

예를들어, 첫 레이어에서 넓은 input region을 작은 output region으로 맵핑하고, 그것이 2차 3차 레이어로 갈수록 더 심각하게 작은 region으로 맵핑되는 경우이다.

그 결과로 만약 첫 레이어 input에 대해 매우 큰 변화가 있다고 하더라도 output을 크게 변화시키지 못하게 된다.


우리는 이러한 문제를 해결하기 위해 짓이겨 넣는식('squashing')의 특징을 갖지 않는 activation function을 사용할 수 있다.

ReLU(Rectified Linear Unit - max(0, x))가 잘 선택되는 편이다.


https://cs224d.stanford.edu/notebooks/vanishing_grad_example.html

위 링크에서, 이러한 문제를 이해할 수 있도록 Sigmoid 와 ReLU를 visualize하여 비교한 결과를 보였으니 참고하면 좋을 듯 함



글쓴이 Ottokar Tilk, Tallinn 공대 박사과정


backpropagation을 통하여 뉴럴 네트워크를 학습시킬 때, error function의 minimum은 네트워크 weights에 대한 음의(negative) error 미분값의 방향으로 조금씩 움직이게 함으로써 발견된다. 각각 그 다음의 레이어의 gradient 정도에 따라서 gradient 값이 지수적으로 작아지게 되면, 진행도도 굉장히 느ㄹㅕ지게 되어 결과적으로 딥 네트워크의 weight을 느리게 학습시키게 된다.


gradient를 이렇게 수축시키는 한 가지 원인으로 activation function의 미분값이 있다.

예를 들어서, sigmoid 함수의 미분형은 함수값의 전체 range가 1.0 밑이며, gradient vanish가 상당히 빠르게 일어나게 된다.


Sigmoid derivative(미분계수):

tanh derivative(미분계수):

tanh는 그나마 조금 낫긴하지만, gradient가 tanh unit(tanh 함수)를 지날 때 여전히 수축하게 되는 것을 알 수 있다. 역시 느리다. 


ReLU activation function은 이러한 문제를 가지지 않는다. gradient가 x값이 0이하일 때는 0이고, positive input일 때는 항상 1이기 때문이다.


weight값을 초기화하는 것도 또한 gradient에 영향을 줄 수 있다. 하지만 초기화 문제는, gradient가 vanishing하는 것 대신에, explode(폭발적으로 증가)하게 한다.




글쓴이 Martin Thoma, 학생


gradient가 거의 0에 가깝게 되어버리면(vanish되어버리면), network는 매우 느리게 배울 수 밖에 없게되고, (global minimum이 아닌) local minimum에 도달하게 될 것이다.


댓글