[PyTorch] AutoGrad & Optimizer

hj choi·2022년 9월 27일
0

AI

목록 보기
9/27

AutoGrad & Optimizer

torch.nn.Module

  • 딥러닝을 구성하는 Layer의 base class
  • Input, Output, Forward, Backward 이 4가지를 torch.nn.Module안에서 모두 정의해야함
  • 학습의 대상이 되는 parameter(tensor) 정의

nn.Parameter

  • Tensor 객체의 상속 객체
  • nn.Module 내에서 attribute가 될 때는 required_grad = True(gradient를 계산할 수 있는 변수로 자동으로 지정)
  • 우리가 직접 지정할 일은 잘 없음 : 대부분의 layer에는 weights 값들이 지정되어 있음

Backward

  • Layer에 있는 Parameter들의 미분을 수행
  • Forward의 결과값(model의 output=예측치)과 실제값간의 차이(loss)에 대해 미분을 수행
  • 해당 값으로 Parameter 업데이트
for epoch in range(epochs):
	``````
    # Clear gradient buffers because we don't want any gradient from previous epoch to carry forward
    optimizer.zero_grad()
    
    #get output form the model, given the inputs
    outputs = model(inputs)	#forward를 불러오는 코드
    
    #get loss for the predicted output
    loss = criterion(outputs, labels)
    print(loss)
    # tet gradients w.r.t to parameters
    loss.backward()
    
    #update parameters
    optimizer.step()
    `````
- optimizer.zero_grad() : 우리가 학습할 때 gradient값이 업데이트가 되므로 이전의 gradient값이 지금의 학습에 영향을 주지 않게 하기 위해 초기화 하는것
  • outputs = model(inputs) # outputs : y^\hat{y}
  • loss = criterion(outputs, labels) # outputs : y^\hat{y}, labels : yy
  • loss.backward() : 미분
  • optimizer.step() : weight값이 업데이트

Backward from scratch

  • 실제 backward는 Module 단계에서 직접 지정가능하지만 Auto Gradient를 해주기 때문에 사용 x
  • Module에서 backward와 optimizer오버라이딩
  • 사용자가 직접 미분 수식을 써야하는 부담 -> 쓸일은 없으나 순서는 이해할 필요가 있음

0개의 댓글