[딥러닝] 이상하게 길게 보면 학습이 되는 것 같긴 한데 영 상태가 이상할 때 해결방법

[딥러닝] 이상하게 길게 보면 학습이 되는 것 같긴 한데 영 상태가 이상할 때 해결방법

이런 식으로 수십 epoch 이후에는 성능 향상이 되기는 하는데 단기적으로는 심지어 loss가 늘어나기도 하는 경우가 있다. (가장 처음 loss의 1.5배 이상으로 10epoch 이상 유지)

의심해볼 만한 걸로는

  1. criterion 제대로 나오는지 점검(왠만하면 멀쩡할 것이다)
  2. learning rate, optimizer가 잘못되었나 점검(lr 너무 높으면 수렴이 힘듬)
  3. 2번과 더불어 scheduler도 점검(lr이 이상하게 변하면 안됨)

이런 걸 다 해봤지만 별반 답이 나오지 않았고

4. training data sampling이 shuffle되서 나오는지 확인

training data sampling을 shuffle하지 않고 했던 게 문제였다.

DDP에서 DDP 안 쓰는 걸로 옮기다 dataloader에서 실수로 shuffle=True를 빼먹은 건 맞는데, 그게 이 정도로 큰 영향을 줄지는 전혀 몰랐다. 지금 위 사진만 해도 수십 epoch(50 epoch 이상) 후에야 성능이 그나마 향상이 되는 게 보이는데, 지금 저거랑 똑같은 lr 설정으로는 shuffle을 제대로 했으면 단 1 epoch 후에도 GAP가 0.97까지 올라가는 게 정상이다. pretrained model을 가져와 그렇게 되도록 lr을 조정했기 때문이다.

혹시 삽질하고 있는 누군가에게 도움이 되기를 빈다.