CS231N, EECS 498-007 / 598-005에서 나타나는 개념을 정리하기 위하여 복기용도로 작성하였습니다.
간단히 정리한 내용을 살펴보며 모르는 부분이 있을 때 찾아보는 용도로 보시면 좋을 것 같습니다.
뺄 부분 없이 중요한 부분만 존재하여 분량이 점점 많아지네요..
Alexnet CNN 아키텍쳐의 Last layer인 FC들은 Imagenet의 클래스 분류를 위한 것이므로 삭제를 한다.
직전 layer까지의 weight들은 모두 requires_grad = False로 설정하여 freeze하고, 업데이트에 사용하지 않는다. 피쳐 추출기로 사용하는 것이다.
오른쪽 그래프에서 빨간색 선이 'rule기반으로 피쳐 추출기를 만든 후, 그 위에 linear classification을 한 방법'이다.
초록색과 파란색 선이 'top layer제거하여 피쳐추출기로 활용한 후, 그 위에 linear classification을 한 방법'이다.
이미지넷 pre-trained model을 사용할 수 있다면 관련된 부류의 많은 task들에 많은 데이터 없이도 좋은 성능을 갖을 수 있다.
각 도메인의 SOTA성능보다(파란) imagenet pretrained model을 사용한 방법이(회색) 모든 도메인에서 좋은 성능을 나타내었다.
Fine-Tuning이란 pre-trained model의 weight를 initial weight로 설정하고, 가진 데이터셋에 새로 훈련하는 것이다.
Trick1: feature layer는 학습하지 않고 말단의 추가한 선형레이어를 훈련시킨 뒤, 전체 모델을 함께 Fine-tuning 한다.
Trick2: Learning rate를 사용한다.
Trick3: 연산량을 절약하기 위해 lower level layer들은 그대로 사용할 수 있다.
Case1: ImageNet과 비슷한 데이터 & 매우 적은 데이터(카테고리당 10~100장)
linear CLF를 추가한다.
Case2: ImageNet과 비슷한 데이터 & 매우 많은 데이터(카테고리당 100~1000장)
feature layer의 적은 수의 레이어를 finetune한다.
Case3: ImageNet과 비슷한 데이터 & 매우 적은 데이터(카테고리당 10~100장)
레이어를 추가하거나 finetune으로 성능이 좋을 수 있지만 적용하기 좋은 상황은 아니다.
Case4: ImageNet과 비슷한 데이터 & 매우 많은 데이터(카테고리당 100~1000장)
feature layer의 많은 수의 레이어를 finetune한다.
from scratch 방식으로 학습하는 것과 pre-trained 모델을 사용하는 방식의 결과는 비슷하게 나타나지만 3배 오래걸린다..
데이터가 적을경우 from scratch보다 pretrain-finetune 방식이 더 좋은 성능을 지닌다.
(justin) 결론
참고자료
cs231n 강의 자료
cs231n 한글 강의 자료
EECS 498-007 / 598-005 2019 강의 자료