Do We Train on Test Data? Purging CIFAR of Near-Duplicates - 세미나 자료
저자: Björn Barz, Joachim Denzler
발행년도: 2019년
인용수: 18회
논문 링크: http://arxiv.org/abs/1902.00423v2
arXiv ID: 1902.00423
0. TL;DR
- CIFAR-10 테스트셋의 **3.3%**, CIFAR-100 테스트셋의 **10%**가 학습셋에 near-duplicate로 존재함을 수작업 검수로 밝혀냈다.
- 중복을 Tiny Images에서 새로 샘플링해 교체한 **ciFAIR** 테스트셋을 공개했고, 6개 SOTA CNN 재평가에서 상대 오차율이 **9~14%** 늘었다.
- 모델 간 순위는 대체로 유지됐지만, ResNet-110이 duplicate 부분집합에서 0% 오차를 찍어 "일반화가 아닌 암기"의 증거를 내놨다.
1. 왜 이 논문이 흥미로운가
CIFAR-100에서 학습된 ResNet-110이 duplicate 부분집합에서 2.9%를, CIFAR-10 duplicate 부분집합에서 0%를 기록했다. 전체 테스트셋의 26.1%, 5.3%와 비교하면 한 자릿수 이상 차이다. 같은 모델이 같은 가중치로 같은 분포의 이미지를 분류하는데, "학습셋과 닮은 정도"만으로 오차가 거의 사라졌다.
제목 "Do we train on test data?"는 자조적 농담이 아니라 수치로 뒷받침된 고발이었다. 10년간 SOTA 경쟁이 1~2%p 차이로 진행돼 온 분야에서, 그 차이의 상당 부분이 학습셋 암기에서 나왔을 수 있다는 가설을 정량적으로 제시했다. 저자들은 문제 지적에서 그치지 않고 중복만 교체한 ciFAIR 테스트셋을 공개해, 커뮤니티가 즉시 재검증할 도구를 손에 쥐여 주었다.
처음 이 논문을 읽었을 때 ResNet-110의 0%가 비현실적으로 느껴졌다. 내 GPU에서 CIFAR-10 재학습을 돌려도 5% 아래로는 잘 안 떨어지는 모델이다. 그게 일부 부분집합에서 0%로 떨어진다면, 그 부분집합이 평가용이 아니라는 뜻이었다.
2. Problem & Why now
문제의식은 단순했다. 웹 크롤링 기반 데이터셋은 같은 장면의 변형본을 여럿 품는데, 이를 train/test로 무작위 분할하면 테스트 이미지의 near-duplicate가 학습셋에 그대로 섞여 들어간다. 이렇게 오염된 테스트셋으로 평가하면 모델의 일반화가 아니라 암기 능력을 측정하게 된다고 저자들은 지적했다.
기존 관행의 첫 번째 한계는 pixel-level exact duplicate만 제거하는 방식이었다. Krizhevsky et al.이 CIFAR-10 구축 때 쓴 절차는 픽셀이 거의 일치하는 쌍만 걸렀고, contrast/translation/color shift/스트레칭 같은 변형본은 그대로 통과시켰다. 실제로 이 논문 통계에서 CIFAR-100에는 exact duplicate가 다수였던 반면 CIFAR-10에는 0개였는데, 저자들은 CIFAR-100 구축 때 그 기본 절차마저 누락된 정황으로 해석했다.
두 번째 한계는 더 미묘했다. data augmentation이 보편화되면서, 학습 과정에서 모델은 각 학습 이미지의 변형본을 수없이 본다. 이는 곧 near-duplicate 형태의 테스트 이미지를 분류하는 능력을 학습 단계에서 사실상 부여받는다는 뜻이다. augmentation이 강해질수록 generalization 평가의 신뢰성은 역설적으로 약해졌다.
세 번째 한계는 직전 선행 연구인 Recht et al. (2019) 의 접근이었다. 이들은 CIFAR-10 테스트셋 전체를 Tiny Images에서 새로 샘플링하는 방식을 택했고, 중복 비율(8%)은 부수적 언급에 그쳤다. 새 테스트셋 전체는 원본 분포와 미세하게 어긋날 수밖에 없고, CIFAR-100은 다루지도 못했다.
핵심 인사이트는 "중복만 교체" 전략이었다. CNN feature space에서 nearest neighbor를 검색해 후보를 추리고, 단일 annotator가 GUI로 4단계(Exact / Near / Very Similar / Different)로 분류했다. duplicate로 판정된 테스트 이미지만 Tiny Images에서 뽑은 새 샘플로 교체했고, 나머지 원본은 그대로 보존했다. 분포 보존과 오염 제거를 동시에 잡은 설계였다.
3. Background
사전지식은 세 가지로 정리됐다. 첫째는 CNN classification + data augmentation 파이프라인으로, ImageNet 이후 deep learning의 표준이 됐다. 둘째는 content-based image retrieval의 관행으로, 학습된 CNN의 마지막 pooling layer 출력을 L2 정규화해 시각적 유사도 검색에 쓰는 방식이 image retrieval 문헌에서 널리 검증돼 있었다. 셋째는 L2-normalized feature 위에서 Euclidean과 cosine distance가 동치라는 단순한 사실로, 이 논문의 duplicate mining이 그 위에 얹혔다.
데이터셋 계보는 분명했다. Torralba et al. (2008)의 80 Million Tiny Images가 WordNet 약 75,000개 synset으로 웹에서 자동 수집된 32×32 이미지 80M장의 원천이었다. Krizhevsky & Hinton (2009)이 여기서 일부를 추려 라벨링한 결과물이 CIFAR-10/100이고, 이후 10년간 ResNet, WRN, DenseNet, ResNeXt, PyramidNet 등 수많은 SOTA가 이 벤치마크 위에서 경쟁했다. Recht et al. (2019) 이 CIFAR-10 재샘플링으로 처음 generalization 문제를 정량화했고, ciFAIR가 그 흐름을 CIFAR-100까지 확장하면서 방법론을 정교화했다.
직전 연구인 Recht et al.과의 차별점은 본문에서 가장 강조된 대비점이었다. 두 연구는 같은 의심에서 출발했지만 서로 다른 도구로 다른 질문에 답했다.
| 비교 항목 | Recht et al. (2019) CIFAR-10.1 | 이 논문 (ciFAIR) |
|---|---|---|
| 대상 데이터셋 | CIFAR-10 한정 | CIFAR-10 + CIFAR-100 |
| 테스트셋 재구축 방식 | 전체 새로 샘플링 | duplicate만 교체, 나머지 보존 |
| Duplicate 분석 깊이 | 부수 언급 (8% 통계만) | 4단계 분류 + 클래스별/유형별 통계 |
| 보고된 duplicate 비율 | 8% (CIFAR-10) | 3.3% / 10% |
| 재평가 결과 활용 | generalization gap 정량화 | 모델 랭킹 안정성 + 암기 증거 |
저자들은 Recht et al.이 놓친 두 가지를 채웠다. CIFAR-100이라는 더 심각한 케이스를 다뤘고, 원본 분포를 보존한 채 오염원만 제거하는 정밀한 외과적 접근을 정립했다.
4. Method
저자들이 제안한 파이프라인은 새 모델을 학습하는 것이 아니라 데이터셋 자체를 외과적으로 수술하는 절차였다. 입력은 CIFAR-10/100 train+test, 출력은 동일한 train과 중복만 갈아낀 ciFAIR test다. 전체 흐름은 네 단계로 흘렀다. (1) lightweight CNN을 train set으로 학습 → (2) GAP 출력에서 L2-normalized feature 추출 후 test→train nearest neighbor 검색 → (3) 단일 annotator가 GUI로 4단계 분류 → (4) duplicate로 판정된 테스트 이미지를 Tiny Images에서 새로 뽑은 후보로 교체. 모델 학습 코드는 일절 건드리지 않았다.
flowchart LR
A[Train Set] --> B[Barz CNN 학습]
B --> C[GAP Layer L2-norm Feature]
D[Test Set] --> C
C --> E[Euclidean NN 검색]
E --> F[4단계 Manual Annotation]
F --> G{Duplicate?}
G -->|Yes| H[Tiny Images 후보 교체]
G -->|No| I[원본 보존]
H --> J[ciFAIR Test]
I --> J
모듈 A: Duplicate Mining via Feature-Space NN
저자들은 pixel-level 검색의 한계를 우회하기 위해 content-based image retrieval 관행을 그대로 빌려왔다. Barz & Denzler (2018)의 lightweight CNN을 해당 데이터셋의 train split으로 학습시킨 뒤, global average pooling layer 출력을 L2 정규화해 feature로 썼다. 미리 학습된 외부 모델을 안 쓴 이유는 분명했다. 같은 도메인에서 학습된 네트워크일수록 contrast/translation/color shift 같은 augmentation 불변 방향이 feature space에 새겨지기 때문이다. 그 invariance가 곧 near-duplicate 검색기로 변했다.
검색은 단순했다. 각 test 이미지에 대해 train set의 최근접 1개를 Euclidean distance로 찾았다. 거리 함수는 단순했지만 그 의미는 깊었다. L2 정규화된 벡터 $\mathbf{u}, \mathbf{v} \in \mathbb{R}^d$, 즉 $|\mathbf{u}| = |\mathbf{v}| = 1$에 대해:
$$|\mathbf{u} - \mathbf{v}|^2 = 2 - 2,\mathbf{u}^\top \mathbf{v} = 2,(1 - \cos\theta)$$
이 한 줄이 ciFAIR의 정체성 수식이었다. Euclidean과 cosine이 단조 동치라는 사실은 retrieval 문헌에서 닳도록 인용되지만, ciFAIR는 이를 벤치마크 정화 작업의 거리 척도로 끌어와 의미를 비틀었다. 시각적 닮음이 모델 표상 공간에서 좌표 거리로 환원된다는 가정이 파이프라인 전체를 떠받쳤다.
모듈 B: Manual Annotation with 4-Class GUI
저자들은 단순 threshold로 끊으면 false positive가 폭증한다고 명시했다. 그래서 사람이 들어왔다. annotation tool은 test 이미지, NN train 이미지, pixel-wise difference map, 그리고 feature distance 수치를 한 화면에 띄웠다. annotator는 거리 오름차순으로 정렬된 pair를 위에서부터 훑으며 키 4개로 라벨을 찍었다.

