도함수로 모델 파라미터 업데이트하기

PyTorch로 배우는 딥러닝 입문

Jasmin Ludolf

Senior Data Science Content Developer, DataCamp

도함수 비유

$$

도함수는 곡선의 기울기를 나타냅니다

$$

  • 가파른 기울기(빨간 화살표):
    • 큰 이동, 도함수 큼
  • 완만한 기울기(초록 화살표):
    • 작은 이동, 도함수 작음
  • 골짜기 바닥(파란 화살표):
    • 평평함, 도함수 0

$$

골짜기 이미지

PyTorch로 배우는 딥러닝 입문

볼록 vs 비볼록 함수

이는 볼록 함수입니다

볼록 함수 예시

이는 비볼록 함수입니다

전역 최소값이 표시된 비볼록 함수 예시

PyTorch로 배우는 딥러닝 입문

도함수와 모델 학습 연결

  • 학습 중 순전파에서 손실을 계산합니다

$$ 손실 계산

PyTorch로 배우는 딥러닝 입문

도함수와 모델 학습 연결

  • 그래디언트는 손실을 최소화하고 층의 가중치바이어스를 조정합니다
  • 층이 조정될 때까지 반복

$$ 그래디언트 계산

PyTorch로 배우는 딥러닝 입문

역전파 개념

$$

  • 세 개 층으로 된 네트워크를 가정합니다:

    • $L2$의 손실 그래디언트부터 시작
    • $L2$로 $L1$ 그래디언트 계산
    • 모든 층에 반복 ($L1$, $L0$)

역전파 다이어그램

PyTorch로 배우는 딥러닝 입문

PyTorch에서의 역전파

# 순전파 실행 
model = nn.Sequential(nn.Linear(16, 8),
                      nn.Linear(8, 4),
                      nn.Linear(4, 2))
prediction = model(sample)


# 손실과 그래디언트 계산 criterion = CrossEntropyLoss() loss = criterion(prediction, target) loss.backward()
# 각 층의 그래디언트 확인
model[0].weight.grad
model[0].bias.grad
model[1].weight.grad
model[1].bias.grad
model[2].weight.grad
model[2].bias.grad
PyTorch로 배우는 딥러닝 입문

모델 파라미터 수동 업데이트

# 학습률은 보통 작게 설정
lr = 0.001

# 가중치 업데이트
weight = model[0].weight
weight_grad = model[0].weight.grad


weight = weight - lr * weight_grad
# 바이어스 업데이트 bias = model[0].bias bias_grad = model[0].bias.grad
bias = bias - lr * bias_grad

$$

  • 각 층의 그래디언트 접근
  • 학습률을 곱함
  • 결과를 가중치에서 뺌
PyTorch로 배우는 딥러닝 입문

경사하강법

  • 비볼록 함수에는 경사하강법을 사용합니다

  • PyTorch는 옵티마이저로 이를 단순화합니다

    • 확률적 경사하강법(SGD)
import torch.optim as optim

# 옵티마이저 생성
optimizer = optim.SGD(model.parameters(), lr=0.001)

# 파라미터 업데이트 수행 optimizer.step()
PyTorch로 배우는 딥러닝 입문

연습해 봅시다!

PyTorch로 배우는 딥러닝 입문

Preparing Video For Download...