일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |
- python
- Artificial Intelligence
- 설명가능한
- 코딩 테스트
- AI
- 머신러닝
- coding test
- SmoothGrad
- 설명가능한 인공지능
- Deep learning
- 인공지능
- 딥러닝
- GAN
- 시계열 분석
- 코딩테스트
- Interpretability
- grad-cam
- Unsupervised learning
- cs231n
- 메타러닝
- meta-learning
- 기계학습
- Class activation map
- Explainable AI
- Cam
- keras
- 백준
- xai
- Score-CAM
- Machine Learning
- Today
- Total
iMTE
Transfer Learning and Fine-tuning Convolutional Neural Networks 본문
Transfer Learning and Fine-tuning Convolutional Neural Networks
Wonju Seo 2019. 3. 2. 22:01Reference :
http://cs231n.github.io/
Transfer Learning
실제로, 충분한 크기의 data set을 갖는 것은 상대적으로 드물기 때문에 전체 ConvNet을 처음부터 학습시키는 경우는 거의 없다. (그 많은 parameter를 tuning 해야한다.) 대신, 매우 큰 data set을 가진 data set로부터 ConvNet을 pre-training한 다음에, 새로운 작업에 적용시키는 방법이 Transfer Learning 이다.
1. ConvNet as fixed feature extractor : ImageNet에서 미리 구성된 ConvNet을 사용하고 마지막으로 fully connected layer를 제거한 다음에 나머지 부분을 새 data set의 fixed feature extractor로 사용한다. 이미지에서 계산된 feature를 CNN code라고 한다. 그리고 추출된 code를 사용해서 linear classifier를 학습시킨다.
2. ConvNet fine tuning : 새로운 data set의 ConvNet 상단에서 classifier를 교체하고, re-training하는 것 뿐만 아니라 backpropagation을 계속함으로써 pre-defined networks의 weights을 fine-tuning 하는 것이다. ConvNet의 모든 layer를 fine-tuning하거나 이전 layer 중 일부 weights을 고정하고 networks의 일부 상위 layer만 fine-tuning할 수 있다. (전체 fine-tuning하는 경우, over-fitting문제가 발생할 수 있다.)
3. Pre-trained model : ConvNet은 ImageNet의 여러 GPU로 training 시키는 데 2~3주가 걸리므로 networks를 fine-tuning 할 수 있도록 model의 check point를 공개하는 것이 일반적이다.
When and how to fine-tune?
새로운 data set에서 수행해야하는 transfer learning의 유형은 어떻게 결정하는가? 가장 중요한 두가지 요소는 1) 새로운 data set의 크기와 2) 원본 data set과의 유사도이다.
1. New data set은 작고, original data와 유사한 경우 : data가 작기 때문에 ConvNet을 과도하게 fine-tuning하는 것은 좋지 않다. New data가 original data와 유사하기 때문에 ConvNet의 상위 수준 기능이 이 new data set과 관련이 있다고 기대할 수 있다. 따라서, 마지막 linear classifier를 학습시키는 것이 좋다.
2. New data set이 크고, original data와 유사한 경우 : 더 많은 data를 보유하고 있기 때문에, 전체 network를 fine-tuning하려고 해도 괜찮다.
3. New data set은 작지만, original data와 매우 다른 경우 : data가 작기 때문에 linear classifier만 학습시키는 것이 좋다. data의 set이 매우 다르므로 더 많은 data set 관련 기능을 포함하는 classifier의 networks의 상단에서 training하는 것이 안좋다. 따라서, network의 초기 단계에서 SVM classifier를 활성화 하는 것이 더 효과적이다.
4. New data set이 크고 original data와 매우 다른 경우 : data set이 매우 크기 대문에 ConvNet을 처음 부터 교육 할 여력이 있다고 예상할 수 있다. 그러나 실제로는 pre-trained network의 weight로 초기화하는 것이 매우 유용하다.
Practical advice
Transfer learning을 수행할 때 유의해야할 몇 가지 사항이 있다.
1. Constraints from pre-trained models : pre-trained networks를 사용하는 경우 new data set에 사용할 수 있는 architecture 측면에서 약간 제한 될 수 있다. (즉, layer의 neuron size등의 크기가 일치해야 transfer learning 할 수 있다.)
2. Learning rate : new data set의 class score를 계산하는 새로운 linear classifier에 대한 (무작위로 초기화 된) weight과 비교하여 fine-tuning 중인 ConvNet weight에 대해 더 작은 학습 속도를 사용하는 것이 일반적이다. 이는 pre-trained ConvNet의 weight이 상대적으로 좋을 것이라고 기대하기 때문에 빠르게 그리고 너무 많이 왜곡하지 않도록 learning rate를 조절하는 것이 중요하다.
'Deep learning study > CS231n' 카테고리의 다른 글
Understanding and Visualizing Convolutional Neural Networks (0) | 2019.03.02 |
---|---|
Convolutional Neural Networks: Architectures, Convolution / Pooling Layers (0) | 2019.03.02 |
Neural Networks Part 3: Learning and Evaluation (0) | 2019.03.02 |
Neural Networks Part 2: Setting up the Data and the Loss (0) | 2019.03.02 |
Neural Networks Part 1: Setting up the Architecture (0) | 2019.03.01 |