학습을 진행하는 중에 learning rate를 0으로 설정하고 학습을 진행하였는데 성능이 계속 달라지는 것이다.
paramter := parameter - lr*grad
위와 같이 업데이트되는 것이라고 생각했는데 이상했다.
from torch.optim as optim
optimizer = optim.SGD(model.parameters(), lr=0.01, momentum=0.9)
scheduler_cosine = optim.lr_scheduler.CosineAnnealingLR(optimizer, T_max=90)
optimizer를 생성할 때 위와 같이 momentum이 있는 SGD를 사용했기 때문이었다. 이 optimizer는 다음과 같이 parameter가 업데이트 된다.
따라서 을 구하는 과정에서 뿐만아니라 로 각 parameter에 해당하는 모멘텀 값이 추가되기 때문이다.