kalee's 공부방

공개된 벤치마크 문제가 학습 데이터에 섞이면 점수는 무엇을 재게 될까요? GSM8k와 새로 만든 GSM1k를 비교해 과적합을 잰 연구, SWE-bench Verified의 오래된 공개 이슈, 마감일 이후 문제와 주기적 교체·비공개 셋 같은 대응책을 원 논문으로 살펴봅니다. 비공개만으로는 포화를 막지 못한다는 반대 증거도 함께 짚습니다.

Show Notes

공개된 벤치마크 문제가 학습 데이터에 섞이면 점수는 무엇을 재게 될까요? GSM8k와 새로 만든 GSM1k를 비교해 과적합을 잰 연구, SWE-bench Verified의 오래된 공개 이슈, 마감일 이후 문제와 주기적 교체·비공개 셋 같은 대응책을 원 논문으로 살펴봅니다. 비공개만으로는 포화를 막지 못한다는 반대 증거도 함께 짚습니다.

전체 대본 보기

참고 자료

이 에피소드의 음성은 TTS로 합성되었습니다.

What is kalee's 공부방?

kalee 가 공부하고자 하는 내용들을 두서없이 업로드하는 팟캐스트

진행자: 안녕하세요. 지난 편에서는 LLM 벤치마크가 무엇을 재는지, 큰 지도를 함께 그려 봤어요.

진행자: 오늘은 3부작의 두 번째 편이에요. 그 지도 위에 숫자 하나가 떠 있을 때, 그 숫자를 의심해야 하는 이유 하나를 깊게 파 보려고요.

진행자: 주제는 "시험지를 미리 본 모델"이에요. 데이터 오염과 과적합 이야기입니다.

전문가: 네, 모델 고를 때 벤치마크 표를 보면 소수점까지 비교하게 되잖아요. 그런데 그 문제를 모델이 이미 봤다면, 그 점수는 다른 걸 재고 있을 수 있어요.

진행자: 오늘 질문은 두 개예요. 공개된 문제가 학습 데이터에 섞이면 점수는 무엇을 재게 되는가. 그리고 그걸 어떻게 알아내는가.

진행자: 용어부터 정리할게요. 오염이라는 말을 정확히 어떤 뜻으로 쓰나요?

전문가: 보통 테스트 셋 오염이라고 해요. 벤치마크의 시험 문제가 새 모델의 학습 데이터에 들어가 버리는 거예요. 그러면 그 벤치마크 점수가 부풀려집니다.

전문가: 사람으로 치면 기출문제를 답까지 외우고 시험장에 들어간 상황이에요.

진행자: LLM은 다들 아실 테니 넘어가고요. 오늘 계속 나올 이름이 GSM8k예요. 이건 뭐의 약자예요?

전문가: GSM은 Grade School Math, 초등 수학이라는 뜻이에요. 2021년에 OpenAI가 공개한 초등 수학 문장제 약 8,500문제고, 사칙연산만으로 풀 수 있게 만들어졌어요.

진행자: 그럼 GSM1k는요?

전문가: Grade School Math 1000이에요. Scale AI 연구진이 GSM8k와 스타일과 난이도를 맞춰서 새로 만든 1,205문제입니다.

진행자: 그리고 코딩 쪽에서는 SWE-bench가 나오죠.

전문가: SWE는 software engineering, 소프트웨어 엔지니어링이에요. 실제 GitHub 이슈와 그 코드베이스를 주고, 이슈를 고치는 패치를 쓰게 한 다음 단위 테스트로 채점해요.

진행자: 마지막으로 홀드아웃이라는 말도 나올 텐데요.

전문가: 공개하지 않고 평가용으로 따로 떼어 둔 데이터를 말해요. 비공개 테스트 셋과 거의 같은 뜻으로 쓰시면 됩니다.

진행자: 좋아요. 그런데 문제가 학습 데이터에 들어가는 게 그렇게 쉬운 일인가요? 일부러 넣는 게 아니라면요.

전문가: 생각보다 쉬워요. 벤치마크는 보통 인터넷에 공개되고, 대부분의 LLM은 인터넷의 아주 큰 부분을 학습하거든요.

