부스트캠프 AI Tech 4기 강의 정리
오늘은 이전에도 한 번 해봤던 경험이 있는 주제인 Transfer learning (전이 학습)에 대해 배우고, 배운 내용을 정리해 보겠다.
Transfer learning
요즘은 기반 모델(이미 학습된)을 가져와서, 우리의 데이터에 맞게끔 Fine tuning 형태의 알고리즘이 유행이다.
- 그렇게 하기 위해서는 모델의 구조를 알고 있어야 한다.
- 남이 만든 모델을 가져와서 미세조정하는 과정을 배워보자
모델 학습 결과를 공유하려면?
- colab의 경우, 오랜 시간 학습할 경우 런타임이 끊기고, 그럼 결과가 날라가버린다 (colab pro가 있긴 하지만..)
- model.save()를 이용하여 학습의 결과를 저장해보자
model.save()
- 학습의 결과를 저장하기 위한 함수
- 모델 형태(architecture)와 Parameters를 저장
- Early Stopping을 이용하여 학습 도중 최선의 결과를 저장 가능
- pytorch 모델을 저장한다는 의미에서 pt 확장자 이용 (ex. model.pt)
torchsummary.summary
- 모델의 파라미터와 출력 크기 등을 요약해서 보여주는 함수

model.load_state_dict
- 같은 구조의 모델일 때, 이미 저장된 모델의 파라미터등을 load 해올 수 있음

pickle 이용해서 모델 save, load

왜 모델 자체를 저장하는 것이 아닌, state_dict를 이용해 저장할까?

- Pytorch는 내부적으로 Pickle 모듈에 의존한다. 이 때, dictionary 형태는 Pickle과의 호환성이 뛰어나기 때문에 Pickle, Unpickled, 업데이트, 복원등이 가능하다. 그렇기 때문에 더 유연하게 사용하고자 state_dict를 사용한다고 한다.
- Optimizer와 Hyperparameters 등을 dictionary에 key-value 쌍으로 넣어줄 수 있기 때문에 통상적인 dictionary 사용법과 동일하게 불러올 수 있음이 간편하다.
Checkpoints
- 학습의 중간 결과를 저장하기 위한 (최선의 결과) 방법
- earlystopping 기법을 사용할 때 자주 이용
- epoch, loss, metric 값을 지속적으로 저장하며 확인
- 모델의 정보를 epoch과 함께 저장하면 된다.

Transfer learning
- 다른 데이터셋으로 만든 모델을 현재 데이터에 적용 시켜본다.
- 대용량 데이터셋으로 backbone architecture가 잘 학습된 모델을 이용하여 일부만 학습 시키는 방법으로 우리의 데이터에 적용
- 현재 DL에서 가장 일반적인 학습 기법
Freezing
- pretrained model을 활용시 모델의 일부분을 frozen(학습이 되지 않도록)
- back propagation을 전부 시키는 것이 아니라 일부만
- 요즘은 점진적으로 frozen 시키면서 학습하는 방법을 이용하기도 한다.
- requires_grad = False 옵션으로 frozen 시킨다.
학습할 레이어를 넣고 싶다면?
- 이미지넷 데이터 기반의 vgg모델은 출력차원이 1000개이기 때문에, 우리의 데이터의 출력 조건에 맞추어 하나의 Linear layer를 추가해보자
번외 참고 사항
nn.BCEWithLogitsLoss() : 만약 출력층에 나올 값에 sigmoid 함수를 씌워주지 않았다면, WithLogits 이용해서 자동으로 씌워줄 수 있다.


마지막 단계에 input features가 1000이고, output features가 1인 Linear layer 추가된 모습이다.
학습이 잘 완료 되었는지 (파라미터가 업데이트 되었는지) 확인해보자
위 parameters 출력 결과를 보면, frozen한 layer의 parameters는 학습되지 않아 변화가 없는 반면, fine tuning한 layer의 parameters는 변화가 일어난 모습을 확인할 수 있다.
느낀점
- 예전에는 얼마나 허술하게 모델을 만들었었는지 느끼게 됐다...(몰랐던 부분과 까먹었던 부분이 그만큼 많았다.)
- 왜 모델 자체를 저장하지 않고, model.state_dict를 이용하여 저장하는지 알아두면 좋을 것 같다.
- 다시 딥러닝 모델을 전이학습 하게 된다면, 차근차근 잘 확인해가며 작업을 진행해야겠다고 생각했다.
게시글에 쓰인 자료는 Boostcamp AI Tech의 교육 자료를 참고하였습니다.