티스토리 뷰
2. Neural Networks / L3. Training Neural Networks - Dropout, Local Minima, Random Restart, Vanishing Gradient
chrisysl 2018. 7. 16. 21:57Dropout
- 만약 우리가 운동을 하는데 자기가 더 많이 사용하는 손(오른손잡이 와 같이)으로만 운동을 한다면?
- 한쪽 팔뚝만 굵어지는 일이 생기게 된다.
- 한쪽 팔뚝만 키우려고 운동하는 사람은 없지 않은가? 따라서 성공한 운동이 되었다고 볼 수 없다.
- 마찬가지로 네트워크를 학습하는 과정에서도 한쪽의 weight이 더 큰 경우
- 특정 방향으로 편향되어 네트워크가 진행되는 경향이 생길 수 있다.
- 따라서 이와같은 경우를 방지하고자, 특정 unit을 끄고(turn off) 나머지 네트워크 학습을 진행하곤 한다.
- 이를 구현하는 방법으로는 각 노드들이 연산에서 (순방향 및 역방향 모두) 제외될 확률을 주는 알고리즘을 통해
- 랜덤하게 특정 노드들을 연산에서 제외시킨다.
- 위의 경우 0.2로 명시해 둔 것과 같이 확률상으로 보면 어떤 노드는 한번도 제외되지 않을 수 있고
- 어떤 노드는 매번 제외 될 수 있다. 하지만 이는 epoch의 수가 증가함에 따라 큰수의 법칙에 의해
- 대부분의 노드들이 평균값을 유지하게 되므로 괜찮다.
- 이 방법을 dropout 이라고 하며 neural network 를 설계 및 학습함에 있어 매우 자주 쓰이는 방법이다.
Local Minima
- gradient descent를 다시 되짚어보면, error의 정점에서 기울기가 가장 급격하게 내려가는 방향으로
- 하향하도록 방향을 설정할 수 있게 해준다.
- 따라서 좌측 점에서 출발하여 우측 깃발까지 가야할 경우
- 위와같은 그래프 상에서는 저 첫번째 굴곡에서 갇히게 된다.(기울기가 더 내려가는곳이 없으므로)
- 즉 gradient descent의 방법으로는 우리가 원하는 방향까지 더 나아갈 수 없다는 얘기
- 따라서 우린 또다른 뭔가가 필요하다.
- 우리의 목표는 global minimum point인 초록지점에 도달하는것이 최종 목표이기 때문.
Random Restart
- 이를 해결할 수 있는 방법으로는, 몇몇의 랜덤한 여러 지점에서 gradient descent를 시도하는것이다.
- 따라서 각 저점에서의 error를 비교해서 최저점을 판단해 내면 된다.
- 이렇게 이동한 최저점은 말 그대로 global minimun 이거나 적어도 local minimum point가 되기 때문.
Vanishing Gradient
- sigmoid function에 대해 봐보자. 그래프 상에서 봐보면 윗부분에서의 미분값이 거의 0에 가깝다
- 이렇게 되면 gradient descent를 이용하여 error를 줄여나가기가 매우 어렵다.
- 노드와 함께 봐보면, 이전에 weights에 대한 error function의 미분값을 우리는
- output으로 가는 경로의 모든 노드에서 계산된 미분값의 곱으로 배웠다.
- 이 모든 미분값들은 sigmoid function의 미분값이므로 값이 매우 작고, 그 최종 결과는 진짜 매우매우 작다.
- 이는 gradient descent를 통해 error를 줄여 나감에 있어, 그 이동하는 step이 매우 극미하므로
- error의 최저점까지 도달하기가 거의 어렵다.