86. Adam (Adaptive Moment Estimation) 옵티마이저

⚠️ 이 문서는 "어떤 딥러닝 모델이든 일단 이것부터 적용하고 시작해라"라는 말이 있을 정도로 현존하는 딥러닝 최적화 알고리즘 생태계를 천하 통일한 사실상의 표준(De facto standard)이자, 모멘텀(관성)의 직진성과 RMSProp(맞춤형 보폭 조절)의 유연성을 완벽하게 융합해 낸 '아담(Adam)' 옵티마이저를 다룹니다.

핵심 인사이트 (3줄 요약)

  1. 본질: 산을 내려갈 때, 무거운 쇠공처럼 가속도가 붙어 함정을 돌파하는 **Momentum(방향성)**의 장점과, 비포장도로에서는 조심조심 걷고 아스팔트에서는 성큼성큼 걷는 **RMSProp(보폭 조절)**의 장점을 수학적으로 한 수식에 섞어버린 궁극의 하이브리드 알고리즘이다.
  2. 가치: 튜닝해야 할 요소가 너무 많아 며칠 밤을 새우게 만들던 하이퍼파라미터(학습률 등) 튜닝의 고통을 끝냈다. Adam은 논문에 적힌 기본값(Default)을 그대로 써도 어지간한 복잡한 모델을 거의 완벽하고 빠르게 수렴(최적점 안착)시켜 준다.
  3. 기술 체계: 단순히 두 값을 더한 것이 아니라, 학습 극초기(1~10 Epoch)에 데이터가 부족해 보폭이 무한대로 튀어버리는 오류를 잡아주는 **'편향 보정(Bias Correction)'**이라는 수학적 안전장치를 추가한 것이 Adam을 완벽하게 만든 핵심 비결이다.

Ⅰ. 옵티마이저 진화의 양 갈래: 방향과 보폭

수많은 학자가 각자의 방식으로 하산(최적화)하는 방법을 연구했다.

  1. 길을 잃지 않는 자 (Momentum 계열):
    • "이전에 오른쪽으로 굴러가고 있었으니, 지금 바닥이 왼쪽으로 기울었어도 관성을 유지해서 일단 오른쪽으로 더 밀고 가보자." (방향의 관성, 1차 모멘트)
    • 잔잔한 웅덩이나 노이즈에 흔들리지 않고 거침없이 직진하여 가속도를 붙이는 데 탁월하다.
  2. 길에 맞춰 걷는 자 (RMSProp 계열):
    • "이 파라미터는 지금까지 너무 가파르게 변했으니, 이젠 보폭(학습률)을 좀 줄여서 조심조심 걷자. 쟤는 별로 안 변했으니 큼직하게 걷게 놔두고." (보폭의 적응형 조절, 2차 모멘트)
    • 파라미터마다 길의 상태가 다르다는 것을 인지하고 학습률을 자동으로 개별 재단해 준다.

📢 섹션 요약 비유: 어떤 학자는 자동차에 '무거운 쇳덩이(모멘텀)'를 달아 작은 돌부리(노이즈)에 흔들리지 않고 직진하게 만들었고, 어떤 학자는 '최고급 사륜구동 서스펜션(RMSProp)'을 달아 울퉁불퉁한 길과 평지에서 각 바퀴의 속도를 다르게 조절했습니다. Adam의 창시자들은 "그럼 그 두 개를 한 차에 다 달면 최고 아니야?"라는 단순하지만 위대한 생각을 해낸 것입니다.


Ⅱ. Adam의 수식: 두 마리 토끼와 편향 보정(Bias Correction)

