Fine tuning 이란?
pre-trained 모델을 새로운 Task에 적용시키는 과정을 말한다.
그 과정은 아래와 같이 분류할 수있다.
1. 새 데이터를 통해 모델 파라미터를 업데이트
2. 새 Task에 맞게 모델 구조 변형
이 글과 읽으면 좋은 글
이번 포스팅에서는 Fine Tuning(미세조정)을 효과적으로 할 수 있는 아이디어를 제시하고자 한다.
![[딥러닝] Fine Tuning(미세 조정) 꿀 tip - 이 글과 읽으면 좋은 글 4가지 전략](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
크게 4가지 케이스로 분류 가능하다.
1) 새 데이터셋이 클 경우
(1) pretrained 데이터와 유사성이 크다.
![[딥러닝] Fine Tuning(미세 조정) 꿀 tip - 이 글과 읽으면 좋은 글 - 1) 새 데이터셋이 클 경우 pretrained 데이터와 유사성이 클경우](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
가장 좋은 상황으로 모든 옵션이 가능하다.
feature extractor
뒷부분과 classifier
를 학습하길 추천한다.
(나머지는 freeze)
why?
- feature extractor
가장 뒷부분이 해당 이미지의 특징을 가장 많이 가지고 있기 때문이다.
- 기존데이터와 비슷하기 때문에 전체 레이어를 학습시키는 건 비효율적이다.
(2) pretrained 데이터와 유사성이 작다.
![[딥러닝] Fine Tuning(미세 조정) 꿀 tip - 이 글과 읽으면 좋은 글 - 1) 새 데이터셋이 클 경우 전체모델 학습](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
모델 전체를 학습할 것을 추천한다.
why?
- 데이터셋 크기가 크기 때문에 오버 피팅 가능성이 낮다.
- 기 학습된 weights 데이터 자체도 유용하게 사용가능하다.
2) 새 데이터셋이 작을 경우(1000장 이하)
(1) pretrained 데이터와 유사성이 크다.
![[딥러닝] Fine Tuning(미세 조정) 꿀 tip - 이 글과 읽으면 좋은 글 - 2) 새 데이터셋이 작을 경우(1000장 이하) pretrained 데이터와 유사성이 클 경우](http://t1.daumcdn.net/tistory_admin/static/images/no-image-v1.png)
classifier
만 학습하고 feature extractor
부분은 freeze 한다.
why?
복잡한 모델일수록 input 데이터의 작은 특징을 다 잡아낸다. 문제는 데이터양이 small 하다는 거다.
학습한 데이터의 feature가 모든 데이터의 feature를 대변한다고 모델은 착각한다.
즉, 오버피팅이 발생된다.
(2) pretrained 데이터와 유사성이 작다.
![[딥러닝] Fine Tuning(미세 조정) 꿀 tip - 이 글과 읽으면 좋은 글 - 2) 새 데이터셋이 작을 경우(1000장 이하) 일부 레이어만 freeze](https://blog.kakaocdn.net/dn/b7qfIf/btrUIfV31nX/WRyPLxsVqVNP4QJblp4irk/img.png)
데이터가 small 한데 유사성까지 없다.
아주 최악의 상황이라 할 수 있다.
feature extractor
중 일부 layer를 학습시키고 나머지는 freeze 해야 한다.
문제는 이 균형을 찾기가 상당히 어렵다.
학습시키는 layer가 많아지면 바로 오버피팅에 빠질 것이고, 적어지면 전혀 학습을 못할 테니 말이다.
이때는 data augmentation
기법을 통해 데이터 늘릴 방법을 모색해야 한다.
'머신러닝,딥러닝 > 딥러닝' 카테고리의 다른 글
[pytorch] 모델 save/load 하는 방법 (0) | 2022.12.29 |
---|---|
[pytorch] Subset 사용법 정리 (0) | 2022.12.29 |
[pytorch] pretrained model 쉽게 사용하는 방법 (0) | 2022.12.26 |
[pytorch] nn.Dropout inplace 역할은 무엇일까? (0) | 2022.12.23 |
[pytorch] model.eval() vs torch.no_grad() 차이 (1) | 2022.12.21 |
댓글
꼬예님의
글이 좋았다면 응원을 보내주세요!
이 글이 도움이 됐다면, 응원 댓글을 써보세요. 블로거에게 지급되는 응원금은 새로운 창작의 큰 힘이 됩니다.
응원 댓글은 만 14세 이상 카카오계정 이용자라면 누구나 편하게 작성, 결제할 수 있습니다.
글 본문, 댓글 목록 등을 통해 응원한 팬과 응원 댓글, 응원금을 강조해 보여줍니다.
응원금은 앱에서는 인앱결제, 웹에서는 카카오페이 및 신용카드로 결제할 수 있습니다.