] Adam VS SGD
본문 바로가기

카테고리 없음

Adam VS SGD

뉴럴 네트워크는 weight paramter들을 최적화(optimize)하기 위해서 Gradient Descent방법을 사용했다..

 

loss function의 현 weight의 기울기(gradient)를 구하고 loss를 줄이는 방향으로 업데이트(조정)해 나가는 방법을 통해서 뉴럴 네트워크를 학습하였습니다.

loss(cost) function

--> 현재의 가중치에서 틀린정도를 알려주는 함수.

현재 네트워크의 weight에서 내가 가진 데이터를 다 넣어주면 전체 에러가 계산된다. 거기서 미분을 하면 에러를 줄이는 방향을 알 수 있다. 이걸 계속 반복해서 학습을 하는 것.

내가 가진 데이터를 다 넣어주면 전체 에러가 계산된다. 

최적값을 찾아 나가기 위해서 한칸 전진할 때마다 모든 데이터 셋을 넣어주어야 한다는 문제.

그래서 학습이 굉장히 오래 걸린다. 언제 다 학습 시킬 것이가?

 

Gradient Descent 말고 더 빠른 Optimizer는 없는지 연구자들이 고민을 하게 되죠. 그래서 나온 것이

Stochastic Gradient Descent.

 

Stochastic Gradient Descent

GD와 SGD의 차이
최적값을 찾아가는 과정 비교

뒤죽박죽 형태로 찾아가지만 속도는 GD보다 훨씬 빠르다. 

 

  • GD
    • 모든 데이터를 계산한다 => 소요시간 1시간
    • 최적의 한스텝을 나아간다.
    • 6 스텝 * 1시간 = 6시간
    • 확실한데 너무 느리다.
  • SGD
    • 일부 데이터만 계산한다 => 소요시간 5분
    • 빠르게 전진한다.
    • 10 스텝 * 5분 => 50분
    • 조금 헤메지만 그래도 빠르게 간다

 

SGD에도 문제점이 존재. 미니 배치를 통해 학습을 시키는 경우 최적의 값을 찾아가니 위한 방향 설정이 뒤죽 박죽-->무슨말이지?

한걸음 나아가기 위한 보폭이 낮으면 학습하는데 오래 걸리고, 너무 크면 최적의 값을 찾지 못하는 문제.

 

문제점을 인지하고 각가의 문제점을 개선하는 더 좋은 Optimizer들이 많이 있다.

 

  • Gradient Descent
    • 최적을 값을 찾아가는 것은 정확하지만 너무 느리다.
  • Stochastic Gradient Descent를 통해서 빠르게 찾을 수 있도록 발전
    • 그러나 최적의 값을 찾아가는 방향이 뒤죽 박죽이고, 한 스텝 나아가기 위한 사이즈를 정하기 어렵다.위한 사이즈를 정하기 어렵다.
  • 방향과 스텝 사이즈를 고려하는 새로운 Optimizer들이 많이 나왔다.
    • 방향성
      • Momentum
      • NAG
    • 스텝 사이즈
      • Adagrad
      • RMSPop
      • AdaDelta
    • 방향성 + 스텝사이즈
      • Adam

그래서 무엇을 쓰는게 좋다는 거여?

 

Adam이 짱이여?

출처: https://seamless.tistory.com/38 [Mino's blog]