전문가: 그래서 모델을 만드는 쪽도 손을 써요. 벤치마크와 n-gram, 그러니까 연속된 단어 묶음이 너무 많이 겹치는 데이터를 지우거나, 임베딩으로 봐서 너무 비슷한 데이터를 걸러 내는 방식이에요.

진행자: 그런 필터를 거치면 끝나는 거 아닌가요?

전문가: 직접 복사된 문제는 많이 걸리겠죠. 그런데 경로가 그것만 있는 게 아니에요.

전문가: GSM1k 논문 저자들은 간접 경로를 몇 가지 꼽아요. 벤치마크와 성격이 비슷한 데이터를 모아서 학습하거나, 벤치마크 점수가 가장 좋은 체크포인트를 최종 모델로 고르는 것만으로도 과적합이 생길 수 있다고 봐요.

전문가: 다만 이건 저자들의 가설이에요. 증명된 경로라기보다 결과를 설명하려는 후보로 내놓은 거예요.

진행자: 체크포인트 고르는 건 다들 하는 일 같은데요.

전문가: 그렇죠. 그래서 누가 나쁜 짓을 했다는 이야기로 받아들이기보다, 점수를 목표로 삼는 순간 생기는 구조적인 압력으로 보시는 게 맞아요.

전문가: 코드 벤치마크는 더 노골적이에요. SWE-bench Verified의 저장소와 이슈는 전부 공개돼 있고, GitHub 이슈와 PR을 모은 공개 데이터셋도 Hugging Face에 올라와 있어요.

진행자: 오염 경로는 대략 감이 와요. 그럼 이제 두 번째 질문이요. 어떻게 알아내요? 학습 데이터를 열어 볼 수 없잖아요.

전문가: 그게 핵심 난제예요. 그래서 나온 발상이 "같은 스타일의 새 시험지를 만들어서 다시 쳐 보자"예요. 그게 GSM1k입니다.

전문가: 이 아이디어는 2019년 ImageNet 연구에서 왔어요. 공개 테스트 셋과 새로 만든 테스트 셋의 성능 차이로 과적합을 쟀던 연구예요.

진행자: 그런데 새 시험지가 원래 것보다 어려우면, 점수가 떨어지는 게 당연하잖아요.

전문가: 맞아요. 그래서 이 논문은 두 시험지가 정말 비슷한지 확인하는 데 공을 많이 들였어요.

전문가: 먼저 문제는 사람만 썼어요. LLM이나 합성 데이터는 쓰지 않았고요. 작성자에게 GSM8k 예시 세 문제를 보여 주고 비슷한 난이도로 새 문제를 쓰게 했습니다.

전문가: 그다음에 사람에게 구별 시험을 냈어요. GSM8k 네 문제에 GSM1k 한 문제를 섞어 놓고 새 문제를 찾게 했더니, 맞힌 비율이 21.83%였어요. 아무렇게나 찍어도 20%니까 거의 구별을 못 한 거죠.

전문가: 풀이 속도도 쟀어요. 15분 동안 GSM8k는 평균 4.07문제, GSM1k는 4.36문제를 풀었어요. 새 시험지가 비슷하거나 오히려 조금 쉬운 편이었죠.

진행자: 모델 쪽으로도 점검을 했나요?

전문가: 네, 재밌는 점검이 하나 있어요. GSM8k가 공개되기 전에 학습된 오래된 모델 두 개를 돌려 봤는데, 두 시험지 점수 차이가 거의 없었어요.

전문가: 시험지를 볼 수 없었던 모델은 차이가 안 난다. 측정 도구가 제대로 작동하는지 보는 대조군인 셈이에요.

진행자: 그래서 결과는 어땠어요?

전문가: GSM1k에서 정확도가 최대 8% 떨어졌어요. 그리고 몇몇 모델 계열은 거의 모든 크기와 버전에서 일관되게 GSM8k 쪽 점수가 더 높았어요. 저자들은 이걸 체계적 과적합이라고 불러요.

전문가: 리더보드 상위에 있던 덜 알려진 모델 상당수도 GSM1k에서 크게 떨어졌어요. 저자들은 이걸 굿하트의 법칙 사례로 봐요. 지표가 목표가 되면 더는 좋은 지표가 아니라는 거죠.

