
여전히 직감으로 설정을 선택하고 계신가요?
요약
하이퍼파라미터나 설정을 정할 때 직감에 의존하는 대신, 검증 비용을 낮추어 범위 전체를 스윕(Sweep)하며 곡선의 형태를 관찰하는 방법론을 제안합니다. 이를 통해 최적의 지점(Sweet spot)과 변곡점을 찾아내어 성능을 최적화할 수 있습니다.
핵심 포인트
- 단일 지점 선택 대신 범위 전체를 스윕하여 곡선의 형태를 관찰할 것
- 효율적인 스윕을 위해 무엇보다 먼저 검증 비용을 낮추는 것이 우선
- 매직 넘버를 제거하고 데이터 기반의 최적 지점(Sweet spot)을 찾을 것
- 해상도, 배치 크기 등 주요 설정값의 성능-비용 트레이드오프 파악
단일 지점이 아닌 곡선의 형태를 보세요 — Sweep이라 불리는 습관
임계값(Thresholds), 이미지 해상도(image resolutions), 배치 크기(batch sizes) — 대부분은 직감에 의해 선택됩니다. 한두 개를 시도해 보고, 더 나아 보이는 것을 선택하곤 하죠.
검증(verification) 비용이 저렴해진 순간, 저는 그런 방식으로 결정하는 것을 그만두었습니다. 단일 지점을 선택하는 대신, 저는 범위 전체를 스윕(sweep)하여 곡선의 형태를 관찰합니다. 최적의 지점(sweet spot), 변곡점(knee), 급격한 변화 지점(cliff) 등은 형태를 측정하기 전까지는 나타나지 않습니다. 단일 지점은 형태에 대해 아무것도 알려주지 않습니다.
그리고 스윕을 할 수 있는지 여부는 검증 비용이 얼마나 저렴한지에 달려 있습니다. 한 번의 실행 비용이 비쌀 때, 사람들은 다시 직감에 의존하게 됩니다. 무엇보다 먼저 검증 비용을 낮추세요 — 그것이 그 어떤 것보다 우선되어야 합니다.
엔지니어링은 매직 넘버(magic numbers)(명확한 근거 없이 코드에 자리 잡고 있는 구체적인 값들)로 가득 차 있습니다. 임계값, 이미지 해상도, 배치 크기, 타임아웃(timeouts). 이러한 값들을 어떻게 결정하시나요? 솔직히 말해서 — 대부분 직감입니다. 기껏해야 한두 개를 시도해 보고 더 나아 보이는 것을 선택할 뿐입니다.
하네스(harness)가 검증 비용을 10배가량 낮추었을 때, 저는 이런 방식으로 결정하는 것을 그만두었습니다. 단일 지점을 선택하는 대신, 저는 범위 전체를 스윕(sweep)하여 곡선의 형태를 관찰하기 시작했습니다. 그것이 바로 스윕(Sweep)입니다.
곡선은 단일 지점이 보여줄 수 없는 것을 보여줍니다
OCR이 텍스트를 감지할 때 사용하는 이미지 해상도를 예로 들어보겠습니다. "해상도가 높을수록 정확도가 높아진다" — 이것이 직관이 말하는 바입니다. 따라서 직감에 의존한다면, 망설임 없이 더 높은 해상도를 선택할 것입니다.
하지만 제가 해상도를 범위에 따라 변화시키며 정확도(CER, 낮을수록 좋음)와 속도를 함께 측정했을 때, 다음과 같은 곡선이 나타났습니다.
| 해상도 (Resolution) | 오류율 (Error rate, CER, 낮을수록 좋음) | 속도 (Speed) |
|---|---|---|
| 960 | 9.4% | 75 ms |
| ... | ||
![]() |
그림 1: OCR 탐지를 위한 해상도 스윕 (resolution sweep). x축은 지연 시간 (Latency), y축은 오류율 (error rate). 736이 속도와 정확도의 최적 지점 (sweet spot)입니다. 960과 비교했을 때, 오류율은 1.3%p 증가하지만 지연 시간은 절반으로 줄어듭니다. 480까지 낮추면 오류율이 급증하며 무너집니다.
참고: n=6, 작은 표본 = 방향성을 확인하기 위한 용도.
중간 지점인 736이 명백한 "최적 지점 (sweet spot)"이었습니다. 960과 비교하면 오류율은 단 1.3%p 상승할 뿐이지만 (9.4% → 10.7%), 속도는 절반으로 빨라집니다. 반면 480으로 낮추면 정확도가 무너집니다 (오류율이 10.7%에서 35%로 상승 — 3배 이상 증가). 곡선의 굴곡, 즉 니 (knee) 지점이 정확히 736에 위치합니다.
만약 제가 직감으로 960을 선택했다면, 아주 미미한 정확도를 위해 두 배의 시간을 계속 지불했을 것입니다. 만약 480을 선택했다면 텍스트를 전혀 읽을 수 없었을 것입니다. 이 최적 지점은 양 끝단과 중간 지점을 모두 측정했을 때에만 비로소 보였습니다. 단 하나의 지점만 측정한다면 결코 이를 찾아낼 수 없을 것입니다.
곡선에는 "니 (knee)"가 있습니다
곡선만이 보여줄 수 있는 것이 하나 더 있습니다. 바로 니 (knee) — 더 이상의 노력이 거의 아무런 개선을 가져오지 못하는 굴곡 지점입니다.
학습 데이터 (training data)를 추가함에 따라 품질이 어떻게 상승하는지 스윕했을 때, 어려운 사례들에 대한 독해 정확도 (reading-comprehension accuracy)는 특정 양(매우 적은 양)의 데이터를 넘어서자 평탄해졌습니다 (flat). 데이터를 아무리 많이 추가해도 어려운 사례들은 개선되지 않았습니다. 니 (knee) 지점을 지나면 투자는 낭비됩니다. 이는 다른 레버(모델의 용량 (the model's capacity))가 필요하다는 신호입니다.
이것 역시 한두 개의 지점만으로는 보이지 않습니다. 곡선을 그려야만 "여기서부터는 아무런 효과가 없다"는 경계선을 볼 수 있습니다.
왜 이제는 스위핑 (sweeping)이 가능한가
스위핑 (Sweep)은 오래된 아이디어입니다. 하지만 실제로 이를 철저하게 수행하는 사람은 그리 많지 않을지도 모릅니다. 이유는 간단합니다. 비용이 많이 들기 때문입니다. 11개의 임계값 (thresholds)을 수동으로 시도한다는 것은 11번의 검증 (verification) 실행을 의미합니다. 이는 자신의 정신 상태를 의심하게 만들 정도의 실행 횟수입니다.
변화된 점은 harness가 검증 과정에서 인간을 제외시켰다는 것입니다. 프레임 시퀀스를 디스크에 구워두기만 하면, 11개의 설정을 수동 작업 없이 병렬로 (in parallel) 실행할 수 있습니다. 과거에는 사람이 장치를 들고 설정당 한 번씩 기록해야 했다면, 이제는 모든 것이 한 번의 배치 (batch)로 실행됩니다. 검증 비용이 저렴해지는 순간, "표면을 스위핑하여 형태를 관찰하는 것"이 "직감으로 한 지점을 선택하는 것"보다 더 신뢰할 수 있고 가치 있는 일이 되었습니다. 스위핑은 harness가 만들어낸 여유(slack)를 활용한 제가 발견한 첫 번째 사례였습니다.
교훈
- 직감으로 매직 넘버 (magic numbers)를 설정하지 마세요. 임계값 (thresholds), 해상도 (resolution), 배치 크기 (batch size) 등 대부분의 경우, 왜 그 값이 하필 그 숫자인지에 대한 근거가 없습니다.
- 한 지점이 아니라 범위를 스위핑하고 곡선을 보세요. 최적의 지점 (sweet spot)과 절벽 (cliff)은 전체 형태를 측정해야만 비로소 보입니다. 특히 니 (knee), 즉 "여기 너머로는 아무것도 작동하지 않는다"라고 꺾이는 지점은 다른 레버로 옮겨가야 한다는 신호입니다.
- 스위핑이 가능한지 여부는 검증 비용이 얼마나 저렴한지에 달려 있습니다. 단 한 번의 검증 실행 비용이 비싸면 사람들은 직감에 의존하게 됩니다. 먼저 검증을 저렴하게 만드세요. 그러면 스위핑은 당연히 해야 할 일이 됩니다.
다음 편: 여러 목적 함수 (objectives) (속도 × 정확도 × 비용)에 대해 스위핑된 점들의 구름을 읽을 때 무엇이 보이는지에 대해 — Pareto로 이어집니다. 스위핑과 프런티어 (frontier)를 읽는 것은 동전의 양면과 같습니다.
부록: raw data
| Sweep | Result | Conditions & caveats |
|---|---|---|
| OCR 탐지 해상도 (Resolution for OCR detection) | 960 = 오류율 9.4% / 75ms, 736 = 10.7% / 40ms (sweet spot), 480 = 35% / 18ms (박스 탐지 붕괴) | 세로 방향 (Portrait orientation), JA+EN, n=6 소규모 샘플 = 방향성 확인용 |
| ... | ||
| 원문은 LYR Performance Note #021에서 처음 게시되었습니다 — “Measure & tune — measure it right, then fit the settings” 시리즈의 일부입니다. 전체 시리즈는 lyr.jp/en/research에서 확인할 수 있습니다. |
AI 자동 생성 콘텐츠
본 콘텐츠는 Dev.to AI tag의 원문을 AI가 자동으로 요약·번역·분석한 것입니다. 원 저작권은 원저작자에게 있으며, 정확한 내용은 반드시 원문을 확인해 주세요.
원문 바로가기