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):
``````
optimizer.zero_grad()
outputs = model(inputs)
loss = criterion(outputs, labels)
print(loss)
loss.backward()
optimizer.step()
`````
- optimizer.zero_grad() : 우리가 학습할 때 gradient값이 업데이트가 되므로 이전의 gradient값이 지금의 학습에 영향을 주지 않게 하기 위해 초기화 하는것
- outputs = model(inputs) # outputs : y^
- loss = criterion(outputs, labels) # outputs : y^, labels : y
- loss.backward() : 미분
- optimizer.step() : weight값이 업데이트
Backward from scratch
- 실제 backward는 Module 단계에서 직접 지정가능하지만 Auto Gradient를 해주기 때문에 사용 x
- Module에서 backward와 optimizer오버라이딩
- 사용자가 직접 미분 수식을 써야하는 부담 -> 쓸일은 없으나 순서는 이해할 필요가 있음