안녕하세요, 오늘은 딥러닝의 Transfer Learning(전이 학습)에 대해 포스팅하려고 합니다.
이 전이 학습의 결론은 '사전 학습된 가중치를 가지고 미세조정을 통해 원하는 output를 만든다.' 입니다.
1. Transfer Learning 이란
2. Pre-trained Model
3. Fine Tuning (3가지)
4. 마지막 간단 정리
Transfer Learning (전이 학습)
전이 학습이란 Pretrained model's Weight + Fine Tuning ===> Output 이라고 말하고 싶습니다.
전이 학습은 높은 정확도를 비교적 짧은 시간 내에 달성할 수 있기 때문에, Computer Vision(CV) 분야에서 유명한 방법론 중 하나라고 합니다.
CV에서 말하는 전이 학습은 주로 사전학습 된 모델(pretrained model)을 이용하는 것을 의미합니다.
Pre-trained Model
사전학습된 모델이란, 내가 활용하고자 하는 문제와 비슷하면서 엄청 큰 데이터 셋으로 이미 학습되어서 다양한 가중치를 가지고 있는 모델입니다. 그래서 대용량 데이터로 모델을 학습시키는 것은 시간도 시간 연산량도 양.. 이 필요해서, 현재는 관례적으로 이미 공개되어 있는 모델들을 그냥 Import하기만 해서 사용합니다. (ex, Vggnet, GoogleNet, ResNet, SENet, ... 등등)
Fine Tuning
그림1 에서 FC layer 부분을 classifier라고 하는데 fine tuning의 시작은 이 classifier를 없애는 것으로 시작합니다. 그 이유는 앞서 Conv. layer에서 이미 학습된 여러 가중치들이 학습된 가중치가 없는 classifier에 들어가게 된다면 수렴하지 않을 가능성이 높기 때문입니다. 그렇기에, 내 목적에 맞는 새로운 classifier를 추가합니다. 그 후 새롭게 만들어진 나의 모델을 다음 세 가지 전략 중 한 가지 방법을 이용해 fine tuning을 진행하는 것 입니다.
Strategy 1 : 모델 전체를 새로 학습 시키기
이 방법은 pretrained model의 구조만 사용하면서, 내 데이터셋에 맞게 전부 새로 학습시키는 방법입니다. 모델을 처음부터 새로 학습시키는 것이기 때문에 좋은 output이 나올 가능성이 농후하지만, 그만큼 대용량 데이터, 긴 training 시간, 컴퓨터의 능력 등이 많이 요구되는 부분입니다.
Strategy 2 : Conv base의 일부분은 고정, Conv base의 나머지 계층과 classifier를 새로 학습시키기
ex) conv base 70% 고정, (conv base 30% + classifier) 새로 학습
Conv base의 lower layer에서는 지역적이고 일반적인 특징을 추출하고, Higher layer에서는 특유하고 추상적인 특징들을 추출합니다. 이런 CNN의 특성을 이용해서, 우리는 신경망의 파라미터 중 어느 정도까지를 재학습시킬지를 정할 수 있습니다.
만약, 데이터셋이 작고 모델의 파라미터가 많다면, Overfitting될 위험이 있으므로 더 많은 계층을 건들지 않고 그대로 두고,
반면에, 데이터셋이 크고 그에 비해 모델이 작아서 파라미터가 적다면, 오버피팅에 대한 걱정을 할 필요가 없기 때문에 더 많은 계층을 학습시켜서 내가 원하고자 하는 적합한 모델로 발전시킬 수 있습니다.
Strategy 3 : Conv base는 고정, classifier만 새로 학습시키기
이 경우는 보다 극단적인 상황일 때 생각할 수 있는 경우입니다.
conv base 건들지 않고 고정함으로써 feature 추출 메커니즘으로 활용하고, Classifier만 재학습시키는 방법입니다.
컴퓨팅 연산 능력이 부족하거나 데이터 셋이 너무 작을 때, 그리고 내가 바꾸고자 하는 데이터셋이 pretrained model의 데이터셋이 비슷할 때 고려해 볼 수 있는 방법입니다.
여기서 짚고 넘어가야 할 중요한 점은 classifier를 새로 학습시킨다고 임의의 새로운 classifier를 붙이면 안 됩니다.
모든 layer들은 최소 1번 이상은 학습이 완료된 상태여야 합니다.
임의로 새로 가중치가 부여된 FC layer에서는 큰 가중치가 학습될 위험이 있기 때문에 이 가중치로 인해 핵심 내용을 잃을 수도 있게 됩니다.
그림1 에서 Frozen이란, 말 그대로 얼린다는 뜻입니다.
모델을 학습 시킬 때 learning rate = 0 으로 해서 back propagation를 가할 때 학습을 안 하게 만들어서 정해 놓은 부분만 학습 시키게 한다는 의미입니다.
Strategy 3과 다르게, Strategy 1, 2 는 Learning rate(lr)에 대해서 조심해야 할 필요가 있습니다.
lr는 신경망에서 파라미터를 얼마나 재조정할 것인가를 결정하는 하이퍼 파라미터입니다. CNN베이스의 사전학습 모델을 사용할 때에는, 이전에 학습한 내용들을 모두 잊어버릴 위험이 있기 때문에 작은 lr를 사용하는 것이 바람직합니다.
이 learning rate 와 Batch Size에 관련해서 더 자세한 내용은 이 글을 읽어보길 추천합니다.
마지막 간단 정리
"학습시켜놓은 가중치를 그대로 활용하고 싶다."
Conv layer 에는 pretrained model(ex, VggNet)의 가중치(ex, ImageNet DataSet으로 학습시킨 가중치, 1000개의 클래스)를 가져와 사용할 것이고, FC layer에는 내가 원하는 방향으로 미세조정을 하는 것인데, 이 방법이 3가지가 있다.
라고 정리할 수 있겠습니다.
참고 문헌
[1] Learning rate & Batch size
[2] Transfer learning from pre-trained models
[3] Transfer Learning 추가 설명
[4] Trasfer Learning 관련 유튜브 영상 강추강추