본문으로 건너뛰기

ε 조절로 SGD와 Adam을 잇는 optimizer 갱신식

ε와 β₂ 조절로 SGD형 갱신과 Adam형 모멘트 정규화를 연결한 코드

이 요약은 AI가 원문을 분석해 생성했습니다. 정확한 내용은 원문 기준으로 확인하세요.

TL;DR

게시물은 ε를 약 1에서 약 0으로 낮추고 β₂ 전이를 적용하면 optimizer의 갱신 구조가 SGD에서 Adam으로 이동한다는 관점을 제시한다. 함께 제공된 Python 코드는 m과 v에 gradient의 1차·2차 모멘트 이동평균을 저장하고, e를 분모 안정화 항으로 갱신한 뒤 p에 weight decay와 정규화된 gradient를 순서대로 적용한다. Bias correction은 약 1,000~2,000 training steps 이후 영향이 작아 생략할 수 있다고 적었지만, 별도의 benchmark 결과는 제시되지 않았다.

실용적 조언

  • 제시된 구현을 검증할 때는 ε, β₂, bias correction 생략 여부를 각각 분리해 동일한 gradient sequence에서 파라미터 갱신을 비교해야 한다. 특히 bias correction을 생략하는 주장은 약 1,000~2,000 steps 이후에 해당하므로 초기 구간과 이후 구간의 결과를 나눠 확인해야 한다. weight decay도 p.mul_(self.decay_factor)로 gradient 갱신보다 먼저 적용되므로 표준 Adam 구현과 적용 순서가 같은지 함께 대조해야 한다.

섹션별 상세

01
게시물은 ε를 약 1에서 약 0으로 낮추고 β₂ 전이를 사용하면 optimizer가 SGD에서 Adam으로 이동한다는 수식적 관점을 제시한다. 코드에서는 gradient 자체가 아니라 m과 v를 각각 1차 모멘트와 2차 원시 모멘트의 이동평균으로 갱신해 Adam식 정규화를 수행한다. 따라서 게시물의 핵심은 두 optimizer를 별개 선택지로만 보지 않고 ε와 모멘트 통계를 통해 연결된 갱신 구조로 다루는 데 있다.
02
코드는 매 step마다 먼저 p에 decay_factor를 곱해 weight decay를 적용한 다음 m을 v의 제곱근과 e의 합으로 나눈 값을 학습률과 함께 파라미터에 반영한다. e 역시 β₂와 ε을 사용해 갱신되며, 게시물은 이 항이 분모의 안정화와 ε 전이에 관여하는 구조로 제시한다. 기본값은 lr=3e-4, weight_decay=0.01, betas=(0.9, 0.999), eps=1e-8이다.
03
게시물은 bias correction 항을 분자와 분모에서 생략해도 약 1,000~2,000 training steps 이후 영향이 작아진다고 적었다. 이는 초기 0 초기화 모멘트의 편향을 보정하는 항이 장기 학습 구간에서는 상대적으로 덜 중요하다는 전제에 따른 단순화다. 구현은 공개되지 않은 작업인 Symphony-S2 저장소 링크와 함께 제시됐지만, 별도의 benchmark 수치나 비교 실험 결과는 포함하지 않는다.

이미지 분석

ε와 β₂ 변화에 따라 optimizer 갱신식이 SGD에서 Adam으로 이어지는 관계를 나타낸 수식 이미지이다.
Diagram

이미지는 게시물의 중심 주장인 ε 조절과 β₂ 기반 전이를 수식으로 시각화한다. 본문 코드는 m과 v의 이동평균, e의 갱신, weight decay를 순서대로 계산해 이 갱신식을 구현하며, 이미지와 코드는 optimizer 간 연결 구조를 함께 전달한다.

ε와 β₂ 변화에 따라 optimizer 갱신식이 SGD에서 Adam으로 이어지는 관계를 나타낸 수식 이미지이다.

용어 해설

편향 보정(Bias Correction)
초기 학습 단계에서 0으로 초기화된 모멘트 추정치가 실제 gradient 통계보다 작게 잡히는 문제를 보정하는 항이다. 게시물은 약 1,000~2,000 step 이후 영향이 작아져 분자와 분모에서 생략할 수 있다고 설명한다.
가중치 감쇠(Weight Decay)
매 업데이트 전에 파라미터를 일정 비율로 줄여 과도한 가중치 증가를 억제하는 정규화 방식이다. 코드에서는 λ* = 1 - αₗᵣ · λ를 감쇠 계수로 두고 p를 먼저 곱한 뒤 gradient 기반 갱신을 적용한다.
모멘트 추정치(Moment Estimates)
optimizer가 gradient의 이동평균 통계를 저장해 업데이트 방향과 크기를 조정하는 값이다. 코드의 m은 gradient의 1차 모멘트, v는 gradient 제곱의 2차 원시 모멘트이며 β₁과 β₂가 각각 두 추정치의 갱신 비율을 결정한다.

코드 예제

python
class Adam(optim.Optimizer):
    def __init__(self, params, lr=3e-4, weight_decay=0.01, betas=(0.9, 0.999)):
        defaults = dict(lr=lr, betas=betas)
        super().__init__(params, defaults)
        self.wd = weight_decay
        self.lr = lr
        self.beta1, self.beta2 = betas
        self.beta1_, self.beta2_ = 1-self.beta1, 1-self.beta2
        self.decay_factor = 1.0 - self.lr * self.wd
        self.eps = 1e-8

    @torch.no_grad()
    def step(self):
        for group in self.param_groups:
            for p in group['params']:
                if p.grad is None:
                    continue

                grad = p.grad
                state = self.state[p]
                if len(state) == 0:
                    state['m'] = torch.zeros_like(p, memory_format=torch.preserve_format)
                    state['v'] = torch.zeros_like(p, memory_format=torch.preserve_format)
                    state['e'] = torch.tensor(1-self.eps, device=p.device, dtype=p.dtype)

                m = state['m']
                v = state['v']
                e = state['e']

                # Update biased first moment estimate
                m.mul_(self.beta1).add_(grad, alpha=self.beta1_)
                # Update biased second raw moment estimate
                v.mul_(self.beta2).addcmul_(grad, grad, value=self.beta2_)

                e.mul_(self.beta2).add_(self.eps, alpha=self.beta2_)

                # Update parameters
                p.mul_(self.decay_factor).addcdiv_(m, v.sqrt().add_(e), value=-self.lr)

Adam의 1차·2차 gradient 통계를 갱신하고 weight decay를 적용한 뒤 파라미터를 업데이트하는 핵심 구현이다.

언급된 리소스

AI 분석 전체 내용 보기

AI 요약 · 북마크 · 개인 피드 설정 — 무료

출처 · 인용 안내

원문 발행 2026. 08. 28.수집 2026. 08. 28.출처 타입 REDDIT

인용 시 "요약 출처: AI Trends (aitrends.kr)"를 표기하고, 사실 확인은 원문 보기 기준으로 진행해 주세요. 자세한 기준은 운영 정책을 참고해 주세요.