위 화면에서 왼쪽이 test 이미지, 가운데가 train의 nearest neighbor, 오른쪽이 두 이미지의 픽셀 차이 맵이다. 하단의 distance 수치(0.1826)는 L2-normalized feature space에서 측정된 값으로, threshold만으로 자르면 안 되는 이유를 그대로 보여준다. 같은 거리 구간에 진짜 중복과 단순 시각적 유사 사례가 뒤섞여 있었다. 4개 버튼(Duplicate / Near Duplicate / Very Similar / Different)이 키보드 1~4에 매핑돼 빠른 라벨링이 가능했다.
4단계 정의는 정밀했다. Exact Duplicate는 거의 모든 픽셀이 동일한 경우, Near-Duplicate는 같은 카메라 샷에 color shift나 translation 같은 후처리만 다르게 적용된 경우, Very Similar는 같은 장면은 아니지만 두 번째로 봐야 차이를 알 수 있는 경우, Different는 그 외였다. 짧다. 하지만 이 경계가 곧 ciFAIR의 신뢰성 근거였고, 단일 annotator라는 약점은 §7에서 다시 호출될 지점이었다.
모듈 C: Stopping Criterion
전체 50,000×10,000 pair를 다 검수하는 건 불가능했다. 저자들은 "Different가 20번 연속"이면 종료라는 휴리스틱을 썼다. 거리 정렬을 신뢰한 결정이다. 거리가 충분히 커진 구간에서 20개 연속 비중복이 나오면 그 뒤는 안 봐도 된다는 가정이 깔려 있었다. test set 내부 duplicate(test↔test)도 같은 절차로 추가 검수했다. train 내부 중복은 검사하지 않았다. 학습 가중치 bias는 평가 공정성에 직접 영향을 주지 않는다는 판단이었다.
모듈 D: Replacement Candidate Selection
duplicate로 판정된 테스트 이미지는 Tiny Images 80M에서 같은 클래스 후보를 새로 뽑아 교체했다. 여기서 두 번째 GUI가 등장했다. 후보 이미지 1장과 함께 현재 train+test에서의 3-NN을 옆에 띄워, 새 이미지가 또 다른 duplicate를 만들지 않는지 즉석에서 검증했다.

