2020년 10월 7일 수요일

[Machine learning] model.zero_grad() 와 optimizer.zero_grad()

 pytorch를 사용할 때 매 mini-batch 학습마다 model.zero_grad()를 해야한다.

pytorch는 한 mini-batch로 모델을 업데이트 한 후 모델 업데이트에 사용한 gradient를 버리는 것이 아니라 다음 mini-batch 계산에 누적해서 사용한다. 

학습 시 이전 mini-batch를 이용하여 계산한 gradient를 다음 mini-batch에서 계산한 gradient에 누적하면 안되기 때문에 다음 mini-batch를 이용하여 학습을 수행하기 전 이전 mini-batch를 이용하여 계산된 gradient를 초기화시켜주는 단계를 거쳐야한다. 따라서 매 mini-batch 학습마다 model.zero_grad()를 불러와야한다. 

하지만 pytorch 예제들을 보면 어떤 경우에는 model.zero_grad()를 사용하고 어떤 경우에는 optimizer.zero_grad()를 사용한다. 

검색해보니 비슷한 질문에

"model.zero_grad() and optimizer.zero_grad() are the same IF all your model parameters are in that optimizer. I found it is safer to call model.zero_grad() to make sure all grads are zero, e.g. if you have two or more optimizers for one model.”


라는 댓글이 있었다.

model.zero_grad()와 optimizer.zero_grad() 는 같으므로 쓰는 사람에 따라 선호하는 방식을 사용하는 듯 하다. 


출처: https://discuss.pytorch.org/t/model-zero-grad-or-optimizer-zero-grad/28426/5

댓글 없음:

댓글 쓰기