평범한 SGD는 ANDREA를 훈련시킬 수 없다
확률적 경사 하강법, 시작점
역전파는 모든 매개변수에 대해 그래디언트 g를 계산합니다. 평범한 확률적 경사 하강법(SGD)은 각 매개변수를 p -= lr * g로 업데이트합니다. 하나의 학습률, 단계당 하나의 방향, 과거 그래디언트에 대한 기억 없음.
평범한 SGD는 규모에서 두 가지 이유로 망가집니다:
1. 그래디언트의 크기가 매개변수에 따라 매우 다름. 드문 토큰의 임베딩은 대부분의 단계에서 아주 작은 그래디언트를 받지만, 레이어정규화 스케일은 큰 그래디언트를 받습니다. 하나의 학습률로는 둘 다 적합할 수 없습니다.
2. 그래디언트가 진동함. 16개 소스 코퍼스에서 나온 노이즈가 많은 미니배치가 매개변수를 왼쪽으로, 오른쪽으로, 다시 왼쪽으로 밀어냅니다. 일반 SGD는 스스로 싸우는 데 단계를 낭비합니다.
Adam (Kingma & Ba, 2015)은 매개변수당 두 개의 이동 평균으로 둘 다 해결합니다.
첫 번째 모멘트 & 두 번째 모멘트
m: 평활화된 방향
첫 번째 모멘트 m은 최근 그래디언트를 지수적으로 평균화합니다:
m = beta1 m + (1 - beta1) g
beta1 = 0.9로 설정합니다. 여러 단계 후에 m은 평활화된 방향을 담게 됩니다; 하나의 나쁜 배치가 이를 거의 움직이지 않습니다.
v: 평활화된 크기
두 번째 모멘트 v는 최근 제곱 그래디언트의 평균을 계산합니다:
v = beta2 v + (1 - beta2) g^2
beta2 = 0.999로 설정합니다. v는 각 매개변수의 기울기가 일반적으로 얼마나 큰지를 추적합니다. 기울기가 큰 매개변수는 큰 v를, 기울기가 작은 매개변수는 작은 v를 갖습니다.
매개변수별 적응 학습률
평활화된 방향을 평활화된 크기의 제곱근으로 나누면 모든 매개변수를 비교 가능한 기준으로 재조정합니다:
adam_step = m / sqrt(v + eps)
작은 기울기 임베딩은 확대되고; 큰 기울기 레이어정규화는 축소됩니다. 이제 하나의 전역 lr이 모든 매개변수에 적합합니다.
모멘트 읽기
초기 단계에서 바이어스 보정이 필요한 이유
콜드-스타트 바이어스
m & v는 0에서 시작합니다. 1단계 후, m = 0.1 g_1 & v = 0.001 g_1^2. 두 추정치 모두 장기 평균을 극적으로 과소평가합니다. 보정 없이 최적화기는 소심하게 시작해 천천히 증가하며, 표현이 형성되는 소중한 초기 단계를 낭비합니다.
보정 방법
Adam은 각 추정치를 1 / (1 - beta^t)로 스케일링합니다. 여기서 t는 단계 번호입니다:
m_hat = m / (1 - beta1^t)
v_hat = v / (1 - beta2^t)
1단계에서 beta1 = 0.9일 때, 나누는 값 (1 - 0.9) = 0.1이므로 m_hat = m / 0.1 = 10 * m입니다. 편향 보정된 추정치는 장기 평균이 예측하는 것과 일치합니다. t가 증가함에 따라 beta^t는 0에 가까워지고, 보정값은 1에 가까워지며, 보정된 값과 보정되지 않은 값이 수렴합니다.
분리된 가중치 감소 (AdamW 혁신)
L2 정규화 vs 가중치 감소
전통적인 L2 정규화는 손실에 페널티를 추가합니다: L_total = L_data + (lambda / 2) sum(p^2). 역전파는 이 페널티를 기울기의 일부로 봅니다: g_total = g_data + lambda p. L2 항은 Adam의 m 및 v 업데이트를 통해 흐르며, 매개변수별 크기에 따라 평활화되고 재조정됩니다.
Loshchilov & Hutter (2019)는 Adam을 통해 정규화기를 부드럽게 하면 둘 다 손상된다는 것을 증명했습니다. Adam의 적응적 스케일링은 큰 기울기 매개변수(여기서 decay가 과적합과 가장 강하게 싸워야 하는 곳)에서 weight decay를 줄이고, 작은 기울기 매개변수에서 이를 증폭시킵니다.
AdamW: Decay를 직접 적용하기
AdamW는 weight decay를 기울기에서 분리합니다. Decay는 매개변수 업데이트 중 각 매개변수에 직접 적용되며, m이나 v에는 절대 영향을 주지 않습니다:
p -= lr (m_hat / (sqrt(v_hat) + eps) + weight_decay p)
이제 두 항이 각 단계를 이끕니다:
1. Adam 항: m_hat / (sqrt(v_hat) + eps)는 각 매개변수별 크기 기록에 따라 그래디언트 방향을 재조정합니다.
2. 감쇠 항: weight_decay * p는 Adam의 스무딩을 거치지 않고 모든 매개변수를 균일하게 0으로 축소합니다.
ANDREA-120M v2는 weight_decay = 0.01로 설정합니다. 매 단계마다 모든 매개변수가 Adam 항이 하는 것에 추가로 1%씩 0으로 축소됩니다.
왜 Decoupled가 중요한가
실증적 증거
v1 붕괴 (가중치 감쇠 없음)
ANDREA-120M v1은 vanilla Adam으로 165K 스텝 동안 훈련되었습니다. 샘플 출력:
- Step 80K: region region region region region region region
- Step 110K: ''''' ''''' '' ''' '' ''' '''?' ''' ' '' '' '
- Step 140K: games, games, games, games, games, games, games
- Step 165K: Budy Budy Budy Budy Budy Budy Budy Budy Budy
손실 수치가 합리적인 수준을 유지했습니다 (110K 스텝에서 EMA 최소 3.23, 무작위 확률 9.04 대비). 손실만으로는 반복 붕괴가 숨겨집니다: 한 토큰을 영원히 외우는 모델은 그 토큰이 나타나는 모든 스텝에서 낮은 교차 엔트로피를 달성합니다.
v2 안정성 (weight_decay = 0.01)
v2는 AdamW (그라디언트 클리핑, LR 워밍업, 샘플 모니터링 추가)를 도입했습니다. ~112K 스텝에서 생성된 샘플:
- Carolina parakeet was declared extinct in 1939 (사실적으로 정확함)
- The Fourier transform decomposes signals into frequency components (교과서 정의)
- Rain's rhythmic refrain, Rivulets on the window, Respite from life's pain (하이쿠 제약 충족)
외부 평가에서 v2 샘플을 9.5/10으로 평가하며 "이 규모에서 인상적인 일관성과 지식 유지"라고 칭했습니다.
AdamW 없이 12M이 생존한 이유는?
ANDREA-12M은 vanilla Adam으로 훈련되었으나 붕괴하지 않았습니다. 12M 파라미터에서 가중치 행렬은 Adam의 적응적 스케일링이 개별 가중치를 반복을 유발하는 폭주 크기로 밀어붙이지 않을 만큼 충분히 작게 유지됩니다. 120M 규모에서는 가중치 크기가 단계당 더 멀리 표류하고 누적됩니다. 균일한 감쇠는 0으로 향하는 일정한 복원력을 적용합니다. 모델이 확장될수록 decoupled weight decay가 더 중요해집니다.
weight_decay = 0.01 선택
인접 활동
AdamW는 이 코스에서 세 가지 형제 활동과 연결됩니다:
- 활동 11: LR 워밍업 + 코사인 감쇠. AdamW만으로는 새로 초기화된 가중치에서 즉각적인 피크 학습률로부터 모델을 구할 수 없습니다. 워밍업은 2000단계 동안 lr을 점진적으로 증가시켜 AdamW의 편향 보정 및 가중치 감쇠가 표현을 안정화할 시간을 갖게 합니다.
- 활동 12: 그래디언트 클리핑. AdamW는 그래디언트가 제한된 크기를 가진다고 가정합니다. ANDREA의 bandit에서 소스 전환은 7에서 42단계마다 발생하며 가끔 그래디언트 스파이크를 생성합니다; 클리핑은 AdamW가 m, v, 또는 p를 건드리기 전에 L2 노름 1.0으로 이를 제한합니다.
- 활동 13: FP32 / FP16 / FP8 정밀도. AdamW는 매개변수당 m & v를 저장하여 가중치만의 메모리 사용량을 두 배로 만듭니다. FP16은 그 사용량을 반으로 줄이고; FP8은 다시 줄입니다. 정밀도 선택은 옵티마이저 안정성과 상호작용합니다.
AdamW, warmup, clipping, & precision은 네 잎 클로버를 형성합니다. 한 잎을 떨어뜨리면 ANDREA가 무너지는 것을 지켜보세요.