5.5 정규화와 통계

5.5.1 Z-score와 min-max

feature xx의 Z-score는 다음과 같다.

x~=x−μtrainmax⁡(σtrain,ϵ) \tilde{x} = \frac{x-\mu_{train}}{\max(\sigma_{train},\epsilon)}

[-1,1] min-max normalization은 다음과 같다.

x~=2x−xminmax⁡(xmax−xmin,ϵ)−1 \tilde{x}=2\frac{x-x_{min}}{\max(x_{max}-x_{min},\epsilon)}-1

통계는 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 statsrepository 전체탐색, 시각화, 데이터 감사meta/stats.json
Policy train statstrain 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이 보장되지는 않는다.

이 장의 예제 코드·설정 파일 (5)

이 장의 자가 점검·가상실습