robomimic에서 두 데이터셋의 weight를 똑같이 설정해도 학습에 뽑히는 양이 반반이 되는 것은 아닙니다. normalize_weights_by_ds_size=False라면 큰 데이터셋이 더 자주 선택됩니다. 이 값을 True로 설정해야 데이터셋 크기를 나눈 가중치가 적용되고, 같은 weight가 데이터셋별 같은 선택 확률로 이어집니다.
여기서 바뀌는 것은 데이터를 뽑는 비율입니다. 관측값이나 행동값의 단위를 맞추는 정규화와는 별개입니다. robomimic 다중 데이터셋 학습 문서와 확인한 MetaDataset 코드를 기준으로, 설정 하나가 실제로 무엇을 바꾸는지 살펴보겠습니다.
900개와 100개를 섞으면 어떻게 달라질까
A에는 학습에 사용할 시퀀스 인덱스가 900개, B에는 100개 있다고 가정하겠습니다. 두 데이터셋의 weight는 모두 1입니다. 아래 수치는 이 가정과 코드의 샘플링 규칙으로 계산한 확률이며, 학습 실행 결과가 아닙니다.
| 크기 정규화 설정 | A의 인덱스 하나에 주는 가중치 | B의 인덱스 하나에 주는 가중치 | 데이터셋 선택 확률 A : B |
|---|---|---|---|
| False | 1 | 1 | 90% : 10% |
| True | 1/900 | 1/100 | 50% : 50% |
정규화를 끄면 A에는 가중치 1인 인덱스가 900개 있고, B에는 100개 있습니다. 전체 가중치 합에서 A가 차지하는 몫이 900/1,000이므로 A를 뽑을 확률은 90%입니다. 파일 두 개에 같은 숫자를 적었다는 사실만으로 두 파일의 영향이 같아지지 않는 이유입니다.
정규화를 켜면 A의 가중치 합은 900 × (1/900), B의 합은 100 × (1/100)이 되어 둘 다 1입니다. B의 각 인덱스는 A의 각 인덱스보다 9배 자주 선택될 수 있지만, 데이터셋 전체로 합친 확률은 같습니다.
일반화하면, 정규화를 끈 상태에서 데이터셋 i의 선택 확률은 weight_i × 인덱스 수_i에 비례합니다. 켠 상태에서는 크기가 상쇄되어 weight_i에 비례합니다. 따라서 B의 weight를 2로 올리는 설정도 정규화 여부를 함께 알아야 해석할 수 있습니다. 정규화를 켰다면 A와 B의 전체 비율이 1:2가 되지만, 끈 상태에서는 900:200이 됩니다.
이 확률이 모든 미니배치의 정확한 구성 비율을 뜻하지는 않습니다. 확인한 구현은 복원추출하므로 같은 인덱스가 반복해서 나올 수 있고, 짧은 구간의 실제 비율은 흔들릴 수 있습니다.
코드가 세는 크기는 파일 용량이나 시연 개수가 아니다
MetaDataset이 나누는 크기는 각 SequenceDataset의 길이입니다. 이 값은 선택된 시연에서 샘플러가 접근할 수 있는 시퀀스 인덱스 수로 정해집니다. 시연이 몇 개인지, HDF5 파일이 몇 GB인지와 같은 숫자가 아닙니다.
확인한 SequenceDataset 코드는 필터 키와 demo_limit으로 시연을 고른 뒤, 각 시연의 길이와 프레임 스택·시퀀스 길이·패딩 설정을 반영해 인덱스를 만듭니다. 예를 들어 끝부분 패딩을 허용하지 않으면 마지막에 완전한 길이의 시퀀스를 만들 수 없는 시작점은 빠집니다. 같은 파일도 어떤 부분과 설정을 읽느냐에 따라 샘플링에 쓰이는 크기가 달라질 수 있습니다.
따라서 “시연 900개 대 100개”라는 설명을 앞의 표에 그대로 대입하면 안 됩니다. 시연 길이가 서로 다르거나 시퀀스 설정이 다르면 표의 전제가 성립하지 않습니다. 두 소스의 압축률이나 이미지 해상도가 다를 때 파일 용량으로 대신 계산하는 것도 맞지 않습니다.
가령 20개 시점이 있는 시연에서 frame_stack=1, seq_length=4라면, 시퀀스 끝부분을 패딩하지 않을 때 만들 수 있는 시작점은 17개입니다. 끝부분 패딩을 허용하면 20개가 됩니다. 이 역시 코드의 인덱스 계산을 설명하는 가정 예시입니다. 시연 개수는 한 개로 그대로여도 로더 길이는 달라집니다.
비율이 예상과 다르면 실제 로더 길이부터 확인한다
설정과 관찰 결과가 다를 때는 파일별로 len(dataset), weight, normalize_weights_by_ds_size를 함께 확인하세요. 원래 파일 전체의 프레임 수가 아니라 현재 필터와 시퀀스 설정을 적용한 길이가 필요합니다. 앞서 계산한 90:10이나 50:50을 비교 기준으로 쓰려면, 먼저 실제 길이가 예시의 900/100과 맞아야 합니다.
그다음 샘플러가 선택한 인덱스의 출처별 횟수를 충분한 구간에서 셉니다. 한 배치가 반반이 아니라는 이유만으로 오류를 판정하지는 마세요. 반대로 오래 관찰한 비율이 기대와 크게 다르면 설정이 실제 실행에 전달됐는지, 다른 샘플러를 사용했는지부터 확인할 수 있습니다. 이는 점검 제안이며, 이 글에서 특정 학습의 오류를 재현한 것은 아닙니다.
복원추출의 효과도 분리해야 합니다. 900/100 예에서 균등하게 1,000번 뽑으면 B의 기대 선택 횟수는 500번입니다. 기존 100개 인덱스에서 반복 선택하는 것이므로 새로운 시퀀스 500개가 생기지는 않습니다. 어떤 혼합비가 목표 작업에 유리한지, 작은 소스의 반복을 얼마나 허용할지는 로봇 데이터 혼합 비율 가이드에서 다루는 별도의 판단입니다.
이 설정을 기록할 때는 데이터 revision과 필터 키, 선택된 시연 목록, 시퀀스·패딩 설정도 같이 남기세요. 그래야 나중에 데이터가 추가되거나 필터가 바뀌었을 때 같은 weight가 같은 선택 확률을 뜻하는지 다시 계산할 수 있습니다. 관측·행동의 시간과 좌표가 서로 맞는지는 로봇 학습 데이터 품질 검수로 먼저 확인해야 하며, 샘플링 비율을 조정해 그 불일치를 고칠 수는 없습니다.
공식 문서와 위에 고정한 코드 revision은 2026년 10월 15일 확인했습니다. robomimic 학습이나 샘플러 실행은 수행하지 않았고, 예시 비율을 권장 혼합비로 제시하지 않습니다.