두 발 보행 로봇을 강화학습(RL)으로 훈련할 때, 어떻게 훈련의 난이도를 높여갈지만 다르게 하여 15대를 학습시켰습니다.
스파: 처음부터 가장 어려운 훈련장 -
지와: 시간이 지남에 따라 조금씩 어려워지게 함 -
데키: 할 수 있게 된 후에 어렵게 만듦
그 결과, 가장 어려운 훈련을 단 한 번도 받지 않은 데키가 6가지 테스트 모두에서 최고 성적이었습니다. 체중 1.5배의 테스트에서는 스파가 0.4%인 반면 데키는 51%를 기록했습니다.
본 기사에서는 설정, 코드, 수치를 그대로 공개합니다.
실험 설정
| 항목 | 값 |
|---|
| 환경 | Gymnasium Walker2d-v5 (MuJoCo) |
| 학습 | Stable-Baselines3 PPO, 5환경 병렬, n_steps=1024, batch_size=256 |
| 신경망(뇌) | 입력 17 → 128 → 128 → 출력 6 의 전결합 네트워크 |
| 학습량 | 로봇 1대당 500만 스텝 (1스텝 = 0.008초) |
| 대수 | 양육 방식별로 5대 (시드 1~5) |
'가장 어려운 훈련장'(level 1)은 다음 세계입니다.
- 평균 40스텝마다 전후방에서 최대 300N으로 밀기
- 바닥의 미끄럼 방지 계수를 0.15
1.3배, 체중을 0.81.5배로 무작위 변경
level을 0부터 1까지 변화시키면서, 밀는 힘, 바닥, 체중 범위가 종합적으로 변하도록 했습니다 (level 0은 미는 힘이 없고, 바닥과 체중은 고정).
def set_level(self, lv):
self.push = 300 * lv
self.fr = (1 - 0.85 * lv, 1 + 0.3 * lv) # 미끄럼 방지 계수 배율
...
3가지 난이도 증가 방식
차이는 데이터를 수집하기 전에 호출되는 콜백 내부에서만 발생합니다.
ADAPT_LEN, ADAPT_STEP, ADAPT_WAIT = 800, 0.1, 10
class Grow(BaseCallback):
def _on_rollout_start(self):
...
데키의 조건은 '최근 100회 평균으로 800스텝(6.4초) 이상 서 있을 수 있으면 난이도를 0.1 올린다'입니다. 난이도를 올린 후에는 최소 10회 분량의 데이터 수집(약 5만 스텝)은 늘리지 않습니다.
훈련 중 난이도
실제 학습 기록에서 그린 그래프입니다.
練習中の厳しさの変化。スパは最初から一番上、ジワは直線、デキ5体は階段状に上がり、最高でも40〜80%で止まった
데키는 중간에 단계가 멈췄습니다. 5대의 최고 도달치는 0.4 / 0.6 / 0.7 / 0.8 / 0.8로, 가장 어려운 훈련(1.0)에는 한 대도 도달하지 못했습니다.
테스트 결과
학습된 신경망을 6가지 조건에서 로봇 1대당 100회씩 구동하여, 8초 동안 넘어지지 않으면 완주로 했습니다. 수치는 5대의 완주율 평균(%)입니다.
| 테스트 | 스파 | 지와 | 데키 |
|---|
| 평평한 바닥 | 51.0 | 80.2 | 98.4 |
| ... | | | |
| 体重1.5倍のテスト。スパとジワは転び、デキは歩き続けている | | | |
평균만으로는 편차가 보이지 않기 때문에, 로봇 개체별 수치도 공개합니다.
| 1호 | 2호 | 3호 | 4호 | 5호 | |
|---|
| 스파:평평한 바닥 | 5 | 38 | 85 | 56 | 71 |
| ... | | | | | |
스파는 같은 설정이라도 5%~85%로, 성장 여부가 운에 달렸습니다. 데키는 평평한 바닥에서는 거의 전원이 완주했습니다. 다만, 체중 1.5배의 경우 98% 개체와 0% 개체가 있어 여기에서도 차이는 큽니다.
왜 데키가 강한가
훈련을 시작하고 100만 스텝 정도 되었을 때, 훈련장에서 평균 몇 초 동안 서 있을 수 있는지를 확인합니다.
| 5대의 값(스텝) | 초로 변환 시 |
|---|
| 스파 | 232 / 196 / 207 / 219 / 206 |
| ... | |
| 練習100万手のころ。スパは1.7秒で倒され、デキは5.7秒立っている | |
스파는 걸음걸이를 찾기도 전에 밀려서 넘어지는 경우가 많습니다. 강화학습은 '점수가 높았던 움직임을 늘리는' 학습 방식이기 때문에, 성공적인 경험이 적으면 무엇을 늘려야 할지 알 수 없습니다.
데키는 '걸을 수 있게 된 후에 어려워지게 하는' 방식으로 진행되기 때문에, 항상 조금 노력하면 할 수 있는 훈련이 이어집니다.
쉬운 훈련부터 순차적으로 학습시키는 방식은 커리큘럼 학습(Curriculum Learning) (Bengio et al., 2009)이라고 불립니다. '할 수 있게 되면 어렵게 만드는' 형태는 OpenAI가 로봇 손으로 루빅큐브를 풀었던 연구의 자동 도메인 랜덤화(ADR, Automatic Domain Randomization) (Akkaya et al., 2019)에서도 사용되었습니다.
주의: 시간 순서로 난이도를 높이는 방법도 실패할 수 있습니다.
같은 설정으로 연습을 200만 스텝/2체로 진행했을 때는 시간 경과에 따라 난이도를 높이는 방법은 실패했습니다(평지에서 5%와 0%). 보행할 수 있게 되기 전에 너무 어려워졌기 때문입니다.
'몇 스텝째에 난이도를 높일지'를 정해진 규칙으로 결정하는 방식은 학습량과 맞지 않으면 역효과가 납니다. 개인의 능력에 맞춰 난이도를 조절하는 방식은 이러한 미리 정한 규칙이 필요하지 않습니다.
요약 (Summary)
- 처음부터 스파르타식 훈련은 성공 여부가 운에 달렸다(평지에서 5~85%).
- 시간 경과에 따라 점진적으로 난이도를 높이는 방식은 충분한 연습이 있다면 강해진다. 부족하면 실패한다.
- 능력이 되었을 때 난이도를 높여주는 것이 가장 안정적이고 강력했다. 심지어 가장 어려운 훈련을 받지 않았음에도 불구하고 그렇다.
단, 이 실험들은 각각 5체로 진행된 소규모 실험이며 모델 또한 단순합니다. 차이는 참고용으로 봐주시기 바랍니다.
영상 및 논문 (Video and Book)
이 실험은 영상으로도 제작되었습니다.
환경 구축 방법, PPO(Proximal Policy Optimization)의 내부 내용, 시드(Seed)와 신뢰구간을 사용한 평가 방법, 그리고 Curriculum Learning, Adversarial Learning, Imitation Learning, Teacher-Student Learning에 대한 실험 코드는 논문에 모두 담았습니다.
참고 문헌 (References)
- Bengio, Y., Louradour, J., Collobert, R. & Weston, J. Curriculum Learning. ICML 2009
- OpenAI (Akkaya, I. et al.) Solving Rubik's Cube with a Robot Hand. arXiv:1910.07113 (2019)
- Schulman, J. et al. Proximal Policy Optimization Algorithms. arXiv:1707.06347 (2017)
- Gymnasium Walker2d-v5 / MuJoCo
- Stable-Baselines3
토론 (Discussion)