위 화면 상단의 "Replacement Candidate (airplane)"가 Tiny Images에서 뽑힌 후보였고, 하단 세 이미지가 기존 train/test에서의 nearest neighbors다. 각 NN에 표시된 distance(0.3988, 0.3991, 0.4050)는 모듈 A의 거리 척도를 그대로 재사용한 값으로, 모듈 A와 모듈 D가 같은 metric 위에서 닫힌 루프를 형성했음을 드러낸다. Approve/Skip 두 버튼만 있는 점도 의도적이었다. 판단 비용을 최소화하려는 설계였다.
라벨링 규칙은 흥미로운 비대칭을 드러냈다. CIFAR-10은 Krizhevsky et al.이 명시한 labeler instruction을 그대로 따랐지만, CIFAR-100용 instruction은 공개된 적이 없었다. 데이터를 뜯어본 저자들은 원본 CIFAR-100에 line drawing, cartoon, 동일 카테고리의 multi-instance 이미지가 섞여 있다는 사실을 발견했고, 새 ciFAIR-100 후보 선정에서도 같은 완화 규칙을 허용했다. 이 비대칭이 §7에서 "domain shift 가능성"으로 다시 호출될 지점이다.
학습 전략은 따로 없다. 이건 평가 프로토콜 논문이지 모델 논문이 아니었다. 다만 §5의 재평가를 위해 6개 SOTA CNN을 원본 코드 + 원본 hyperparameter로 직접 재학습했고, 이 수치들이 원논문 발표값과 미세하게 어긋난다는 점은 본문에서 분명히 인정했다.
5. Experiments
셋업은 깔끔했다. CIFAR-10/100 원본 train set으로 6개 아키텍처 — Plain-11, ResNet-110, WRN-28-10, DenseNet-BC(L=190, k=40), ResNeXt-29(8×64d), PyramidNet-272-200 — 를 직접 학습한 뒤, 동일 가중치로 원본 CIFAR test와 ciFAIR test 두 곳에서 분류 오차율을 쟀다. 메트릭은 오차율 절댓값, gap(절대 percent point 차이), Rel. Gap(원본 대비 상대 증가율) 세 가지였다.
메인 결과는 Table 2였다. CIFAR-10에서 평균 gap은 +0.41%p, CIFAR-100에서 +2.73%p였다. 절댓값으로는 작아 보였다. 상대 gap을 보면 풍경이 달라졌다. CIFAR-10에서 DenseNet-BC가 7.69%로 가장 작았고 PyramidNet-272-200이 11.73%, CIFAR-100에서는 Plain-11이 12.65%, ResNet-110이 12.25%, WRN-28-10이 13.35%, DenseNet-BC가 12.89%, ResNeXt-29가 13.38%, PyramidNet-272-200이 13.67%를 기록했다. 모든 SOTA가 원본 성능의 10% 안팎을 duplicate에 빚지고 있었다.
가장 강력한 증거는 duplicate 부분집합 분석이었다. ResNet-110은 전체 CIFAR-10 test에서 5.26% 오차를 냈지만 duplicate 부분집합에서는 0%, CIFAR-100 전체 26.05% 대비 duplicate 부분집합에서 2.9%를 찍었다. 한 자릿수 이상 차이다. 같은 가중치, 같은 분포의 이미지를 분류하는데 "학습셋과 닮은 정도"만으로 오차가 사실상 사라졌다. 저자들은 "memorization으로 분류가 너무 쉽게 된다"고 못 박았다.