단순 융합을 넘어 초기 부팅 시점의 치명적 버그를 잡았다.

  1. 두 개의 장부 (1차 모멘트와 2차 모멘트):
    • Adam은 발걸음을 뗄 때마다 두 개의 지수 이동 평균(EMA) 장부를 적는다.
    • 장부 $m_t$ (모멘텀): 과거의 기울기 방향을 기억하는 장부 (보통 0.9의 비율로 기억 유지).
    • 장부 $v_t$ (RMSProp): 과거의 **기울기 제곱(보폭 크기)**을 기억하는 장부 (보통 0.999의 비율로 기억 유지).
    • 최종적으로, $\frac{m_t}{\sqrt{v_t} + \epsilon}$ 공식을 써서 방향($m$)을 잡고 보폭($v$)으로 나눠주어 걷게 한다.
  2. 초기화 편향 (Initialization Bias) 문제:
    • 훈련 극초기(1번째, 2번째 걸음)에는 과거의 데이터가 없기 때문에 장부 $m$과 $v$가 0에 가까운 매우 작은 쓰레기 값이 된다.
    • 분모인 $v$가 0에 너무 가까워지면, 첫 번째 스텝의 걷는 보폭이 무한대에 가깝게 폭발(Overshooting)하여, 시작하자마자 산 밖으로 날아가 버리는 대참사가 발생한다.
  3. 편향 보정 (Bias Correction)의 마법:
    • Adam은 수식 뒤에 $\frac{1}{1-\beta^t}$ 라는 보정 캡슐을 하나 덧씌웠다.
    • 이 보정식은 첫 1~10번째 걸음(t가 작을 때)에는 값을 강제로 키워주어 0으로 수렴하는 것을 막아주고, 100번째 걸음(t가 클 때)이 넘어가면 1에 수렴하여 자연스럽게 투명 인간처럼 사라진다. 이 기발한 안전장치 덕분에 Adam은 시작부터 끝까지 덜컹거림 없이 부드럽게 굴러간다.

📢 섹션 요약 비유: 최고급 서스펜션을 단 자동차의 치명적 결함은, 시동을 걸고 처음 1~2초 동안은 센서 데이터가 없어서 차가 하늘로 미친 듯이 급발진해 버린다는 것이었습니다. Adam 개발자는 차가 출발할 때 첫 10m 동안만 부드럽게 잡아당겨 주는 보조 와이어(편향 보정)를 달아두었고, 차가 속도를 내면 와이어가 스르륵 풀려 완벽한 드라이빙을 완성시켰습니다.


Ⅲ. Adam의 무소불위와 그 대안들 (AdamW)

세상을 지배했지만 최신 거대 모델에서는 약점을 드러내고 있다.

  1. Adam의 무적 신화:
    • 컴퓨터 비전(CNN), 자연어 처리(RNN, 초기 Transformer) 등 거의 모든 분야에서 "가장 빨리, 그리고 가장 적은 튜닝으로 무난하게 좋은 성능"을 뽑아내어 초보자부터 전문가까지 사랑하는 원픽이 되었다.
  2. 일반화 성능(Generalization)의 딜레마:
    • 그런데 아이러니하게도 아주 정교하게 깎아 만든 구식 모멘텀(SGD + Momentum) 알고리즘이, 훈련 시간은 오래 걸리지만 실전 테스트 점수(일반화 성능)는 Adam보다 살짝 더 잘 나오는 기현상이 발견되었다. Adam이 보폭을 너무 영리하게 조절하다 보니 평평한 지역에서 너무 빨리 타협하고 주저앉는(Sub-optimal) 경향이 있기 때문이다.
  3. AdamW의 등장 (가중치 감소 최적화):
    • 모델이 무거워지는 것을 막는 규제 기법(L2 정규화 / Weight Decay)이 Adam의 수식 안에서 수학적으로 꼬여서 제대로 작동하지 않는 버그가 뒤늦게 발견되었다.
    • 이를 수식적으로 깔끔하게 분리하여 고친 **AdamW (Adam + Weight Decay)**가 등장하였고, 최근 수백억 개 파라미터를 가진 거대 언어 모델(LLM, BERT 이후)을 훈련시킬 때는 기존 Adam 대신 AdamW를 기본으로 탑재하는 것이 새로운 국룰로 자리 잡았다.

📢 섹션 요약 비유: Adam은 알아서 다 해주는 자동변속기(오토) 차량입니다. 99%의 일반인에게는 완벽하지만, 프로 카레이서들이 0.01초를 다투는 극한의 서킷에서는 수동변속기(정교한 SGD)가 여전히 근소하게 더 높은 성능을 냅니다. 게다가 브레이크 시스템(Weight Decay)에 약간 꼬인 버그가 뒤늦게 발견되어, 이를 수리한 2024년식 최신형 모델이 바로 AdamW입니다.