optimizer.zero_grad()에 관한 질문입니다
555
작성한 질문수 45
"파이토치로 딥러닝 구현 패턴 이해하기" 강의 7:56 부분에서,
optimizer.zero_grad()는 기존의 연산을 끊어주는 역할을 하고,
이는 강의에서 전에 작성했던
W.detach_().requires_grad_(True)
b.detach_().requires_grad_(True)이 코드와 같은 역할을 한다고 설명해 주셨습니다.
설명을 듣고, pytorch 공식 문서 등에서 관련된 내용들을 찾아보니
"detach는 계산된 값과 동일한 저장 공간을 사용하지만, 계산 기록은 없는 tensor를 반환하여 tensor를 과거 계산 기록으로부터 떼어내는 역할을 한다"
라는 설명을 찾을 수 있었습니다.
그렇다면, 모델 파라미터의 미분값을 0으로 초기화하는 optimizer.zero_grad()는
W.detach_().requires_grad_(True)이 코드와 엄밀히 따지자면 조금 다른 동작을 하는 것으로 이해하였는데요,
'기존의 연산을 끊어준다' 라는 측면에서 조금 동작에 차이가 있다고 보는 것이 맞는지 설명 듣고 싶습니다!
감사합니다
답변 1
2
안녕하세요. 답변도우미입니다.
다음과 같이 zero_grad() source code 에 보시면, 내부적으로 detach_() 동작을 진행하고, gradient 를 0으로 초기화 하였고, 계산은 기존과 같이 계속 기록을 하게 되는 것이라서요. detach_().requires_grad_(True) 도 구현 레벨로 계산 기록은 없는 tensor를 반환하면, 결국 gradient 가 0인 상태로 이후 operation 을 기록하며, gradient 를 계산해주는 것이라서, 결국 동일한 동작을 표현한 것이라고 보시면 어떠실까요? detach를 내부적으로 콜하고 있지만, 이후 코드가 미세하게나마 다를 수는 있지만, 저희가 인지해야할 정도로 의미 있는 차이는 없어보입니다. 또 detach 동작도 구현 레벨로 표현을 한 것이라서, 특별히 달라보이지는 않아서요. 혹시 어떤 부분이 다르다고 생각이 되신다면, dream@fun-coding.org 로 다시 한번 의견을 보내주시면 저희도 다시 고민을 해보겠습니다.
http://pytorch.org/docs/master/_modules/torch/optim/optimizer.html#Optimizer.zero_grad
def zero_grad(self):
"""Clears the gradients of all optimized :class:`Variable` s."""
for group in self.param_groups:
for p in group['params']:
if p.grad is not None:
p.grad.detach_()
p.grad.zero_()감사합니다.
import torch가 안되는 경우는 어떻게 하나요?
0
17
1
강의 필기는 어떻게 하나요?
0
85
1
섹션 5퀴즈 4번 문제 보기 오류로 보임
0
63
1
섹션17 81번이랑 82번 강의가 중복되는 것 같아서 질문드립니다.
0
88
2
강의교안이 안 옵니다
0
80
1
17-2강 Transfer learning 실습 관련 질문
0
134
2
13섹션 강의자료가 없네요^^
0
92
1
강의자료가 없네요.
0
107
2
LSTM 모델 학습 관련한 질문입니다.
0
127
1
MSE LOSS 관련
0
132
1
test시 minibatch 사용?
0
133
1
Average Test loss 계산식 문의
0
101
1
파이토치 설치
0
247
1
[Pytorch 기울기의 누적 곱? 누적 합?]
0
135
1
3d 텐서에서의 축 구분 질문
0
119
1
항상 tensor([0., 0., 0.]) 형식으로만 나오는 이유
0
111
1
강의자료 PDF 다운로드에 관하여
0
132
1
[실무에서 판다스 copy()메서드의 깊은복사 얕은복사 조정 소요가 생길까?]
0
116
1
섹션 다양한 Optimizer 정리하기 중 딥러닝으로 Regression 문제 적용해보기 (House Price Kaggle 문제) 강의에서 오류가 발생합니다.
0
149
1
마지막에 confusion matrix 작성할때
0
157
1
아나콘다를 사용하지 않고 파이토치 사용하는 방법
0
853
1
test data 의 loss 계산식 문의
0
288
1
차원 출력 관련 문의
0
245
1
섹션 7-4 당뇨병
0
388
3