위 막대 그래프에서 CIFAR-10은 Near-Duplicate가 약 280개로 압도적이었고 Exact Duplicate는 0개, Very Similar는 50개 미만이었다. CIFAR-100은 Near-Duplicate가 600개를 넘었고 Exact Duplicate도 50개 가까이 존재했다. 파란 막대(train↔test)가 주황 막대(test 내부)보다 항상 컸다는 점, 그리고 CIFAR-10에 Exact가 단 하나도 없다는 점이 결정적이었다. 저자들은 CIFAR-100 구축 때 Krizhevsky가 언급한 기본 중복 제거 단계가 누락된 정황이라고 해석했다. pixel-match 제거는 필요조건이지만 충분조건이 아니라는 주장이 그래프 한 장에 압축됐다.
클래스별 분포는 Table 1에 정리됐다. CIFAR-10 상위는 frog(59), automobile(55), airplane(47), deer(40)이었고 하위는 cat(11), truck(14)였다. CIFAR-100 상위는 cockroach(33), orange(29), lawn mower(28), apple(26)으로 좁고 시각적으로 단조로운 카테고리가 몰렸다. "bowl, bus, forest" 단 세 클래스만 중복이 0개였다. 좁은 카테고리일수록 웹에서 같은 이미지의 변형본이 반복 수집된다는 가설을 직접 보여주는 통계였다.
별도 ablation은 없었다. 모듈을 떼고 붙이는 실험 대신 저자들은 모델 랭킹 안정성 분석을 그 자리에 놓았다. CIFAR-100에서는 6개 모델의 순위가 ciFAIR-100에서도 그대로 보존됐다. CIFAR-10에서는 WRN-28-10(3.89%→4.25%)과 DenseNet-BC(3.90%→4.20%)만 자리를 바꿨다. 두 모델의 원본 오차 차이가 0.01%p 수준이라 사실상 노이즈 영역이었다. 커뮤니티가 10년간 쫓아온 방향성은 잘못되지 않았다는 위안과, 1~2%p 차이로 갈리는 SOTA 순위표의 통계적 유의성은 의심해야 한다는 경고가 동시에 담긴 결과였다.
6. 직관과 시각 자료
직관은 Table 2의 마지막 열에 응축됐다. 모델 capacity가 커질수록(Plain-11 → PyramidNet) 절대 gap은 줄었지만 — CIFAR-100 기준 3.52%p에서 2.33%p로 — 상대 gap은 12~14% 구간에 머물렀다. 큰 모델이 작은 모델보다 generalization을 더 잘 한 게 아니다. 모든 모델이 자기 성능 대비 같은 비율로 duplicate를 암기했다. 이게 진짜 펀치였다.

