Learning Rate = 학습률
Weight를 한 번 업데이트할 때 얼마나 크게 바꿀지 정하는 값.
기본 개념:
정리:
너무 크면:
너무 작으면:
Gradient = Loss를 줄이기 위해 Weight를 어느 방향으로 바꿔야 하는지 알려주는 미분값
즉 방향과 보폭에서:
Gradient
→ Weight를 어느 방향으로 수정할지
Learning Rate
→ 얼마나 크게 수정할지
autograd = 자동 미분 기능
PyTorch가 순전파 과정의 계산을 기억하고 있다가:
loss.backward()
를 실행하면 각 Weight와 Bias의 Gradient를 자동으로 계산한다.
결과는 각 Parameter의:
param.grad
에 저장된다.
핵심:
autograd 덕분에 미분식을 사람이 직접 계산할 필요가 없다.
zero_grad()optimizer.zero_grad()
역할:
새로운 backward() 전에 이전 Gradient를 초기화
PyTorch는 Gradient를 기본적으로 누적하기 때문에 반드시 주의해야 한다.
이전 Gradient
+
새 Gradient
가 섞이지 않게 하기 위해 사용.
중요 암기:
새로운
backward()수행 전zero_grad()로 이전 Gradient를 지운다.
중요 순서:
1. 데이터 입력
2. 순전파
3. 손실 계산
4. Gradient 초기화
5. 역전파
6. Parameter 업데이트
코드로:
optimizer.zero_grad()
prediction = model(x)
loss = criterion(prediction, target)
loss.backward()
optimizer.step()
prediction = model(x)
현재 Weight와 Bias를 이용해서 Prediction을 계산.
Input
↓
Model
↓
Prediction
loss = criterion(prediction, target)
Prediction과 실제 정답 Target의 차이를 계산.
Prediction
vs
Target
↓
Loss
Loss가 작을수록 예측이 정답에 가까운 것.
backward()loss.backward()
역할:
Loss를 기준으로 각 Parameter의 Gradient를 계산
여기서 PyTorch의 autograd가 자동으로 미분을 수행한다.
Loss
↓
backward()
↓
Gradient 계산
optimizer.step()optimizer.step()
역할:
계산된 Gradient를 이용해서 실제 Weight와 Bias를 수정
즉:
backward()
→ Gradient 계산
optimizer.step()
→ Parameter 실제 업데이트
둘의 역할을 구분하면:
Autograd
→ 미분 / Gradient 계산
Optimizer
→ Gradient를 이용해 Weight와 Bias 수정
그래서 사람이 직접:
Weight를 얼마나 올릴까?
얼마나 내릴까?
미분값은 얼마지?
를 계산하지 않아도 된다.
Input
↓
Forward
↓
Prediction
↓
Target과 비교
↓
Loss
↓
zero_grad()
↓
backward()
↓
Autograd가 Gradient 계산
↓
optimizer.step()
↓
Weight / Bias 수정
↓
다시 Forward
이 과정을 반복하면서 모델이 학습한다.