ML Background · Sprint 2 준비
Multi-task fine-tuning은 무엇을 같이 배우는가
Apple이 pre-train한 MobileCLIP2-S3/S4 계열 모델을 가져와 우리 랜드마크 데이터셋에 fine-tuning할 때, 이미지 분류와 이미지-텍스트 정렬을 동시에 학습하는 이유와 그에 맞춰 라벨링이 어떻게 바뀌어야 하는지 정리한다.
핵심 결론
Sprint 1 방식은 이미지가 어느 landmark_id인지 맞추는 분류 학습에 가까웠다.
Sprint 2에서 자연어 검색까지 강하게 만들려면 같은 이미지에 대해
분류 정답과 한/영 caption을 함께 제공해,
모델이 “이 사진은 광화문이다”와 “이 사진은 palace gate라는 문장과 가깝다”를 동시에 배우게 해야 한다.
1. Multi-task 방식의 좋은 점
| 좋은 점 | 무슨 의미인가 | 우리 프로젝트에서 좋아지는 부분 |
|---|---|---|
| 이미지 인식 성능을 붙잡는다 | classification loss가 현재 지원 landmark class를 계속 구분하게 만든다. | 사진 입력 시 Top-1/Top-3 후보가 안정된다. |
| 자연어 검색이 모델 내부에서 강해진다 | contrastive loss가 이미지 embedding과 caption embedding을 가까이 둔다. | “돌담 있는 공원”, “palace gate”, “royal shrine” 같은 검색이 keyword 보정에 덜 의존한다. |
| 비슷한 landmark를 더 잘 분리할 수 있다 | hard negative caption과 혼동쌍을 넣으면 유사 class 사이 margin을 키울 수 있다. | 광화문/근정문, 궁궐/사찰, 청와대/궁궐 배경 혼동을 별도 목표로 다룰 수 있다. |
| 텍스트 카탈로그와 모델 학습이 연결된다 | 앱 검색용 문장과 학습 caption이 같은 방향의 supervision이 된다. | 문서화된 라벨링 작업이 곧 검색 품질 개선으로 이어진다. |
2. 실제로 어떻게 학습되는가
한 mini-batch 안에 이미지와 caption이 함께 들어간다고 생각하면 된다. 모델은 같은 행의 이미지-문장을 positive pair로 보고, 다른 행의 이미지-문장은 negative pair로 본다. 동시에 각 이미지가 어느 class인지도 맞춘다.
total_loss =
classification_loss(image_embedding, landmark_id)
+ lambda_text * contrastive_loss(image_embedding, text_embedding)
+ lambda_hard * optional_hard_negative_loss
lambda_text는 두 목표의 힘 조절값이다.
너무 크면 텍스트 정렬은 좋아져도 이미지 분류가 흔들릴 수 있고,
너무 작으면 자연어 검색 개선이 약하다. 보수적으로는 작은 값에서 시작해 validation으로 조절한다.
3. 기존 데이터셋과 무엇이 달라져야 하는가
기존에는 이미지마다 “정답 landmark_id가 무엇인가”가 가장 중요했다. Multi-task에서는 여기에 “이 이미지가 어떤 문장과 같은 의미인가”가 추가된다. 그래서 라벨링은 이미지 라벨링과 caption 라벨링으로 나뉘되, 둘이 같은 record 안에서 연결되어야 한다.
| 영역 | 기존 방식 | Multi-task 방식 | 이유 |
|---|---|---|---|
| 이미지 record | file_name, landmark_id, label_status 중심 |
주 피사체, 배경 landmark, view, quality, source group까지 기록 | 잘못된 positive와 leakage가 contrastive 학습을 더 크게 망칠 수 있다. |
| Caption | 있어도 보조 설명에 가까움 | 학습 supervision으로 사용되는 필수 필드 | caption이 틀리면 이미지와 잘못된 의미를 가까이 학습한다. |
| 언어 | 영어 중심 또는 keyword 보정 중심 | 한국어와 영어를 모두 작성 | 사용자는 한국어로도 검색하고, MobileCLIP 계열은 영어 강점도 유지해야 한다. |
| Hard negative | 실패 후 분석에 가까움 | 라벨 단계부터 confusing_with와 contrast caption으로 기록 |
광화문/근정문처럼 비슷한 pair를 batch 안에서 의도적으로 멀게 할 수 있다. |
| 텍스트 카탈로그 | 앱 검색용 사전 | 앱 검색용 + caption 생성 기준 + 회귀 질의 seed | 검색과 학습이 같은 vocabulary를 공유해야 수정 효과가 쌓인다. |
4. Caption은 어떤 식으로 써야 하는가
Caption은 “예쁜 설명문”이 아니라 모델에게 주는 정답 문장이다. 이미지에 실제로 보이는 시각 단서를 먼저 쓰고, 그 다음 장소의 기능과 이름을 붙인다. 한 이미지에 여러 caption을 둘 수 있지만, 모두 같은 사진과 맞아야 한다.
{
"caption_set": [
{
"caption_type": "name_anchor",
"text_ko": "광화문 사진",
"text_en": "Gwanghwamun Gate photo"
},
{
"caption_type": "visual_feature",
"text_ko": "넓은 광장 앞에 있는 큰 궁궐 문과 흰 돌담, 어두운 기와지붕이 보인다.",
"text_en": "A large palace gate in front of a broad plaza, with white stone walls and dark tiled roofs."
},
{
"caption_type": "contrast_with",
"target": "gyeongbokgung_geunjeongmun",
"text_ko": "근정문과 달리 광화문은 경복궁 바깥쪽의 주 출입문이다.",
"text_en": "Unlike Geunjeongmun, Gwanghwamun is the outer main gate of Gyeongbokgung Palace."
}
]
}
5. 왜 데이터가 많으면 좋은가
데이터가 많다는 것은 단순히 숫자가 늘어나는 것만이 아니다. 모델이 “광화문은 항상 낮 사진 정면만 있다”처럼 좁게 외우지 않고, 야간, 측면, 원거리, 사람 많음, 비 오는 날, crop된 사진까지 같은 의미로 묶을 수 있게 된다.
| 부족한 데이터 | 모델이 배우기 쉬운 잘못된 규칙 | 보강 방향 |
|---|---|---|
| 정면 낮 사진만 많음 | 야간/측면 광화문을 낮은 confidence로 본다. | night, side_exterior, far view를 별도 수집한다. |
| 궁궐 계열 contrast 부족 | 기와지붕과 단청이 보이면 비슷한 class로 몰린다. | 광화문/근정문/덕수궁/창경궁 hard negative를 만든다. |
| OOS/저품질 부족 | 모든 입력을 지원 class 중 하나로 억지로 답한다. | screen capture, blur, noise, 비대상 건축물을 test set으로 분리한다. |
| 한국어 caption 부족 | 한국어 자연어 검색을 keyword 보정에 의존한다. | 한국어 visual/function/contrast caption을 추가한다. |
Sprint 2 권장 실험
- 현재 image-label classification baseline을 고정해 성능과 실패 케이스를 보존한다.
- 각 이미지에 한/영
caption_set을 추가하고, landmark 단위 text catalog와 용어를 맞춘다. - image encoder는 낮은 learning rate, text/embedding head는 조금 더 높은 learning rate로 시작한다.
- classification-only, contrastive-only, multi-task 세 실험을 같은 split으로 비교한다.
- 이미지 Top-1, Top-3, 자연어 검색 Top-3, hard pair margin, OOS 거절률을 따로 본다.
참고해볼만한 자료
| 지식 | 자료 | 읽는 이유 |
|---|---|---|
| MobileCLIP2 | Apple Machine Learning Research: MobileCLIP2 | 우리가 쓰는 MobileCLIP2가 어떤 계열의 image-text model인지 확인하기 좋다. |
| CLIP contrastive 학습 | Learning Transferable Visual Models From Natural Language Supervision | 맞는 이미지-텍스트 쌍을 가깝게 두는 원래 CLIP 학습 원리를 이해할 수 있다. |
| 분류 loss | PyTorch CrossEntropyLoss | 이미지-label classification이 어떤 목표로 class 점수를 학습하는지 확인할 수 있다. |
| Supervised contrastive | Supervised Contrastive Learning | 같은 class는 가깝게, 다른 class는 멀게 만드는 representation learning 관점을 볼 수 있다. |