로봇 조작 RL: 무엇이 효과가 있고 무엇이 효과가 없는지 보상 형성
로봇 조작에 대한 보상 공학에 대한 실용적인 가이드 <unk> 밀집한 대 희소한 보상, 잠재력을 기반으로 한 형성, 교육과정 보상 진행, 시미-실적 격차, 그리고 보상 해킹을 피하는 방법.
[로봇 무기 가이드]
[← 블로그]
보너스 디자인은 교과서에서 설명되지 않고, 연습생들이 고통스러운 경험을 통해 학습하는 부분입니다. 우리가 실제로 조작에 효과가 있다는 것을 발견했습니다.
밀집한 대 저하 보상: 핵심 거래
덩어리 보상
이를 수치를 위해: 시뮬레이션된 [OpenArm] (
** 엄지손가락 규칙:** 작업 지평이 50 단계 미만이고 목표 구성이 명확할 때만 희귀한 보상을 사용하십시오. 다른 모든 것
잠재력 에 기초 한 형성: 이론적 으로 안전 한 밀집 한 보상
잠재력을 기반으로 한 보상 형성에 대한 Ng, Daswani, and Russell (1999) 정리는 최적의 정책을 변경하지 않고 밀집한 보상을 추가하는 데 수학적으로 근거한 접근법을 제공합니다. 구조는:
조작에 있어서 가장 자연스러운 잠재 함수는 목표까지의 음의 거리가 있습니다. 이것은 에이전트가 대상을 목표로 이동할 때 긍정적인 보상을 주는 형식 용어를 생성하고, 이동할 때 부정적인 보상을
잠재력 을 바탕으로 한 형성 을 실천 하는 것
이 이론은 깨끗하다. 구현은 아닙니다. 주요 미묘함은: 잠재 기반의 형성은 할인되지 않은 또는 제대로 할인되지 않은 무한한 지평의 경우에만 최적성을 보존합니다. 실제로는 이론적 보증을 깨는 이른 종료로 끝없는 에피소드를 실행합니다. 형성 용어는 이제 작업을 빨리 완료하는 대신 에피소드를 연장 (더 긍정적인 형성 축적) 하는 인센티브를 만들 수 있습니다.
수정 방법은 잠재 기반의 형성과 단계별 시간 벌금과 지배적인 최종 보상과 결합하는 것입니다. 시간 벌금은 에피소드가 계속 끌리지 않도록 보장하고, 최종 보상은 작업 완료가 항상 축적된 형성 신호를 지배하도록 보장합니다.
def compute_reward(self, obs, action, next_obs, done, info):
# Potential-based shaping (preserves optimal policy)
phi_current = -torch.norm(obs["object_pos"] - obs["target_pos"], dim=-1)
phi_next = -torch.norm(next_obs["object_pos"] - next_obs["target_pos"], dim=-1)
shaping = self.gamma * phi_next - phi_current
# Grasp bonus: activated only on first contact
grasp_reward = 0.0
if info["contact_force"] > self.contact_threshold and not info["has_grasped"]:
grasp_reward = 0.5
# Sparse task completion (dominates all dense signals)
success = next_obs["object_at_target"].float()
task_reward = 10.0 * success
# Time penalty (discourages episode prolongation)
time_penalty = -0.01
# Action smoothness penalty
jerk = torch.norm(action - 2 * obs["prev_action"] + obs["prev_prev_action"], dim=-1)
smooth_penalty = -0.02 * jerk
total = task_reward + 0.3 * shaping + grasp_reward + time_penalty + smooth_penalty
return total
핵심 비율: 작업 완료 보상 (10.0) 은 적어도 10x 일 에피소드 전체의 최대 누적 형태가어야 합니다. 작업 공간 지각은 ~ 1.0m, 에피소드 200 단계의 경우, 최대 누적 형태는 약 0.3 × 1.0 = 0.3 각 단계, 또는 60 에피소드 전체에 대한 것입니다. 따라서 작업 보상 10.0는 실제로 너무 낮습니다. 우리는 10.0을 명확하기 위해 사용합니다. 생산에서 적절한 스케일을 사용합니다.
다단계 잠재적인 기능
많은 조작 작업은 접근, 잡기, 운송, 장소 등 여러 순서적인 단계를 가지고 있다. 단일 잠재적인 기능 (최후 목표까지의 거리는) 는 접근 및 잡기 단계에 대한 형성 신호를 제공하지 않는다. 해결책은 작업 진행에 따라 전환되는 단계 인식 잠재적인 기능입니다.
- 단계 1
접근: Φ(s) = −d(끝_효과자, 객체). 객체 쪽으로 기하급수 제공. - ** 2 단계
- ** 3 단계
운송:** Φ(s) = −d(물, 목표). 포착 후만 활성 인 것을 감지합니다. - 단계 4
장소: Φ(s) = −d(물, 목표) − 방향성_실점(물, 목표_ 방향성). 대상으로부터 5cm 이내에 있는 경우 활성화됩니다.
단계 전환은 시간 단계가 아닌 물리적 신호 (접촉력 임대, 물체의 높이의 변화) 를 통해 감지되어야 합니다. 시간 기반의 단계들은 단계 전환을 조기에 시작시키는 것을 배우게 되는 이용 기회를 만들어 줍니다.
조작-특별한 보상 구성요소
| Component | Normalization | Weight | Activate When | Purpose |
|---|---|---|---|---|
| EE-to-Object Distance | 작업 공간 diagonal (0.8–1.2m) | 0.1–0.3× | Before first contact | Encourage approach |
| Object-to-Target Distance | 작업 공간 diagonal | 0.4–0.6× | After grasp detected | Primary transport signal |
| Grasp Quality | [0, 1] continuous | 0.1–0.2× | During contact | Prevent dragging |
| Orientation Alignment | 사원수 error [0, π] | 0.1–0.2× | Last 20% of transport | Correct placement angle |
| Action Smoothness (jerk) | Max expected jerk | −0.05–0.1× | Always | Hardware-safe motions |
| Joint Limit Penalty | Binary per joint | −0.1× per violation | Always | Stay within workspace |
| Collision Penalty | Binary | −1.0 terminal | Self-collision or table | Physical safety |
| Time Penalty | Constant per step | −0.01× | Always | Discourage stalling |
** 객체 거리 최종 효과:** 구성 요소를 [0, 1]에서 유지하기 위해 작업 공간 디아곤알 (일반적으로 0.8
** 대상 거리:** 포착이 감지된 후에만 활성화한다 (접촉력 > 문턱). 작업 공간에 의해 정상화한다. 무게: 0.4
Grasp 품질: 접촉 안정성의 쌍성 또는 연속 측정
** 액션 매끄러움:** 하드웨어를 손상시키는
보너스 해킹: 현장 가이드
다음 해크는 조작 보상 디자인에서 반복적으로 나타납니다. 그들은 경고로 나열되어 있습니다. 발견이 아닙니다.
| Hack Name | Mechanism | Frequency | Fix |
|---|---|---|---|
| Hover Exploitation | EE hovers near object, accumulating proximity reward without grasping | Very common | Disable EE-proximity after first contact; add time penalty for non-contact phases |
| Table Push for Termination | Pushes object off table to trigger early episode end (less accumulated negative reward) | Common | Large negative terminal reward (−10×) for out-of-bounds; verify termination conditions |
| Success Oscillation | Rapidly oscillates object through target zone to trigger success on rolling window check | Common | Require success maintained for 10+ consecutive steps |
| Gravity Exploitation | Drops object near target from height, scoring placement reward during free-fall | Moderate | Check that EE is within 5cm of object at success time; require low object velocity (<0.05 m/s) |
| Contact Cycling | Repeatedly touches and releases object to accumulate first-contact bonus | Moderate | Make grasp bonus one-time per episode using a boolean flag |
| Joint Limit Surfing | Jams joints against limits to achieve workspace positions unreachable with smooth motion | Occasional | Add continuous joint-limit proximity penalty, not just at-limit penalty |
| Sim Physics Exploitation | Exploits penetration or tunneling bugs to teleport objects | Rare but catastrophic | Validate object positions between steps; flag teleports >5cm as invalid |
해킹 방지 설계 원칙
- 터미널 보상 지배: 작업 완료 최종 보상은 에피소드 한 에피소드 중 가능한 최대 누적 밀도 보상 10x 이상으로 있어야합니다. 이것은 정책이 항상 밀도 높은 보상 축적을 이용하는 것보다 실제 작업을 완료하는 것을 선호하는 것을 보장합니다. 최대 값을 계산하십시오: (단계 한 단계 최대 모양) × (최고 에피소드 길이가) × (형량) 당신의 임상 보상도 그 규모를 1배 넘어야 합니다.
- ** 컴포넌트 정상화:** 모든 밀집 보상 구성 요소를 [-1, 1]에 보관하고 명시적인 무게를 설정하십시오. 다른 스케일에서의 비정상화 된 보상 구성 요소는 예측할 수 없을 정도로 상호 작용하여 보상 기능을 구현 세부 사항에 매우 민감하게 만듭니다. 훈련 중에 각 구성 요소의 실행 통계를 기록합니다.
- ** 적대적 테스트:** 완전한 훈련 실행 전에, 적대적 작업을 완료하지 않고도 의도적으로 보상을 극대화하려고 노력하는 스크립트 적대적 정책으로 보상 기능을 테스트하십시오. 적대자가 작업을 완료하지 않는 높은 보상 경로를 발견하면 GPU 시간을 낭비하기 전에 재설계하십시오. RCSV에서는 일반적인 조작 작업을위한 ~ 20 개의 적대적 스크립트의 라이브러리를 유지합니다. 5분 정도 걸리고 며칠도 절약할 수 있습니다.
- ** 보상 구성 요소 기록:** 훈련 중에 보상 구성 요소를 각각 기록하고, 전체만을 기록하지 마십시오. 보상 곡선이 건강하게 보이지만 성공률이 떨어지면 구성 요소 분분으로 에이전트가 어떤 용어를 활용하고 있는지 알 수 있습니다. 각 구성 요소를 별도의 스칼라로 추적하기 위해 TensorBoard 또는 Weights & Biases를 사용합니다.
교육 계획 에 대한 보상
복잡한 다단계 작업에 있어서
단계 1: 한 접근 (단계 0~5M)
최종 효과자만 객체에 가깝게 보상합니다. 포착 품질 요구 사항이 없습니다. 배치 정확도 없습니다. 목표는 기본 팔 제어 및 작업 공간 탐색을 배우는 것입니다. 성공 임대: EE 객체에서 5cm 이내에.
2단계: 학위 취득 (5M~20M 단계)
포착 품질 보상이 추가됩니다. 근접 문턱을 강화합니다. 요인은 이제 물체를 둘러싼 손가락을 실제로 닫아야하며 안정적인 접촉을 설정해야합니다. 성공 문턱: 테이블 표면에서 10cm 높이 물체가 들어간 경우.
3단계: 운송 (단계 20M50M)
대상에서 대상까지의 거리 보상 활성화를 위한 작업. 대리인은 대상에서 5cm 이내에 있는 객체를 붙잡고, 끌어올리고, 목표 방향으로 이동해야 한다.
4단계: 정밀 배치 (50M~100M 단계)
모든 임계값을 좁히십시오. 방향성 조율 보너스를 추가하십시오. 기하급수적 정확성 보너스를 활성화하십시오. 성공 임계값: 방향성 오류 <5도와 목표로부터 2mm 이내에 있는 객체. 여기서 가장 많은 인내와 가장 신중한 보상 조정이 필요합니다.
class CurriculumRewardManager:
"""Manages reward curriculum progression based on training progress."""
def __init__(self, env_cfg):
self.stages = [
{"name": "reach", "threshold": 0.70, "min_steps": 2_000_000},
{"name": "grasp", "threshold": 0.60, "min_steps": 5_000_000},
{"name": "transport", "threshold": 0.50, "min_steps": 10_000_000},
{"name": "precise", "threshold": None, "min_steps": 0},
]
self.current_stage = 0
self.total_steps = 0
def maybe_advance(self, success_rate, steps_in_stage):
stage = self.stages[self.current_stage]
if (stage["threshold"] is not None
and success_rate >= stage["threshold"]
and steps_in_stage >= stage["min_steps"]
and self.current_stage < len(self.stages) - 1):
self.current_stage += 1
print(f"Advancing to stage: {self.stages[self.current_stage]['name']}")
def get_reward_weights(self):
"""Returns reward component weights for current curriculum stage."""
if self.current_stage == 0: # reach
return {"ee_dist": 1.0, "grasp": 0.0, "obj_dist": 0.0, "orient": 0.0}
elif self.current_stage == 1: # grasp
return {"ee_dist": 0.5, "grasp": 0.5, "obj_dist": 0.0, "orient": 0.0}
elif self.current_stage == 2: # transport
return {"ee_dist": 0.2, "grasp": 0.3, "obj_dist": 0.5, "orient": 0.0}
else: # precise
return {"ee_dist": 0.1, "grasp": 0.2, "obj_dist": 0.4, "orient": 0.3}
단계 진출 문턱 (70%, 60%, 50%) 은 의도적으로 100% 이하로 설정됩니다. 정책은 각 단계에서 필수적인 행동을 배워내면, 쉬운 버전에 적합하지 않은 후에 앞으로 나아가기를 원합니다. 진출하기 전에 95%의 성공을 기다리면 정책은 쉬운 보상을 위해 최적화된 습관을 개발합니다. 정확성 요구 사항이 증가하면 배워내기가 어렵습니다.
시미스 로 리얼 보상 격차
시뮬레이션에서 완벽하게 작동하는 보상 기능은 도메인 무작위로도 실제 하드웨어에서 완전히 다른 행동을 생성할 수 있습니다. 보상 격차는 크게 세 가지 원천을 가지고 있습니다.
1. 연락처 동화 부합
Sim 접촉 모델 (MuJoCo의 소프트-컨택트, 아이작 Sim의 GPU 가속화 된 딱딱한 몸) 은 마찰 계수, 접촉 딱딱성 및 변형 행동으로 현실과 다르다. 미세한 초자연 접촉 상태에 따라 달라지는 보상 (그램프 품질, 슬라이딩 마찰) 은 sim vs. 실제에서 다른 기하급수들을 생성합니다. 완화: 훈련 중에 추부 계수 (0.3
2· 관찰 지연
실제 로봇 관측은 변수 지연 (관동코더의 경우 1
3. 액추이터 모델 부합
시뮬레이션 모터는 명령에 즉각적이고 정확하게 반응한다. 실제 서버는 대역폭 제한을 (정상적으로 위치 제어 서버는 5
** 실용적 시험:** 시뮬레이션 훈련 정책을 배포하기 전에 모든 추상화 를 동시에 극단화 로 설정 한 시뮬레이션 에서 평가 하십시오 (최고의 경우 마찰, 최대 지연, 가장 낮은 액추어터 대역폭). 성공률이 50% 이상 유지된다면, 정책 은 실제 배포 를 위해 충분히 견고 하게 될 것 이다. 30% 이하로 떨어지면 훈련 중에 더 많은 추상화 를 추가 한다.
특정 과제 에 대한 보상 기능
다음은 일반적인 조작 작업에 대한 현장 테스트 보상 사양이 있으며, RCSV에서 여러 개의 설계 반복을 통해 조정됩니다:
선택 및 장소 (단순)
2단계: 접근 + 운송. 접촉까지 EE 거리 모양 (중도 0.3) 그리고 포착 후 객체 거리 모양 (중도 0.5) . 10단계 동안 목표로부터 3cm 이내에 있는 객체에 대한 터미널: +100. 시간 처벌: −0.01/단계. 총 훈련: ~15M 단계 아이작 연구소 (4096 envs), ~45분 RTX 4090.
페그 삽입 (밀착 용납 < 1mm)
4단계 교육과정이 필요합니다. 접근, 잡기, 거친 조율 (홀 축의 10도 내에서
객체 재주정 (손으로)
단단계, 하지만 현명한 손가락 제어가 필요합니다. 보상은: 현재와 목표 지향 사이의 방향 오류, SO에 지질 거리로 측정된다(3). 중요한 추가: 객체 선형 속도를 처벌 ( 객체가 직장에 회전해야 하며, 작업 공간을 건너 비행하지 않아야 한다). 또한 접촉력의 갑작스러운 감소로 감지되는 손가락-물류 슬립 이벤트를 처벌합니다. 이 작업은 매우 어렵다고 알려져 있습니다. 200M+ 단계와 40
2차례의 집회
각 팔에 대한 별도의 보상 스트림과 조율 보너스를 요구합니다. 각 팔은 각 접근/잡아/운송 단계를 얻습니다. 조율 보너스는 양 팔이 조립 단계에 대한 올바른 상대적인 구성에 있다는 것을 보상합니다. 이 때 보너스 설계는 정말 어려워집니다. 조정에 대한 너무 많은 무게는 두 팔이 실제로 작업을 완료하지 않고 올바른 상대적 자세로 얼어붙게 만듭니다. 너무 적은 무게와 팔이 충돌합니다. 우리는 0.15 × 무게를 조정에 사용합니다. 조정 잠재력은 두 개의 잡힌 부분의 결합 표면의 부정적인 거리로 정의됩니다.
보너스 설계 에 대한 일반적인 실수
- ** 관찰에 대한 보상, 명시하지 않습니다:** 특권적 인 시미 상태 (정확한) 보다 카메라 관찰 (음악이있는) 에서 계산 보상.
- ** 에피소드 경계를 잊어 버리는 것:** 잠재력 기반의 형성은 에피소드 리셋을 올바르게 처리해야 합니다. 에피소드 시작 시 잠재력을 제로로 하지 않으면, 각 에피소드의 첫 단계는 최종 상태 잠재력과 초기 상태 잠재력 사이의 차이로부터 거짓 된 큰 형성 신호를 얻습니다.
- ** 보상 지연 부합:** 만약 당신의 보상 이 접촉 탐지 에 달려 있고, 당신의 접촉 탐지 에 2 단계 지연이 있는 경우, 보상 신호 는 2 단계 지연으로 도착한다. 정책 은 "가어야 할 때"보다 2 단계 앞당기도록 배우며, 진동을 일으킨다. 보상 계산과 관찰 시기가 일치하도록 한다.
- ** 경계에 테스트 하지 않습니다:** 작업 공간의 중심에 있는 객체에 대해 보상이 작동할 수 있지만, 가장자리에 가까운 객체 (거리의 정상화가 다르게 행동하는 곳) 또는 로봇의 관절 한계에 가까운 객체에 대해 교류할 수 있습니다 (접근성 제한이 보상 기하급수와 상호 작용하는 곳). 작업 공간의 네 각지에서 객체들을 사용하여 테스트합니다.
- ** 단일 씨앗 평가:** RL는 씨앗에 민감한 것으로 알려져 있습니다. 한 씨앗에서 90%의 성공을 거두는 보상으로 다른 씨앗에서 20%를 얻을 수 있습니다. 보상 작업을 완료하기 전에 항상 적어도 3 개의 씨앗을 평가하십시오. RCSV에서는 5 개의 씨앗을 표준으로 사용하고 평균 ± std를 보고합니다.
도구 및 프레임워크
다음 프레임워크는 조작 RL에 대한 보상 기능 인프라를 제공합니다:
- Isaac Lab (NVIDIA): GPU 평행형 엔버가 내장된 보상 기능 클래스. 규모 (4,096
16,384 평행 엔버) 에 적합하다. T6 클래스는 각 구성 요소에 대한 로그 아웃 박스를 통해 중량된 다 구성 요소 보상을 지원합니다. 생산 훈련에 권장됩니다. - MuJoCo + 체육관: 보다 정확한 접촉 물리학, 더 적은 병렬 환경 (특히 1
64 CPU). 개별 에피소드를 상세히 검사해야 하는 보상 프로토타입을 위해 더 좋습니다. T7 은 보상 해크를 진단하는 데 귀중합니다. 0.1 × 속도에서 에이전트의 행동을 관찰하는 것은 보상 곡선이 숨기는 것을 보여줍니다. - robosuite (스탠포드): 표준 보상 기능으로 미리 구축된 조작 작업. 보상 설계에 좋은 출발점.
- RCSV RL 환경: 오픈아름 및 다른 RCSV 하드웨어 모델, 검증된 보상 기능 및 도메인 무작위 설정과 함께 미리 구성된 아이작 연구소 환경. [문서]
관련 독서
이미레이션 학습에서 흔히 발생하는 오류 · 행동 정책 설명 · 로봇 스타트업 기술 스택 · 로봇 방언사 · RCSV RL 환경
RCSV의 시뮬레이션 환경은 표준 조작 작업에 대한 참조 보상 구현을 포함하고 있으며, 해킹 방지 방지를 내장하고 있습니다. 사용 가능한 작업 및 보상 사양을 [RL 환경 문서]
조작 RL에 대한 시뮬레이션 환경
RCSV는 일반적인 조작 작업에 대한 검증된 보상 기능이 있는 미리 구성된 시뮬레이션 환경을 제공합니다. 처음부터 구축하는 대신 검증된 보상 디자인으로 시작하십시오.







