경사 하강법에 대해 알았으니, 확률적 경사 하강법과 최적화 기법에 대해 더 알아보자.

확률적 경사 하강법 : SGD(Stochastic Gradient Descent)

  • 이전에 배운 경사 하강법은 Loss가 최소가 되게 하는 w를 찾아서 update 하는 방법이었음
  • 경사 하강법의 경우, 데이터가 엄청 클 경우 연산이 엄청 느리고 하드웨어 적으로 메모리가 부족해서 아예 돌아가지 않는 경우가 생기는 문제가 있음
  • 이 문제를 해결하기 위해 SGD 방법이 나옴
  • 데이터 전체를 넣는 것이 아니고 데이터 전체를 무작위로 섞은 후  mini-batch라는 이름을 가진 것들로 쪼갬
  • 그 후 mini-batch를 하나씩 넣어줌
  • Loss 값을 구한 후 input이 들어올 때 이전에 들어온 mini-batch의 다음 mini-batch가 들어옴
  • 기존 경사 하강법과 확률적 경사 하강법(SGD)의 공식은 똑같음
  • SGD의 경우, w를 업데이트 할 때 mini-batch 하나를 가지고 계산한 후 업데이트함

 

  • 경사 하강법과 SGD 공식의 문제점 : 학습률(µ)
  • 학습률이 고정된 상수임
  • 학습률을 상황에 따라 조절하기 나온 방법이 크게 2가지로 나눠짐
    • 모멘텀 기반 : 공식 뒤에 추가적인 값을 더해주는 것
      1. 보통 감마를 0.9 정도 사용함
      2. 이전 속도를 기억해서 현재에 반영함
    • 가변 학습률 : µ 를 어떤 특정 규칙에 따라 바꿔주는 것
  • 모멘텀 기반과 가변학습률을 동시에 적용한 기법 : Adam

 

Adam(Adaptive Moment Estimation)

  • RMSProp와 Momentum 개념을 합친 것
  • gradient 자체에 이전 정보를 반영함
  • step size 자체에도 이전 정보를 반영함
  • 일반적으로 ß1 = 0.9, ß2 = 0.999로 세팅함
  • ⍷ 은 10^-8(10의 -8승)으로 세팅함

 

스케줄링 : µ를 시간에 따라 조절하는 방법

  • 스케줄링을 사용할 때 가변 학습률을 사용하지 않고 모멘텀 기법과 함께 사용하거나 일반적인 SGD와 사용함
  • StepLR
    • 1-10번째 학습시에는학습 시에는 µ = 10^-3(10의 -3승), 11-20번째 학습 시에는 µ = 10^-4(10의 -4승)을 사용하도록 하는 것
    • 학습 횟수에 따라서 µ를 스케줄링 해놓는 것
    • 계단식으로 줄어드는 것
  • ExponentialLR
    • 감마^학습횟수에 µ 를 곱해줌
    • γ^epoch * µ
  • Cosine Annealing
    • 일반적으로 스케줄링은 학습을 하면 할수록 작은 학습률을 사용하도록 설계가 되어 있는데
    • 때에 따라서는 큰 값이 필요한 경우도 있기 때문에 Cosine Annealing을 사용함
    • 학습 횟수에 따라서 속도가 줄어들었다가 다시 늘어나고 줄어들었다가 다시 늘어나는 방법

 

 

 

내용에 문제가 있으면 댓글로 알려주세요!

 

출처 : 인프런 - 실전 인공지능으로 이어지는 딥러닝 개념 잡기(딥러닝 호형)

+ Recent posts