이 인터페이스를 다시 들여다보면 방법론의 정신이 그대로 드러난다. 거리 수치 0.1826은 작아 보이지만 그 자체로 "중복"을 단정할 수는 없다. 픽셀 차이 맵(오른쪽)은 두 공룡 이미지가 거의 같은 실루엣을 공유하면서도 배경 텍스처에서 미세하게 어긋남을 보여준다. 자동 threshold는 이런 경계 사례에서 무너졌고, 그래서 사람이 키 4개로 라벨을 찍어야 했다. "feature distance + pixel diff + human judgment"의 3중 검증이 ciFAIR가 정립한 표준이었고, 이후 벤치마크 정화 작업의 사실상 reference protocol이 됐다.
직관 한 줄로 요약하면 이렇다. duplicate 부분집합에서 ResNet-110이 CIFAR-10 0%, CIFAR-100 2.9%를 찍은 그 비현실적 완벽함이, 10년간 우리가 측정해 온 "generalization"의 일부가 사실은 memorization의 가면을 쓴 환상이었음을 폭로했다. ciFAIR는 그 환상을 걷어내는 가장 작고 정확한 외과적 도구였다.
7. Critical View
가장 먼저 걸린 건 단일 annotator 라는 사실이었다. 4단계 경계 — Exact / Near / Very Similar / Different — 가 ciFAIR 신뢰성의 근거라고 저자들은 분명히 말했지만, 경계를 그은 사람이 한 명이고 inter-annotator agreement 수치도 함께 보고되지 않았다. 솔직히 §4 GUI 스크린샷에서 거리 0.1826짜리 공룡 pair를 봤을 때, 나라면 "Near"로 갔을지 "Very Similar"로 갔을지 즉답이 안 됐다. 그 경계가 ±1칸씩 흔들리면 보고된 3.3% / 10% 라는 숫자도 절대값이 아니라 ±α의 추정치로 읽어야 한다.
두 번째 의문은 검색기 자체에 있었다. duplicate mining에 쓰인 CNN은 다름 아닌 해당 데이터셋의 train split 으로 학습됐다. 같은 도메인 학습이 contrast/translation 같은 augmentation 방향에 invariance를 새긴다는 점이 모듈 A의 강점이었지만, 동시에 그 CNN이 못 잡는 의미적 중복은 구조적으로 누락됐다. 시점/포즈가 크게 다른 같은 객체, 혹은 의미는 같은데 픽셀이 멀리 떨어진 쌍이 nearest neighbor 상위권에 못 올라온 채 통과됐을 가능성이 남는다. 여기서 좀 헷갈렸다 — 저자들은 retrieval 관행을 그대로 빌려왔다고 했지만, retrieval과 벤치마크 정화는 false negative의 비용이 다른 작업이다.
세 번째는 stopping rule 의 비대칭성이었다. "Different가 20번 연속이면 종료"는 거리 정렬을 신뢰한 결정이지만, long-tail duplicate — 거리 분포 꼬리에 흩어진 진짜 중복 — 가 통계적으로 얼마나 누락됐는지는 정량화되지 않았다. 저자들이 이 휴리스틱을 합리적 비용 절충으로 봤지만, 보고된 duplicate 비율이 하한이라는 단서는 본문 어디에도 명시되지 않았다. train 내부 duplicate를 일부러 검사하지 않은 결정도 비슷한 결을 갖는다. 평가 공정성에 직접 영향이 없다는 판단은 맞지만, sample reweighting을 통한 학습 bias가 ciFAIR 재평가 결과에 얹혔을 가능성은 측정되지 않은 채 남았다.
마지막은 ciFAIR 자체의 분포 보존 문제다. §4에서 CIFAR-100 labeler instruction이 공개된 적 없어 저자들이 원본을 뜯어보며 line drawing/cartoon/multi-instance 허용을 추론했다고 했는데, 이 추론이 한 칸이라도 어긋났다면 새로 끼워 넣은 이미지들이 미세한 domain shift 를 만들어낸다. 재평가에서 보고된 상대 gap 9~14%가 순수 "duplicate 효과"인지, 아니면 일부가 distribution mismatch에서 왔는지를 이 논문 데이터만으로는 분리할 수 없다. 내가 medical imaging에서 비슷한 정화 작업을 시도했을 때도 같은 함정에 빠진 적이 있다. 후속 연구의 질문이 여기서 자연스럽게 따라 나온다. ImageNet/COCO 같은 대규모 벤치마크에 같은 수술을 시도할 때 단일 annotator는 더 이상 옵션이 아니고, 자동 near-duplicate detection 의 정밀도/재현율을 ciFAIR를 ground truth로 측정하는 reverse benchmark가 가능하다. "memorization-resistant" 평가 프로토콜 — duplicate 부분집합과 non-duplicate 부분집합의 오차를 함께 보고하는 관행 — 이 정착되면, ResNet-110의 그 비현실적 0%를 다른 모델/데이터셋에서도 일상적으로 감지할 수 있게 된다.
8. Take-aways
- CIFAR-100 테스트의 10% 가 학습셋 near-duplicate였다. 벤치마크 신뢰의 균열이다.
- Data augmentation의 invariance 학습이 곧 duplicate 암기 능력으로 되돌아왔다.
- ciFAIR 재평가에서 상대 오차는 9~14% 늘었지만 모델 랭킹은 거의 보존됐다.
- Pixel-exact 제거는 필요조건일 뿐이었다. feature-space + 사람 손이 새 표준이 됐다.
- ResNet-110이 duplicate에서 찍은 0%. 그건 일반화였을까, 기억이었을까.