240604 TIL #416 AI Tech #30 경사하강법의 최적화

김춘복·2024년 6월 3일
0

TIL : Today I Learned

목록 보기
416/550

Today I Learned

오늘 공부한 내용은 경사하강법의 종류와 최적화!


경사하강법

일반적인 종류

Batch Gradient Descent(배치 경사하강법)

  • 전체 훈련 데이터셋을 사용해 기울기를 계산하고 매개변수를 업데이트 한다.

  • 한번의 업데이트가 모든 데이터를 기반으로 이루어져 전체 데이터셋에 대한 평균적인 방향으로 이동한다.

  • 기울기의 추정이 정확하지만 계산 비용이 커서 비효율적일 수 있으며 전체 데이터셋을 메모리에 올려야 해서 메모리 요구량이 크다.

  • local minima 문제
    학습 과정에서 손실함수 값이 global minimum이 아닌 주변보다 낮은 정도의 값에 머무는 것.

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

  • 매번 랜덤하게 선택된 하나의 데이터 포인트를 사용하여 기울기를 계산하고 계속 매개변수 업데이트를 반복하는 방법이다. local minima 탈출에 용이하다.

  • 매번 하나의 데이터 포인트에 대해 업데이트를 수행하므로 계산이 빠르고 메모리 요구량이 적다.

  • 각 데이터 포인트에 대해 업데이트를 진행해 손실함수가 들쭉날쭉하게 변동하거나 최적값 주변에서 수렴하지 못하고 계속 진동할 수 있다.

Mini-batch Gradient Descent(미니배치 경사하강법)

  • 훈련 데이터셋을 작은 배치로 나눠 각 배치에 대해 기울기를 계산하고 매개변수를 업데이트 한다. 위 2 방법의 중간형태이다.

  • 병렬처리를 할 수 있고 효율과 안정성을 다 잡을 수 있다.

  • 하지만 배치 크기를 잘못잡으면 오히려 효율성과 기울기 추정 모두 비효율적일 수 있다.

batch size?

  • batch size가 크면 sharp minimizer에, 작으면 flat minimizer에 도달할 가능성이 크다.

  • sharp minimizer면 훈련과 테스트 데이터에서 오차가 클 가능성이 높다.
    즉, 일반화 성능이 낮다. 그러므로 large batch size가 일반화 성능이 더 좋다.


경사하강법 최적화

Loss function을 정의하고 나면 편미분을 손으로 계산하지 않고 체이너, 텐서플로우 같은 프레임워크에서는 자동으로 미분(automatic differentiation)을 계산해주게 된다. 이 과정에서 optimizer를 선택해야하는데 각각이 어떤 성질이 있는지 알아보자.

  • (Stochastic) Gradient Descent

    이 방식에서는 learning rate의 적절한 크기를 설정하는게 문제다. 너무 커도 학습이 안되고, 작아도 수렴에 오래걸린다.

  • Momentum

    관성. 배치에서 한번 기울기(gradient)가 정해지면 그 방향대로 따라가는 경향성이 있는데 이 정보를 활용하는 방식이다. 현재의 그래디언트 값뿐만 아니라 이전의 이동 방향도 함께 고려하여 새로운 업데이트 방향을 결정하는 방식이다. 수렴 속도를 향상시키고, 그래디언트의 노이즈를 감소시켜 안정적인 학습을 돕는다.

  • Nesterov Accelerated Gradient(NAG)
    모멘텀 방식에서 한 단계 더 나아간 방식으로, 임시의 미래 위치의 그래디언트를 사용하여 미래 위치에서의 업데이트 방향을 미리 조정해 모멘텀보다 더 빠른 수렴 속도와 더 나은 성능을 제공한다.


  • Adagrad

    경사 하강법은 모든 매개변수에 대해 동일한 학습률이지만, adagrad는 각 매개변수에 대해 학습률을 조절하는 방식이다. 각 매개변수에 대해 과거의 그래디언트를 고려하여 학습률을 조정하는데, 많이 업데이트된 매개변수는 학습률이 감소하고, 적게 업데이트된 매개변수는 학습률이 증가한다.
    G가 지금까지 얼마나 기울기가 변했는지 제곱해서 더한 것으로 변하면 변할수록 계속 커지는데, 역수에 있으므로 G가 커질수록 학습률이 감소하게된다. 문제는 학습이 될수록 G가 너무 커져서 학습이 정체되게 된다.

  • Adadelta
    위에서 얘기한 G가 커지는 문제를 해결한 방법이다. Adadelta에서는 학습률이 없다.(그래서 잘 활용되지는 않는다) 누적 그래디언트 제곱값대신에 지수 이동 평균(exponential moving average)을 사용한다. 이로인해 과거의 그래디언트에 대한 무한한 누적을 방지하고, 최근의 그래디언트 정보에 집중할 수 있다.

  • RMSprop
    Adagrad의 단점을 해결하기 위해 최근의 그래디언트 정보에 더 많은 가중치를 두는 방식을 사용한다. 그래디언트 제곱값의 지수 이동 평균을 사용하는 방식이다.

  • Adam(Adaptive Moment Estimation)

    일반적으로 가장 무난하게 사용하는 방식으로 RMSprop의 그래디언트 제곱값의 지수 이동 평균을 사용하여 학습률을 조절하고, 동시에 모멘텀 방식을 사용하여 이전 그래디언트의 영향을 고려한다.


본 포스트의 학습 내용은 부스트클래스 <AI 엔지니어 기초 다지기 : 부스트캠프 AI Tech 준비과정> 강의 내용을 바탕으로 작성되었습니다.

profile
Backend Dev / Data Engineer

0개의 댓글