오늘 끝나면
시뮬레이션과 Sim2Real
- ✓시뮬레이션과 Sim2Real의 핵심 문제를 한 문장으로 설명한다
- ✓오른쪽 실습에서 시뮬레이션과이 어떻게 움직이는지 관찰한다
- ✓다음 강의와 이어지는 한계를 말할 수 있다
실습 미션
가상에서 먼저 훈련하고 현실로 옮기기 이 문장이 실제로 무슨 뜻인지 실습에서 한 번 손으로 확인한다.
성공 조건
- □실습의 기본값을 먼저 관찰
- □입력값이나 모드를 한 번 이상 바꿔 결과 비교
- □왜 결과가 바뀌었는지 한 문장으로 설명
Physical AI · 13
시뮬레이션과
Sim2Real
현실에서 로봇을 수백만 번 훈련시키는 건 느리고 위험하고 비싸다.
그래서 가상 세계에서 먼저 익힌 다음 현실로 옮긴다. 이게 Sim2Real이다.
단, 시뮬과 현실의 틈(reality gap)이 발목을 잡는다. 도메인 랜덤화로 넘는다.
현실 훈련은 느리고 위험하고 비싸다
강화학습은 수많은 시행착오를 먹고 자란다. 그 시도를 전부 현실에서 하면 답이 안 나온다.
로봇 팔이 물건 집기를 배우려면 수십만에서 수백만 번 시도가 필요하다.
현실에서는 한 번 시도에 몇 초가 걸리고, 사람이 물건을 다시 세팅해 줘야 한다.
100만 번이면 몇 달이 아니라 몇 년이 걸리는 계산이다.
게다가 실패가 그냥 0점으로 끝나지 않는다.
모터가 타고, 기어가 부러지고, 팔이 책상을 들이받는다. 매 실패가 곧 수리비다.
드론이나 자율차라면 한 번의 실패가 추락과 사고로 이어져 위험까지 크다.
그래서 망가질 게 없고 시간이 공짜인 곳에서 먼저 시킨다. 그게 시뮬레이션이다.
막대는 현실 훈련의 부담을 나타낸다. 그래서 먼저 시뮬로 간다.
가상에서 먼저, 빠르게, 안전하게
시뮬레이션은 컴퓨터 안에 중력과 마찰과 충돌이 도는 가짜 물리 세계다.
물리 엔진이 로봇과 환경의 움직임을 수식으로 계산한다.
대표적으로 MuJoCo, Isaac Gym, Gazebo, PyBullet 같은 것들이 쓰인다.
여기선 로봇이 넘어져도, 팔이 부러져도 리셋 한 번이면 멀쩡하다.
속도가 압도적이다.
실시간보다 수십에서 수백 배 빠르게 돌릴 수 있고, GPU 위에서 수천 개 환경을 동시에 굴린다.
현실에서 몇 년 걸릴 학습을 시뮬에선 몇 시간에 끝낸다. 시간이 사실상 공짜다.
정리하면 시뮬의 이득은 세 가지다.
병렬과 고속으로 빠르고, 고장이 없어 안전하고, 전기료만 드니 싸다.
그래서 강화학습 정책은 거의 다 시뮬에서 먼저 키운다.
시뮬에서 배운 걸 현실로 옮긴다, Sim2Real
시뮬에서 정책을 다 키웠으면, 그 정책을 실제 로봇에 그대로 올린다. 이 옮기는 과정이 Sim2Real이다.
학습이 끝나면 남는 건 정책 신경망 하나다. 센서값을 받아 다음 행동을 뱉는 함수다.
그 신경망 가중치를 그대로 실제 로봇의 컨트롤러에 복사해 넣는다.
현실에서는 더 이상 시행착오 없이, 배운 대로 바로 움직이게 하는 게 목표다.
잘 되면 그림이 아름답다.
위험하고 느린 학습은 전부 가상에서 끝내고, 현실에는 완성된 실력만 가져오는 셈이다.
ANYmal 4족 로봇, 로봇 손의 큐브 조작 같은 성과가 다 이 방식으로 나왔다.
그런데 여기에 함정이 하나 있다.
시뮬에서 100점 받던 정책을 현실에 올리면 픽픽 쓰러지는 일이 자주 벌어진다.
시뮬과 현실이 똑같지 않기 때문이다. 이 차이를 reality gap이라 한다.
위험하고 느린 학습은 가상에서 하고, 완성된 실력만 현실로 가져온다.
reality gap을 도메인 랜덤화로 넘는다
시뮬과 현실의 차이를 reality gap이라 부른다. 시뮬에서 잘하던 게 현실에서 안 통하게 만드는 주범이다.
틈은 사방에서 생긴다.
마찰과 질량과 모터 토크가 시뮬 값과 미묘하게 다르고, 센서엔 노이즈와 지연이 끼고, 시뮬이 미처 모델 못 한 물리도 있다.
정책이 시뮬의 정확한 숫자에만 딱 맞게 학습되면, 현실의 작은 어긋남에도 와르르 무너진다. 이게 과적합이다.
해법은 도메인 랜덤화(domain randomization)다.
학습 동안 마찰계수, 물체 질량, 조명, 색, 제어 지연 같은 시뮬의 조건들을 매 에피소드마다 랜덤하게 흔든다.
그러면 정책은 “세상은 어차피 제각각”을 전제로 배운다. 현실도 그 흔들린 분포의 한 사례일 뿐이 된다.
gap을 키우면 전이 성공률이 떨어진다. 도메인 랜덤화를 켜면 같은 gap에서도 성공률이 한참 위로 올라간다.
한 가지 깔끔한 시뮬에 매달리지 않고 일부러 다양하게 겪게 하는 것이 틈을 메우는 핵심이다.
OFF면 한 가지 깔끔한 시뮬만 본다. 현실이 조금만 달라도 정책이 무너진다.
가상에선 거의 완벽
현실에서 무너짐
gap을 키워 보자. 랜덤화 없이는 차이가 조금만 벌어져도 성공률이 곤두박질친다.
틈을 좁히는 또 다른 손잡이들
도메인 랜덤화가 대표 무기지만 전부는 아니다. 갭을 좁히는 손잡이는 여러 개다.
시뮬을 현실에 더 닮게 만드는 길이 있다.
실제 로봇의 마찰과 질량을 측정해 시뮬 파라미터를 맞추는 게 시스템 식별(system identification)이다.
현실 데이터로 시뮬 자체를 보정하는 도메인 적응도 같은 결이다.
반대로 현실에서 마지막을 다듬는 길도 있다.
시뮬에서 80%까지 끌어올린 정책을 현실 데이터 소량으로 미세조정(fine-tuning)한다. 처음부터 현실에서 학습하는 것보다 훨씬 적은 시도로 끝난다.
최근엔 시뮬에서 대규모로 학습하고 현실에서 소량 보정하는 방식을 섞는 게 정석이다.
큰 그림은 늘 같다.
위험하고 비싼 학습은 가상에서 하고, 마무리 보정만 현실에서 한다. Sim2Real은 이 둘의 분업이다.
Q. 시뮬에서 잘 배운 정책이 현실에선 안 통하는 이 문제를 뭐라 부르나?
reality gap, 곧 현실 격차다.마찰, 질량, 센서 노이즈, 지연 등 시뮬과 현실의 미세한 차이 때문에 생긴다.
정책이 시뮬의 정확한 숫자에만 과적합되면 현실의 작은 어긋남에 무너진다.
이 틈을 좁히는 대표 해법이 도메인 랜덤화다. 시뮬 조건을 일부러 흔들어 현실에 강하게 만든다.
| 방법 | 하는 일 |
|---|---|
| 도메인 랜덤화 | 시뮬 조건을 마구 흔듦현실=흔들린 한 사례 |
| 시스템 식별 | 실측으로 시뮬 보정시뮬을 현실에 맞춤 |
| 도메인 적응 | 현실 데이터로 시뮬 조정분포 차이 줄임 |
| 현실 미세조정 | 소량 현실 데이터로 마무리fine-tuning |
시뮬을 현실처럼 만들고 현실로 마무리한다. 양쪽에서 틈을 좁힌다.