week6: Optimizer choice

옵티마이저(Optimizer)란?

👉 쉽게 말하면, 머신러닝 모델이 더 좋은 정답을 찾도록 도와주는 알고리즘!

  • 모델이 학습할 때는 손실 함수(loss function, 예: MSE, Cross-Entropy 등)를 줄이는 방향으로 가야 함
  • 손실을 최소화하려면 가중치(weight)를 계속 업데이트해야 함
  • 가중치를 "얼마나, 어떻게" 조정할지 결정하는 것이 옵티마이저의 역할!

아담(Adam)과 확률적 경사 하강법(SGD)

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

  • 경사를 따라 한 걸음씩 내려감. (기울기 방향으로 이동)
  • 하지만 데이터가 많거나, 지형이 복잡하면 진동이 심하고 최적점에 도달하기 어려움.

💡 Adam(Adaptive Moment Estimation)

  • SGD의 단점을 보완한 방법!
  • 이전 기울기(gradient)들의 지수 이동 평균을 활용하여 방향을 결정
    즉, 단순히 현재 기울기만 보는 게 아니라, 과거의 기울기 변화도 고려해서 더 똑똑하게 움직임!
  • 속도를 자동 조절해 진동을 줄이고, 빠르게 최적점에 도달할 수 있음.

📝 Adam이 하는 일

  • 기울기(gradient)의 이동 평균을 저장 → 방향을 부드럽게 만듦
  • 기울기의 분산(variance)도 저장 → 너무 급격한 변화를 막음
  • 학습률을 자동으로 조절 → 적응형 학습률(Adaptive Learning Rate)

아담W(AdamW)와 가중치 감쇠(Weight Decay)

Adam과 AdamW의 가장 큰 차이점은 가중치 감쇠(Weight Decay)를 적용하는 방식!

💡 Weight Decay(가중치 감쇠)란?

  • 쉽게 말해, 과적합을 방지하기 위해 가중치의 크기를 점점 줄이는 테크닉!
  • 모델이 너무 큰 값을 가지면 오버피팅이 발생할 수 있음 → 이를 방지하기 위해 일부러 가중치를 줄여줌.

📝 Adam vs. AdamW 차이점

  • Adam은 L2 정규화 방식으로 가중치를 줄임.

  • 기울기 업데이트할 때 (gradient + weight decay term)을 더함.

  • 그런데 이 방식은 Adam의 업데이트 규칙과 완전히 분리되지 않아 비효율적임.

  • AdamW는 Adam에서 Weight Decay를 업데이트 과정에서 따로 적용.

  • 즉, Adam의 장점(빠른 수렴 + 적응형 학습률)을 유지하면서도 더 효과적인 Weight Decay 적용.


Adafactor와 8-bit Adam (양자화 Adam)

Adafactor: 메모리 절약을 위한 Adam 대체제

💡 Adafactor는 Adam의 메모리 사용량을 줄이기 위해 개발된 옵티마이저!

  • 기존 Adam은 기울기의 1차/2차 모멘트를 모두 저장해야 해서 메모리를 많이 사용함
  • Adafactor는 이를 행(row)과 열(column) 단위로 요약해서 저장하여 메모리를 절반 이하로 줄일 수 있음!
  • 대형 모델(GPT, T5-11B 등)에서 효과적

📝 Adafactor의 장점과 단점

  • 장점: 메모리 사용량 절약 (Adam보다 절반 이상 적게 사용)
  • 단점: 수렴 속도가 Adam보다 느릴 수도 있음

8-bit Adam (양자화 Adam)

💡 8-bit Adam은 기존 Adam의 모든 상태를 유지하면서도 메모리 사용을 최적화하는 방식!

  • Adafactor처럼 정보를 요약하지 않고, 기존 Adam처럼 1차/2차 모멘트를 모두 저장함
  • 대신 8비트(INT8)로 변환하여 저장하여 메모리를 절약
  • 학습할 때는 다시 32비트(FP32)로 변환하여 계산하므로 정확도를 유지할 수 있음

📝 8-bit Adam의 장점과 단점

  • 장점: Adam과 거의 동일한 성능 유지하면서도 메모리를 4배 절약 가능
  • 단점: 낮은 정밀도로 인해 극단적인 경우 성능이 약간 저하될 수도 있음

요약

옵티마이저특징메모리 사용량
SGD (확률적 경사 하강법)가장 기본적인 옵티마이저, 단순하지만 속도 느림✅ 적음
Adam과거 기울기의 이동 평균을 저장하여 빠르게 수렴❌ 많음
AdamWAdam에 Weight Decay(가중치 감쇠) 추가, 더 나은 일반화 성능❌ 많음
AdafactorAdam보다 메모리 절약 (모멘트를 요약 저장)✅ 적음
8-bit AdamAdam의 상태를 8비트로 저장하여 메모리 절약✅ 적음

DDP(Distributed Data Parallel)

  • PyTorch에서 제공하는 데이터 병렬 학습 방식
  • 여러 개의 GPU에서 같은 모델을 학습하도록 분산 처리하여 속도를 높이는 기법

📌 DDP 동작 방식

  • 각 GPU(노드)는 동일한 모델과 옵티마이저를 로드하고,
  • 미니배치를 GPU마다 나눠서 학습한 후,
  • 각 GPU에서 계산한 기울기(gradient)를 동기화(sync)하여 업데이트!

📌 DDP의 핵심 개념:

  • 모든 GPU가 같은 모델의 파라미터를 가지고 있음 (즉, 모델 복제)
  • 각 GPU에서 개별적으로 forward/backward 연산 수행
  • gradient를 all-reduce 방식으로 합쳐서 업데이트함 (동기화됨)

💡 DDP의 문제점

  • 모델의 파라미터(Parameter), 옵티마이저 상태(Optimizer State), 활성값(Activation Value)가 각 GPU마다 중복 저장됨
  • 모델이 클수록 GPU VRAM 사용량이 증가하여 학습이 어려워질 수 있음

Shared DDP(공유 DDP)

  • DDP를 확장하여 GPU 간에 더 효율적인 리소스 활용을 목표로 하는 방식
  • 특히 모델의 파라미터를 일부 GPU 간 공유하거나, 활성값(Activation)을 공유하여 메모리 사용량을 줄이는 기법을 의미

ERROR

0개의 댓글