본문 바로가기

데이터/딥러닝

CS231n_Lecture7:Training Neural Networks

Fancier optimization

x, y축은 가중치

 

  • SGD의 단점
  •  
    • Loss는 수직방향의 가중치 변화에 더 민감하게 변화하여 Hessian matrix의 최대최소 singular 값의 비율이 안좋다.
      • 이렇게 빠르게 변하는 수직 차원을 가로지르면서 지그재그로 지저분하게 움직인다.
      • 이런 방향 중 불균형한 방향이 있다면 SGD는 잘 동작하지 않을 것
    • local minimum
      • 휘어진 손실함수 중간에 valley가 있으면 gradient가 0이되어 SGD가 멈춘다.
    • saddle points
      • 한쪽 방향으로는 증가하고 있고, 다른 한쪽 방향으로는 감소하고 있을때도 gradient가 0이 되어 SGD가 멈춘다.
      • train상의 시간단축을 위해 미니배치 데이터로 loss를 추정하게 되는데, 이게 정확한 gradient가 아니다보니 최적화시간이 오래걸리게 된다.

 

 

  • SGD + momentum term
    • gradient를 계산할 때 velocity를 이용하여 유지
    • 하이퍼파라미터 rho 추가
    • velocity의 영향력을 rho 비율로 맞추는데 보통 0.9와 같은 높은 값
    • velocity에 일정 비율 rho를 곱해주고 현재 gradient를 더해 velocity vector 방향으로 나아가므로 gradient=0이라도 움직일 수 있다. momentum이 변동을 상쇄시켜 준다.

 

  • Nesterov accelerated gradient(Nesterov momentum)
    • 기본 SGD momentum은 "현재 지점" 에서의 gradient를 계산한 뒤 velocity와 섞는 반면, Nesterov는 우선 velocity방향으로 움직이고 해당 지점에서의 gradient를 계산하고 다시 원점으로 돌아가 둘을 합치는 방식으로 두 정보를 더 섞어준다.
    • velocity의 방향이 잘못되었을 경우에 현재 gradient로 보정해준다.
    • velocity를 업데이트하기 위해서 이전의 velocity와 (x+pv)에서의 gradient를 계산한다.

  • AdaGrad
    • 훈련 중 계산되는 gradients를 활용하는 방법
    • velocity term 대신 grad squared term 이용해 학습 도중에 계산되는 gradient에 제곱해서 계속 더해주고 update할 때 update term을 앞서 계산한 gradient 제곱항으로 나눠준다.
    • AdaGrad는 step을 진행할수록 값이 점점 작아진다.
    • 손실함수가 convex한 경우에 점점 작아지는 것은 좋은 특징이지만 다른 케이스(ex. saddle point)에는 멈출수도 있다.

 

  • RMSProp
    • decay rate(0.9, 0.99)를 곱해줌
    • overshoots한 뒤에 다시 minima로 돌아오고, 각 차원마다의 상황에 맞도록 적절하게 궤적을 수정시킨다.

 

 

  • Adam
    • momentum과 ada계열을 합친것
    • second moment를 0으로 초기화하는데 이로인해 step이 너무 커지게되는데 이는 step이 커진게 아니라 bias correction term을 추가해서 보정해준다.


Regularization


Transfer Learning