본문 바로가기
함수 설명/인공지능 (Pytorch)

[PyTorch] 딥러닝 최적화 알고리즘: torch.optim.SGD() 사용 가이드

by First Adventure 2024. 8. 17.
반응형

소개

  torch.optim.SGD는 확률적 경사 하강법(Stochastic Gradient Descent, SGD)을 구현한 PyTorch의 기본 옵티마이저입니다. SGD는 딥러닝 모델의 학습에서 가중치 업데이트를 수행하는 가장 기본적인 방법 중 하나로, 주어진 손실 함수의 기울기를 따라 모델 파라미터를 반복적으로 조정하여 최적의 가중치를 찾습니다.

 

기본 사용법

상세 설명

  • SGD 옵티마이저의 장점
    • 간단한 구조로 이해하기 쉽고 구현이 간편합니다.
    • 확률적 경사 하강법은 큰 데이터셋에서 효과적으로 학습을 수행할 수 있습니다.
    • 모멘텀과 결합하면, 표준 SGD보다 빠르게 수렴하고 진동을 줄일 수 있습니다.
  • SGD의 적용 분야
    • 컴퓨터 비전, 자연어 처리, 강화 학습 등 다양한 딥러닝 작업에서 널리 사용됩니다.
    • 간단하고 계산 비용이 적기 때문에, 작은 모델이나 실험적인 환경에서 주로 사용됩니다.

예시 설명

  • lr (학습률): 가중치 업데이트 시 이동할 스텝 크기를 조정합니다. 기본값은 0.01입니다.
  • momentum: 모멘텀을 사용하여 이전 그래디언트 정보를 반영해 가중치를 업데이트합니다. 기본값은 0입니다.
  • weight_decay: L2 정규화(가중치 감쇠)를 위한 계수로, 과적합을 방지합니다. 기본값은 0입니다.
  • nesterov: 네스테로프 모멘텀(Nesterov momentum)을 사용할지 여부를 지정합니다. 기본값은 False입니다.
  • optimizer = optim.SGD(model.parameters(), lr=0.01)는 학습률 0.01로 SGD 옵티마이저를 설정하여 모델의 파라미터를 최적화합니다.
  • optimizer.step()는 현재 배치에 대한 가중치를 업데이트합니다. 모멘텀, 가중치 감쇠 등 다양한 옵션을 추가하여 더 복잡한 학습 방법을 설정할 수 있습니다.
import torch
import torch.nn as nn
import torch.optim as optim

# 간단한 모델 정의
model = nn.Linear(10, 1)

# SGD 옵티마이저 설정
optimizer = optim.SGD(model.parameters(), lr=0.01)
# optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9, weight_decay=0.0001, nesterov=True)

# 손실 함수 설정
criterion = nn.MSELoss()

# 입력 데이터와 타깃 생성
inputs = torch.randn(10)
target = torch.randn(1)

# 학습 루프
for epoch in range(100):
    optimizer.zero_grad()   # 그래디언트 초기화
    outputs = model(inputs) # 모델의 출력 계산
    loss = criterion(outputs, target) # 손실 계산
    loss.backward()         # 역전파로 그래디언트 계산
    optimizer.step()        # 옵티마이저로 가중치 업데이트

 

라이센스

  PyTorch의 표준 라이브러리와 내장 함수들은 BSD-style license 하에 배포됩니다. 이 라이센스는 자유 소프트웨어 라이센스로, 상업적 사용을 포함한 거의 모든 용도로 사용이 가능합니다. 라이센스와 저작권 정보는 PyTorch의 공식 GitHub 리포지토리에서 확인할 수 있습니다.

 

관련 내용

  [PyTorch] 딥러닝 최적화 알고리즘: torch.optim.Adam() 사용 가이드

  [PyTorch] 딥러닝 최적화 알고리즘: torch.optim.SGD() 사용 가이드

  [PyTorch] 모델 학습을 최적화하는 스케줄러: torch.optim.lr_scheduler.StepLR() 활용법

반응형