SSAFY 16기 AI 챌린지는 이미지와 질문을 보고 4지선다 중 정답을 고르는 VQA(Visual Question Answering) 과제였습니다. 저는 팀에서 모델 학습과 정제를 맡았습니다. 이 글은 모델 자체보다, 어떤 실험 결과를 최종 제출에 넣을지 판단한 기준에 대한 기록입니다.
점수 변화
| 제출 | Public 점수 | 변화 |
|---|---|---|
| Qwen 4B 베이스라인 | 0.94608 | 출발점 |
| Qwen 27B 단독 | 0.95591 | +0.00983 (모델 규모) |
| 27B + 4B 확률 앙상블 | 0.95918 | +0.00327 |
| 질문 유형별 프롬프트 | 0.95501 | −0.00417 |
여기서 두 가지를 배웠습니다.
작은 모델도 다른 문제를 맞힌다. 4B는 27B보다 단독 성능이 낮지만, 두 모델의 선택지 확률을 섞으니 점수가 올랐습니다. 틀리는 문제가 서로 다르기 때문입니다.
좋아 보이는 아이디어가 점수를 깎기도 한다. 질문 유형(계산, 개수, 글자 읽기 등)별로 프롬프트를 나누면 당연히 좋아질 것 같았지만, 실제로는 0.004 넘게 떨어졌습니다. 이 방식은 전체 적용에서 빼고 오답 분석용으로만 남겼습니다.
판단 기준: 정확도 하나만 보지 않는다
새 요소를 넣을지 정할 때, 검증 정확도만 보지 않고 기존 모델과 문제 단위로 비교했습니다.
- fixes: 기존에 틀린 문제를 새 요소가 맞힌 수
- breaks: 기존에 맞힌 문제를 새 요소가 틀린 수
- 순기여 = fixes − breaks
정확도가 조금 올라도 breaks가 많으면 문제를 맞히는 위치가 크게 흔들린 것이라, 테스트 데이터에서 재현되지 않을 위험이 큽니다. 여기에 두 가지를 더 봤습니다.
- 확신하며 틀린 문항이 늘었는지
- 특정 유형(글자 읽기·계산·개수)에서 떨어졌는지 — 전체가 올라도 한 유형이 떨어지면 보류
그리고 리더보드 점수(Public)는 판단을 확인하는 용도로만 썼습니다. Public 점수를 보면서 조정하면 리더보드에 과적합되기 때문입니다.
보호 기준선
가장 좋은 제출(당시 0.95918)을 보호 기준선으로 고정했습니다. 어떤 실험을 하든 이보다 낮은 최종본은 내지 않는다는 원칙입니다. 새 후보는 한 번에 하나씩, 직전 최고 제출과만 비교해 채택하거나 뺐습니다.
시간 안에 할 수 있는 것만
GPU 시간이 정해져 있어서 시도의 우선순위도 먼저 정했습니다.
- 선택지 순서 24개 전체 순열 추론 → 2~7일이 걸릴 것으로 예상돼 제외
- 대신 축소 멀티뷰: 같은 모델로 이미지를 세 가지로 봄
- 전체 이미지(최대 1024) — 기존 정답 보존
- 고해상도(최대 1536) — 메뉴판 가격처럼 작은 글자·숫자
- 중앙 확대(1024) — 시계나 층 표시처럼 가운데의 작은 대상
- 다른 계열 모델과 섞기: 단독 정확도가 아니라, Qwen의 오답을 고치면서 정답을 지키는지로 고름. 섞는 비중은 0.05~0.50 사이에서 검증셋으로만 정함
- OCR 결과 결합: 모델이 못 읽은 글자·가격·날짜를 보완
최종적으로 Qwen 27B·4B QLoRA와 Gemma 계열 모델, OCR, 멀티뷰 확률을 결합해 Public 0.96961을 기록했습니다.
제출 전 자동 검사
마지막으로, 제출 파일을 만들기 전에 아래를 자동으로 검사하고 하나라도 실패하면 제출 생성을 멈추게 했습니다.
- 테스트 6,714행, ID 중복·누락 없음, 샘플 순서와 일치
- 답은 a/b/c/d만 존재
- 모델별 확률이 같은 ID·같은 선택지 의미로 정렬되어 있고 합이 1
- 설정·가중치·코드 버전과 SHA-256 해시를 매니페스트로 기록 → GPU 없이도 같은 제출 파일을 재현
남은 것
이 챌린지에서 가장 크게 남은 건 "점수가 올랐다"와 "믿을 수 있게 올랐다"는 다르다는 감각입니다. fixes·breaks처럼 문제 단위로 변화를 보는 습관은 모델 비교뿐 아니라 프롬프트 수정, 데이터 정제 효과를 판단할 때도 그대로 쓸 수 있습니다.