일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
- 전이학습
- 웹 표준 사이트 만들기
- ssafy 7기
- SSAFY 8기
- 삼성청년sw아카데미
- 프로그래머스 고득점 kit
- 백준7576 bfs
- ssafy 7기 합격
- dfs
- SWEA
- 코딩 교육
- 알고리즘
- 백준
- 삼성 청년 SW 아카데미
- ssafy 7기 교수님
- SSAFY
- Learning
- SSAFYcial
- SSAFY 입학식
- DenseNet
- pytorch
- 이코테
- DP
- 프로그래머스
- 코딩교육
- 싸피 7기 입학식
- bfs
- React
- 유니온 파인드
- git
- Today
- Total
개미의 개열시미 프로그래밍
[4주차] 전이학습(Transfer Learning) <이론 정리편> 본문
먼저, 전이학습을 공부하려는 이유는 이번 백마인턴의 주제가 유사 이미지 분류 개발이며 코드의 큰 틀은 전이학습구조로 이루어지기에 과제를 진행하기 위해 꼼꼼히 이해하는 단계가 필요하다고 생각했습니다.
전이학습이란(=Transfer Learning)
정의 : '특정 Task 또는 도메인에서 얻은 모델을 다른 Task에 적용하는 기술을 뜻함'
즉, 이미 dataset(A Task)에 학습이 진행된 pretrained model의 가중치(weight)를 가져와서 다른 dataset(B Task)에 적용을 하는 것으로 이해할 수 있습니다.
전이학습을 사용하는 특징으로는 세가지가 있습니다.
- 적은 데이터셋을 사용하여 모델 학습
- 대부분의 경우 전이학습한 모델이 처음부터 쌓은 모델보다 성능이 좋다.
- 시간이 절약이 된다.
처음에 위의 특징을 보고 2번이 이해가 되지 않았습니다.. 왜 내가 다루고자하는 데이터셋이 특정 Task에 맞게 학습된 모델을 가져와서 적용을 하는데 처음부터 쌓은 모델보다 성능이 좋을까? 라는 생각이었습니다.
의문에 대한 해답은 딥러닝은 "계층적인 특징"을 "스스로"학습한다. 라는 점입니다. 모델의 초기 low level layer는 일반적인(general) feature를 추출하고 모델이 쌓일수록 high level에서는 구체적인(specific)한 특징을 추출해내는 고도화된 학습이 이루어집니다. 따라서 초기 layer의 feature들은 학습할 때 재사용해도 되지만 후반부에 위치한 layer의 feature들은 재학습이 필요하다는 뜻입니다. 위 이미지를 보면 level단계 별 features의 특징을 볼 수 있습니다. low level features들은 단순 곡선인 것을 확인 가능합니다.
예를 들어 쉽게 설명을 하면 MNIST와 같은 데이터셋에 따라 학습을 시킨 모델의 경우, 초기 layer는 직선이나 곡선정도를 추출할 것이고 이렇게 추출된 feature map은 한글이나 영어문자에 대한 데이터셋에서도 효과적으로 재사용할 수 있다고 추측하는 것입니다.
위에 대한 의문은 이론을 정리하면서 이해하려는 것보다 직접 구현을 하면서 더욱 이해를 할 수 있었고 <실습>에 대한 내용은 다음 포스팅에서 다루도록 하겠습니다.
특징을 알아봤다면 전이학습을 사용하는 이유는 무엇일까?
= CIFAR-10, ImageNet 등 범용 데이터를 사용하는 경우가 아닌 이미지 데이터 자체를 수집하기 어려운 경우 입니다.
위 내용은 전이학습의 특징의 1번에 해당하는 내용이기도 합니다.
전이학습을 이해하는데 있어 세가지의 주요 키워드에 대해서 알아보겠습니다. 이 내용은 cs231n노트에서 이해한 내용을 다뤘습니다.
- ConvNet as fixed feature extractor(=고정 기능 추출기)
처음에는고정기능추출기라는 용어를 이해하는데 힘들었던 것 같습니다.. 하지만 이해를 한다면 왜 고정기능추출기이라고 불리는지 금방 이해할 수 있습니다. 예를 들어 어느 특정 데이터셋에 대해 이미 학습된 ConvNet 모델을 가져온 후 위에 특징 2번에서 말했듯 초기 layer는 고정하고 마지막 Classifier부분을 제거하고 새로 분류하고 자하는 데이터셋의 label의 수에 맞게 초기화 해주는 것입니다. - Fine-tuning the convNet(=미세조정)
두 번째 키워드인 Fine-tuning은 고정된 부분도 학습을 재진행할 수 있지만 교체한 마지막 fc(fully-connected)부분만 다시 재학습을 시켜주는 것 뿐만 아니라 역전파를 계속하는 것을 뜻하기에 '미세조정'이라는 말을 쓴 것 같습니다. 참고로 ConvNet의 모든 계층을 fine tuning하거나 초기 layer 중 일부를 고정상태로 유지할 수 있습니다. 초기 layer 중 일부를 고정하는 것은 overfitting문제를 방지하기도 합니다. - Pretrained models
3번에 대한 내용은 cs231n노트에서 확실하게 이해하지 못했습니다... 나름대로 해석을 해보자면 model의 weight를 공유해서 fine-tuning하는 것이 시간이 절약된다는 것을 말하고 싶었던 것 같습니다.
다음은 어떻게 fine-tuning을 해야하는지에 대한 4가지 시나리오에 대한 내용이며 가장 중요한 두 가지 요소는 아래와 같습니다.
- 데이터셋의 크기
- pretrained된 모델에 사용한 데이터셋과의 유사도
New Dataset | 크기 | 유사도 | fine-tuning 적용여부 |
A | small | high | 데이터셋이 너무 작아 ConvNet의 overfitting문제를 해결하려고 fine-tuning을 하는 것은 좋지 않은 생각이며 원본 데이터셋과 유사도가 높기때문에 higher-level의 feature가 새 데이터셋과 관련이 있을 것으로 예상되어 linear classifier만 train시키는 쪽으로 생각하면 됩니다. |
B | small | low | linear classifier만 학습하는 것이 좋은 방법입니다. 또한 데이터셋이 매우 다르기에 후반부의 layer만 fine-tuning하는 것은 좋은 방법이 아니며 초기 layer에서 재학습하는 것이 효과적일 수 있습니다. |
C | big | high | 이 경우는 문제가 되는 부분이 없습니다. 다만 fine-tuning만 해주면 overfit하지 않을 것이라는 확신만 있을 뿐입니다. |
D | big | low | fine-tuning 수행의미가 없다고 생각합니다. 처음 부터 모델링을 만드는 것이나 마찬가지 이기 때문입니다. |
마지막으로 전이학습을 구현할 때 유의해야 할 두가지 사항입니다.
- Pretrained model의 제약
pre-trained된 모델에 새로운 데이터셋을 적용시킬때 모델에서 layer를 초기화는데 제한이 될 수 있습니다. 하지만 일부변경은 가능합니다. - Learning rate
새로운 데이터셋의 클래서를 계산하는 새로운 linear classifier의 weight와 비교하여 fine-tuning 중인 ConvNet weight에 대해 더 작은 learning rate를 사용하는 것이 일반적입니다. 그 이유는 ConvNet weigth가 상대적으로 좋은 편이라고 예상하기 때문에 너무 성급하게 많이 변하는 것을 자제해야합니다.
<이론정리>는 여기까지 정리하도록 하겠습니다. 앞으로 본글에서 부족한 부분은 주기적으로 채워주려고 합니다.
<참고자료>
cs231n.github.io/transfer-learning/
'인턴쉽 > 동계백마인턴쉽(2021)' 카테고리의 다른 글
[5주차] '유사 이미지 분류' Trainer코드 제작 (0) | 2021.02.08 |
---|---|
[4주차] 전이학습(Transfer Learning) <실습 정리편> (0) | 2021.02.08 |
[2~3주차] DenseNet <이론 정리편> (0) | 2021.02.08 |
[1주차] 환경세팅하기 (Anaconda + PyTorch) (1) | 2021.02.08 |
동계백마인턴쉽(+플랜아이) 시작 (2) | 2021.02.08 |