진행자: 그런데 점수가 떨어졌다고 그게 오염 때문이라고 어떻게 말해요? 다른 이유일 수도 있잖아요.

전문가: 좋은 질문이에요. 그래서 하나 더 쟀어요. 모델이 GSM8k 문제 문장을 그대로 생성할 확률이요. 학습 때 본 문장일수록 이 확률이 높아진다는 선행 연구가 있어서, 이걸 오염의 대리 지표로 쓴 거예요.

전문가: 그 확률과 두 시험지 점수 차이를 나란히 놓으니 양의 상관이 나왔어요. 상관 계수는 0.36 정도예요.

진행자: 0.36이면 강한 건가요?

전문가: 강하다고 하긴 어려워요. 저자들도 초록에서는 일부 모델이 GSM8k를 부분적으로 암기했을 수 있다고 쓰고, 본문에서는 그 해석을 강하게 시사한다고까지 써요. 다만 이상치 때문에 상관이 비교적 낮다는 점도 함께 인정해요.

전문가: 오히려 오염만으로는 설명이 안 된다는 사례도 같이 보여 줘요. 학습 데이터를 공개한 어떤 모델은 GSM8k 문제가 소수 들어 있었는데도 과적합이 거의 없었어요.

전문가: 반대로 과적합이 가장 컸던 모델 중 하나는 GSM8k 문장 생성 확률이 낮았고요. 저자들은 합성 데이터로 보상 모델을 학습하는 과정에서 문제 자체가 아니라 풀이 과정 정보가 새어 들어갔을 수 있다고 추정해요.

진행자: 오염이 조금 있다고 꼭 점수가 부풀지도 않고, 점수가 부풀었다고 꼭 문제를 본 것도 아니다.

전문가: 네, 그렇게 정리하시면 정확해요.

진행자: 그럼 실제로 많이 쓰는 큰 모델들은 어땠어요?

전문가: 여기가 이 논문에서 꼭 같이 전해야 하는 부분이에요. 프런티어, 그러니까 그 시점 최고 수준이거나 그에 가까운 모델들은 두 시험지에서 비슷한 점수를 냈어요. 과적합 신호가 거의 없었습니다.

진행자: 왜 그럴까요?

전문가: 저자들은 가설 두 개를 내요. 하나는 충분히 강한 모델은 GSM8k를 봤더라도 새 문제로 일반화한다는 것. 다른 하나는 프런티어 개발사가 오염에 더 조심한다는 것. 저자들은 첫 번째 쪽으로 기울어요.

전문가: 그리고 과적합한 모델도 추론을 못 하는 건 아니었어요. 6% 떨어진 한 소형 모델도 GSM1k 문제의 절반 넘게 맞혔는데, 파라미터가 25배 넘게 많은 모델과 비슷한 수준이었어요.

진행자: 그러니까 오염이 모든 점수를 설명하는 만능 변명은 아니라는 거네요.

전문가: 맞아요. 과적합은 "벤치마크가 말하는 만큼은 아니다"라는 뜻이지 "추론을 못 한다"는 뜻이 아니에요.

전문가: 한계도 짚어야 해요. 저자들 스스로 두 시험지는 매우 비슷할 뿐 완전히 같은 분포는 아니라고 밝혀요. 그리고 모든 모델에 같은 프롬프트를 썼기 때문에 각 회사가 발표한 점수보다 낮게 나올 수 있다고 적었어요.

진행자: 이제 코딩 쪽으로 넘어가 볼게요. SWE-bench Verified는 코딩 에이전트 벤치마크 중에서도 대표적으로 꼽히죠.

전문가: SWE-bench Verified는 원래 SWE-bench에서 사람이 검토해 골라낸 500개 문제예요. OpenAI와 협업해서 만들었다고 공식 페이지에 나와 있어요.

전문가: Epoch AI 분석에 따르면, 원래 문제마다 독립 검토자 세 명이 기준표로 설명이 명확한지, 테스트가 적절한지, 풀 수 있는지를 봤고, 그 과정에서 3분의 2 이상이 걸러졌어요.

진행자: 사람이 꼼꼼히 걸렀으면 믿을 만한 거 아닌가요?

