실험 설계
공정하고 재현할 수 있는 실험은 어떻게 짜는가?
보고서의 무게 중심은 실험과 결과이다. 실험을 잘 설계하면 결과가 저절로 따라오고, 실험이 흐트러지면 결과가 아무리 좋아도 설득력이 떨어진다. 원칙은 넷이다.
원칙 1: 한 번에 하나만 바꾼다
기준선에서 변형 실험으로 넘어갈 때 두 가지 넘게 함께 바꾸면, 어느 변경이 결과의 차이를 만들었는지 판단할 수 없다. seed, 데이터 분할, epoch 같은 통제 변수는 기준선과 같게 두고, 실험마다 독립 변수 하나만 움직인다.
| 변수 | 정의 | 예(탐지 사례) |
|---|---|---|
| 독립 변수 | 실험자가 일부러 바꾸는 설정 | 손실 함수, 임계값 , 입력 채널 수 |
| 종속 변수 | 재는 결과값 | , F1, RD 맵당 false alarm |
| 통제 변수 | 기준선과 같게 두는 설정 | seed, 데이터 분할, epoch 수, optimizer |
원칙 2: 기준선 재현이 모든 비교의 출발점이다
자기 모델이 기준선보다 낫다고 말하려면 먼저 기준선을 자기 환경에서 그대로 재현해야 한다. 교재의 기준선 수치를 인용하기만 하면, 환경의 차이(GPU, 라이브러리 버전, 무작위 seed)로 생긴 변동을 모두 자기 기여로 잘못 돌릴 위험이 있다. 재현한 기준선 수치가 교재의 수치와 0.01~0.03쯤 다른 것은 정상이다. 그 차이를 보고서에 한 줄로 적으면 된다.
원칙 3: 실패 유형을 분석한다
모델이 잘 맞힌 사례만 늘어놓은 보고서는 설득력이 약하다. 모델이 어떤 입력에서 왜 틀렸는지 설명하는 한 단락이 보고서를 깊게 만든다. 사례마다 실패 유형을 찾는 곳은 다음과 같다.
| 사례 | 실패 유형의 1차 후보 | 관찰 방법 |
|---|---|---|
| RD 맵 탐지 | 낮은 SNR 표적의 미탐지, 사이드로브 근처의 false alarm | SNR 구간별 , 잘라 낸 장면의 TP/FP 겹쳐 보기 |
| 행동 인식 | 비슷한 활동 사이의 혼동, 다른 aspect angle에서의 정확도 하락 | 혼동 행렬, aspect angle별 정확도 표 |
| 지도 작성 | 낮은 SNR / 좁은 간격 표적의 각도 MAE 증가, BEV의 고스트 | SNR 구간별 각도 MAE, 장면별 점유 격자 지도 시각화 |
| SAR speckle 제거 | 경계 영역의 세부 손실, 고른 영역의 지나친 평활화 | EPI(경계 보존 지수), 고른 영역의 ENL 비교 |
원칙 4: 재현성은 코드와 seed에서 시작한다
재현성은 결과만큼 중요하다. 아래 점검 목록을 코드 저장소의 README에 그대로 옮겨 두면 다른 사람이 한 번에 확인할 수 있다.
- 실행 명령 한 줄(예:
python train.py --generate --epochs 30 --seed 42)이 README 맨 위에 있다. seed를 명령행에서 정하고 코드에서 고정한다(numpy,torch,random모두).- 데이터를 학습/검증/테스트 세트로 나누고, 검증 세트에서 정책(임계값, early stopping 등)을 고른 뒤 테스트 세트는 한 번만 평가한다.
- 학습 기록(손실, 지표)을 파일로 저장하고, 보고서의 그림을 그 기록에서 다시 만들 수 있다.
requirements.txt나environment.yml로 라이브러리 버전을 고정한다.
실험을 돌릴 때마다 "무엇을 바꾸었나 / 왜 바꾸었나 / 결과는 어땠나"를 한 줄씩 적어 두면, 보고서를 쓸 때 메모만 모아도 Method와 Results가 절반 찬다. 이 기록은 아무것도 바꾸지 않은 같은 실험을 두 번 돌리는 일도 막아 준다.
강의 노트