How a Dedup Pass Deleted My Training Curriculum

개요

Qwen2.5-3B-Instruct 모델은 언어 모델 간의 캡처 더 플래그(Capture The Flag) 게임 로그를 활용한 자체 훈련 데이터로 성능을 향상시켰으며, 특히 공격 성능은 우수했지만 방어 성능 개선 시도에서 의도치 않은 중복 제거(deduplication) 과정으로 인해 학습 가중치가 무효화되는 문제가 발생했다.

주요 내용

  • 캡처 더 플래그 게임 및 모델 훈련: 언어 모델이 서로의 컨테이너를 공격하고 방어하는 캡처 더 플래그(Capture The Flag) 아레나를 구축했으며, 게임 리플레이를 소규모 로컬 모델(Qwen2.5-3B-Instruct)의 훈련 데이터로 활용하여 MLX LoRA 어댑터를 파인튜닝했다.
  • 성능 비교: 훈련된 로컬 봇은 221게임에서 400개의 깃발을 캡처하며 공격 성능에서 5개의 클라우드 모델보다 우수한 성과를 보였다. 하지만 방어 시 깃발을 잃는 비율은 개선되지 않았다.
  • 방어 성능 개선 시도와 실패: 두 번의 방어 성능 개선 시도(v5 자기 플레이 루프 회귀 후 큐레이션된 믹스 v6 사용, v7 재학습) 모두 의도한 결과를 얻지 못하고 이전 상태로 롤백되었다.
  • 가중치 적용 방식의 문제점: MLX LoRA 파인튜닝은 JSONL 파일에서 각 예시에 대한 가중치 필드를 지원하지 않기 때문에, 예제를 더 많이 반복하는 방식으로 가중치를 적용한다.
  • 중복 제거(Deduplication)의 영향: 훈련 데이터 생성 스크립트에서 가중치를 적용하기 위해 동일한 예제를 반복한 후, 마지막 200자(생각 텍스트와 명령어 포함)를 기준으로 중복을 제거하는 과정에서 첫 번째 복사본 외에는 모두 제거되어 가중치가 사실상 무효화되었다.
  • 실제 학습 데이터 변화: 가중치 적용 및 중복 제거 전 94,022개의 고유 라인에서, 중복 제거 후에는 50,145개의 라인만 남았으며, 41.5%에 해당하는 라인이 반복된 예제로 인해 제거되었다. 특히 중요한 방어적 턴은 의도한 비율(18.3%)보다 훨씬 적은 비율(5.7%)만 학습에 반영되었다.
  • Gemini 3 defender exemplars의 무효화: 특정 모델의 방어적 턴을 5배 가중치로 학습시키려 했으나, 중복 제거 과정에서 고유한 200자 키를 가진 예제만 살아남아 가중치가 거의 영향을 미치지 못했다.
  • 필터링으로 작동한 학습: 결국 학습 과정은 가중치 부여가 아닌, 0으로 평가된 턴(공격으로 간주되거나 무의미한 턴)만 제외하는 필터링으로 작동했으며, 1과 6의 차이가 1과 1의 차이로 희석되었다.
  • 예제 충돌: 마지막 200자의 유사성으로 인해, 서로 다른 추론 과정을 거쳤지만 동일한 명령어로 끝나는 예제들이 하나의 예제로 취급되어, 다양한 상황에서의 좋은 명령 재현이라는 학습 목표가 저해되었다.
  • 검증 및 한계: 학습 파이프라인의 전체적인 과정은 투명하게 공개되었으나, 실제 훈련 데이터와 어댑터 버전은 Gitignore 처리되어 직접 검증이 어렵다. 또한, 롤백의 직접적인 원인이 가중치 문제인지에 대한 실험은 아직 수행되지 않았다.
  • 데이터 편향 가능성: 훈련 세션 로그가 모든 어댑터 버전을 기록하지 않고, 토너먼트 중 매치 형식이 변경되었을 가능성이 있어 직접적인 성능 비교에 한계가 있다.
  • 일반화 가능한 교훈: 예제 복제를 통한 가중치 부여 방식은 이후의 고유성(uniqueness) 검증 과정에서 효과를 잃을 수 있으며, 이러한 과정은 명시적인 알림 없이 진행되어 문제 파악이 어렵다.

시사점

모델 학습 시 가중치 부여를 위해 예제를 반복하는 방식은 이후의 중복 제거 과정에서 의도치 않게 무효화될 수 있으므로, 데이터 처리 파이프라인 설계 시 각 단계의 상호작용과 잠재적인 영향을 신중하게 고려해야 한다.

원문 읽기 →
원문을 불러오는 중...

댓글

GitHub Discussions