전문가: 문제 품질 면에서는 꽤 괜찮아요. Epoch은 결함이 있는 문제 비율을 대략 5에서 10% 사이로 추정해요. 그런데 품질과 오염은 다른 축이에요.

전문가: Epoch이 짚은 건 문제의 나이예요. Verified 이슈의 절반이 2020년 또는 그 이전 것이고, 일부는 12년 전까지 거슬러 올라가요.

전문가: 그리고 원 데이터셋은 2023년 10월에 만들어진 뒤로 이슈 목록이 바뀌지 않는 정적 벤치마크예요.

전문가: 저장소도 12개 Python 프로젝트뿐이고, Django 하나가 거의 절반이에요. 상위 다섯 개 저장소가 80%를 넘고요.

진행자: 오래되고, 공개돼 있고, 몇몇 유명 저장소에 몰려 있다.

전문가: 그래서 Epoch은 이 벤치마크의 오염 위험을 "높음"으로 매겨요. 지금과 앞으로의 모델은 그 코드베이스와 변경 이력, 이슈 자체까지 학습했을 가능성이 크다고 봐요.

전문가: 실무 관점에서 중요한 결론은 이거예요. 모델이 처음 보는 사내 비공개 코드베이스로 이 점수를 그대로 옮기기 어렵다는 거죠.

진행자: 그럼 SWE-bench 점수는 다 오염된 거라고 봐야 해요?

전문가: 그렇게까지 말할 증거는 없어요. 위험이 높다는 것과 실제로 점수가 얼마나 부풀었는지는 다른 이야기예요.

전문가: 원 SWE-bench 논문은 2023년 이전 이슈와 이후 이슈를 나눠 비교했는데, 대부분 모델이 차이가 거의 없었다고 보고했어요. 다만 그때 모델들 점수가 한 자릿수 퍼센트였던 시절이라, 지금 모델에 그대로 적용하긴 어려워요.

전문가: 후속 버전인 SWE-bench Multimodal에서는 오히려 학습 마감일 이후 이슈를 더 잘 풀었다는 보고도 있어요. 다만 Epoch은 표본이 작고 그 이슈들이 더 쉬웠을 수 있다고 단서를 달아요.

진행자: 위험 신호는 분명한데 크기는 아직 모른다. 그럼 벤치마크를 만드는 쪽은 어떻게 대응하나요?

전문가: 크게 세 갈래로 보시면 돼요. 마감일 이후 문제, 주기적 교체, 그리고 비공개 셋이요.

전문가: 첫째, 마감일 이후 문제예요. SWE-bench는 처음부터 수집 절차를 새 이슈에 계속 적용할 수 있게 설계했어요. 모델 학습 시점 이후에 생긴 이슈로 평가하면 정답이 학습 데이터에 없다고 보장할 수 있다는 거죠.

전문가: 실제로 경쟁 프로그래밍 문제에서 학습 마감일 이후 문제로 가면 LLM 성능이 급락했다는 선행 연구가 있어요. 마감일 이전 문제는 GitHub에 많이 올라온 문제일수록 성능이 높았고요.

전문가: 둘째, 주기적 교체예요. LiveBench가 대표적인데요, 최근 수학 대회, arXiv 논문, 뉴스 같은 새 자료로 문제를 만들고 매달 문제를 추가하고 바꿔요. 채점은 정답 기준으로 자동으로 하고요.

전문가: 셋째, 비공개 셋이에요. GSM1k는 오염을 막으려고 공개하지 않았어요. 대신 언제 공개할지를 미리 약속했어요. 서로 다른 계열의 오픈 모델 세 개가 95%에 닿거나, 2025년 6월이 되거나, 둘 중 이른 시점이요.

전문가: 평가하려면 비공개 모델에 API로 문제를 보낼 수밖에 없잖아요. 그래서 품질 검사를 통과한 문제 일부를 따로 떼어 두는 대비책도 썼어요.

진행자: 비공개로 두면 확실히 안전할 것 같은데요.

전문가: 직관적으로는 그렇죠. 그런데 여기서 반대 증거가 하나 있어요. 3편 주제와 이어지는 연구라 오늘은 오염과 관련된 부분만 짚을게요.

