5.5 정규화와 통계
5.5.1 Z-score와 min-max
feature 의 Z-score는 다음과 같다.
[-1,1] min-max normalization은 다음과 같다.
통계는 train split에서만 계산하고 validation/test에 재사용한다. 전체 dataset 통계를 먼저 계산하면 evaluation distribution 정보가 training pipeline에 누출된다. code/normalization.py가 seed를 고정한 episode-level shuffle과 두 정규화를 구현한다. 실제 프로젝트에서는 task variation, 작업자, 날짜를 group으로 묶은 stratified split을 우선한다.
5.5.2 작은 분산과 outlier
거의 움직이지 않는 joint의 표준편차가 0에 가까우면 작은 noise가 큰 normalized value가 된다. epsilon, std floor 또는 해당 feature 고정 처리를 명시한다. min/max는 잘못된 encoder spike 하나에 민감하므로 percentile-based clipping을 검토하되, joint safety limit과 통계적 clipping을 혼동하지 않는다.
5.5.3 action representation
- absolute joint target: 누적 drift가 적지만 embodiment와 calibration에 민감하다.
- delta joint: local motion 학습이 쉽지만 drift와 scale 선택이 중요하다.
- end-effector delta: task geometry에 직관적이지만 IK와 singularity 처리가 필요하다.
학습과 배포에서 같은 representation과 inverse normalization을 사용한다. action 통계를 state 통계로 역정규화하는 실수는 shape가 같으면 조용히 지나갈 수 있다.
5.5.4 Dataset 전역 통계와 정책 학습 통계
LeRobotDataset v3의 meta/stats.json은 dataset repository 전체를 요약한다. 데이터 탐색과 무결성 점검에는 유용하지만 한 repository에서 일부 episode만 train으로 쓰는 경우, 이 전역 통계를 정책 정규화에 그대로 사용하면 validation/test 정보가 들어간다.
| 통계 | 범위 | 용도 | 저장 위치 예 |
|---|---|---|---|
| Dataset global stats | repository 전체 | 탐색, 시각화, 데이터 감사 | meta/stats.json |
| Policy train stats | train episode만 | 학습 및 배포 정규화 | checkpoint/run manifest |
split을 먼저 고정하고 train episode에서 stats를 다시 계산해 policy artifact에 저장한다. 또는 split별 dataset revision/repository를 materialize한다. 어느 방법이든 dataset revision, episode ID, stats hash를 checkpoint와 묶는다. dataset.meta.stats를 출력했다는 사실만으로 train-only normalization이 보장되지는 않는다.