전문가: 2026년 ICML에 실린 연구인데, LLM 벤치마크 60개를 분석했어요. 상위 모델 점수가 천장 가까이 붙어서 통계적으로 더는 구별되지 않는 상태를 포화라고 정의하고, 그게 얼마나 퍼져 있는지 봤어요. 60개 중 29개가 높은 수준 이상으로 포화돼 있었어요.

전문가: 이 연구는 "공개 벤치마크가 비공개보다 빨리 포화한다"는 가설을 직접 시험했어요. 결과는 기각이었어요. 두 그룹의 포화 정도에 통계적으로 의미 있는 차이가 없었어요.

진행자: 오염 얘기와 정반대처럼 들리는데요.

전문가: 여기서 조심해서 들으셔야 해요. 표본에서 비공개 벤치마크는 60개 중 4개뿐이었어요. 그리고 이 연구가 잰 건 오염이 아니라 포화예요.

전문가: 대신 차이를 만든 요인으로 나온 건 벤치마크의 나이와 테스트 셋 크기였어요. 그리고 전문가가 큐레이션한 벤치마크가 같은 나이대에서 포화가 낮았어요.

전문가: 저자들 해석은 이래요. 명시적인 유출이 없어도, 고정된 시험에 오래 노출되면 그 시험에 맞춘 최적화가 쌓여서 상위 모델 차이가 좁혀진다. 다만 인과 관계를 직접 밝힌 건 아니라고 스스로 적었어요.

전문가: 그래서 권고도 "비공개 테스트 셋에만 장기 방어를 맡기지 말라"예요. 흥미롭게도 매달 문제를 갱신하는 LiveBench조차 이 연구에서는 매우 높은 포화로 분류됐어요.

진행자: 정리하면, 문제를 숨기는 건 직접 유출은 줄여도, 시간이 지나며 시험에 맞춰지는 현상까지 막아 주진 못한다.

전문가: 네. 오염은 점수를 의심할 이유 중 하나일 뿐이고, 공개 여부 하나로 신뢰도를 판단하면 안 된다는 거예요.

진행자: 그럼 실무에서 모델을 고르는 분들은 오늘 이야기를 어떻게 써먹으면 좋을까요?

전문가: 먼저 벤치마크 이름 옆에 그 시험지가 언제 만들어졌고, 문제가 갱신되는지를 같이 보세요. 오래된 정적 벤치마크일수록 상위 모델 사이의 점수 차이를 덜 믿는 게 맞아요. 공개냐 비공개냐만으로 판단하지는 마시고요.

전문가: 그리고 가능하면 우리 팀의 문제로 작게라도 직접 재 보세요. GSM1k가 한 일을 축소판으로 하는 거예요. 모델이 본 적 없는 우리 코드, 우리 문서로요.

전문가: 마지막으로, 오염 의심이 곧 그 모델이 형편없다는 뜻은 아니에요. 오늘 본 것처럼 점수가 부풀었어도 실제 능력은 꽤 있을 수 있어요.

진행자: 오늘 내용을 세 가지로 정리해 볼게요.

진행자: 첫째, 공개된 문제가 학습 데이터에 섞이면 점수는 능력과 기억이 섞인 값을 재게 됩니다. 그리고 비슷한 데이터 수집이나 체크포인트 선택 같은 간접 경로로도 과적합이 생길 수 있어요.

진행자: 둘째, 알아내는 대표적인 방법은 같은 스타일의 새 시험지로 다시 재는 거예요. GSM1k에서는 최대 8% 하락이 보였지만, 프런티어 모델은 과적합이 거의 없었어요.

진행자: 셋째, 마감일 이후 문제, 주기적 교체, 비공개 셋이 대응책이지만, 비공개만으로는 오래 버티지 못한다는 증거도 있어요. 시험지의 나이와 큐레이션을 함께 봐야 해요.

진행자: 다음 3편에서는 오늘 잠깐 나온 포화를 정면으로 다뤄요. 점수가 천장에 붙으면 벤치마크는 무엇을 말해 주지 못하게 되는지 이야기해 볼게요.

진행자: 오늘 다룬 논문과 분석 글은 설명란에 정리해 뒀어요. 들어 주셔서 고맙습니다.