TT Lab
요금제

한국어

시작하기
블로그

블로그

강화학습의 틀: MDP, 상태·행동·보상·할인, 정책과 가치 함수를 탁구 팔로 읽기

상태: 초안 (2026-10-18), 실측. 숫자는 노트북(Apple M1 Max, macOS 26.5)의 Python 3.9.6·numpy 2.0.2 로 직접 계산한 시뮬레이션 값입니다. 원자료와 코드: 작업 디렉터리 measure/robot-arm-basics/rl/의 ttenv.py(환경), baselines.py, thr.py, 결과 out/rl/baselines.json, out/rl/throughput.json. 장난감 문제는 원리를 보이려고 일부러 작게 만든 것이며 실제 로봇 실험은 없습니다(하드웨어 미실측). 공 초기 상태는 DeepMind 데이터셋(CC-BY 4.0)입니다. 참고 자료는 2026-10-18 에 열람했습니다. 작성 규칙: 실측 데이터가 기본이고, 못 잰 것은 「미실측」, 확인하지 못한 것은 「미확인」으로 표시합니다.

목차

1. 직관: 결과는 늦게 온다

1~10편의 방법은 「무엇이 옳은지」를 미리 계산했습니다. 강화학습(reinforcement learning, RL)은 그 계산을 하지 않습니다. 해 보고, 결과를 보고, 결과가 좋았던 쪽으로 행동을 조금씩 옮깁니다. 아이가 공 던지기를 배우는 방식과 같습니다.

탁구에서는 이 「결과」가 늦게 옵니다. 라켓을 뒤로 빼는 순간에는 잘한 것인지 알 수 없고, 0.5초 뒤 공이 상대 탁구대에 떨어져야 비로소 성공이라는 신호가 옵니다. 그사이 팔은 수십 번의 결정을 내렸습니다. 어느 결정이 성공에 기여했는지 나누어 주는 일(신용 할당, credit assignment)이 강화학습의 핵심 어려움이고, 이 글의 할인율과 가치 함수, 12편의 이점 함수가 모두 이 문제를 다루는 장치입니다.

10편에서 「무엇을 학습에 맡길까」를 물었습니다. 11~15편은 그 질문의 학습 쪽을 원리부터 다시 봅니다. 11편이 틀을 세우고, 12편이 PPO 를 직접 구현하고, 13편이 보상과 행동 공간을, 14편이 시뮬레이션에서 실물로 가는 문제를, 15편이 평가 방법을 다룹니다.

2. 그림: 이 시리즈의 장난감 문제

장난감 문제: 옆에서 본 1자유도 진자 라켓 탁구대 끝 y = −1.37 네트 회전축 준비 φ = −0.5 타격 φ > 0 공(상대가 친 실제 타구) 상태: φ, φ̇, 공 y·z·v_y·v_z(지연·잡음 가능), 시각, 바운스 여부 행동: 10 ms 마다 관절 가속도(직접) 또는 첫 걸음에 타격 파라미터 2개 보상: 상대 탁구대에 넣으면 1(희소) 또는 형태를 준 보상
그림: 옆에서 본 1자유도 진자 라켓과 공, 상태·행동·보상

학습을 몇 분 안에 끝내고 시드를 여러 개 돌려 중앙값을 내려면 문제가 작아야 합니다. 그래서 다음처럼 만들었습니다.

1자유도라서 라켓 각과 라켓 속도를 따로 고를 수 없습니다. 언제 맞히느냐가 곧 라켓 면의 각입니다. 그래서 일부 공은 어떻게 쳐도 돌려보낼 수 없고, 이 한계를 4절에서 「상한」으로 잽니다.

3. 틀: 마르코프 결정 과정

강화학습 문제는 보통 마르코프 결정 과정(Markov decision process, MDP)으로 적습니다. 다섯 요소를 탁구 팔에 대응시키면 다음과 같습니다.

요소 뜻 장난감 문제 실제 탁구 로봇
상태 s 앞으로를 정하는 데 필요한 정보 전부 φ, φ̇, 공 y·z·v_y·v_z, 시각, 바운스 여부(8개) 관절 각·속도, 공 위치·속도의 최근 이력, 상대 정보
행동 a 매 걸음 고르는 것 10 ms 마다 관절 가속도 1개(직접), 또는 타격 파라미터 2개(13편) 관절 속도·토크 명령, 또는 타격 기술 선택
전이 P(s′|s, a) 다음 상태가 정해지는 규칙 6·7편의 물리(학습자는 모름) 현실
보상 r 걸음마다 받는 숫자 넣으면 1(희소) 또는 형태를 준 보상(13편) 설계자가 정함
할인 γ 미래 보상을 얼마나 깎을지 0.99 문제마다

마르코프 성질. 「지금 상태만 알면 과거는 필요 없다」는 가정입니다. 공의 위치만 주고 속도를 빼면 이 가정이 깨집니다. 같은 위치라도 공이 오는지 가는지 알 수 없기 때문입니다. 지연이 있을 때도 깨집니다. 20 ms 전의 공을 보고 있다면 그사이 내가 보낸 명령도 알아야 지금을 알 수 있습니다. 그래서 실제 시스템은 최근 관측 여러 개를 상태에 넣습니다. D'Ambrosio 외 2024 의 저수준 정책은 공 위치·속도와 관절 상태의 최근 8걸음을 입력으로 받습니다(arXiv:2408.03906 II-C 절).

정책과 가치. 정책(policy) π(a|s) 는 상태에서 행동을 고르는 규칙입니다. 이 시리즈의 정책은 신경망이 평균을 내고 정규분포에서 행동을 뽑는 가우시안 정책입니다. 가치 함수(value function)는 「이 상태에서 이 정책을 따르면 앞으로 받을 보상의 할인 합이 평균 얼마인가」입니다.

되돌림(return):     G_t = r_t + γ r_{t+1} + γ² r_{t+2} + …
상태 가치:          V(s)    = E[ G_t | s_t = s ]
행동 가치:          Q(s, a) = E[ G_t | s_t = s, a_t = a ]
이점(advantage):    A(s, a) = Q(s, a) − V(s)        「평소보다 얼마나 나은 행동이었나」

이점은 12편의 PPO 가 행동을 고칠 방향을 정하는 데 씁니다. 「좋은 결과」가 아니라 **「평소보다 좋은 결과」**에 상을 주어야 공이 쉬웠는지 행동이 좋았는지를 구분할 수 있습니다.

할인율과 지평. γ 는 미래 보상을 걸음마다 γ 배로 깎습니다. 대략 1/(1 − γ) 걸음 앞까지만 「보인다」고 생각할 수 있습니다.

γ 0.9 0.95 0.99 0.999
유효 지평 1/(1 − γ) 10걸음(0.1 s) 20걸음 100걸음(1.0 s) 1,000걸음

장난감 문제의 에피소드 길이는 무작위 정책으로 잰 결과 5·50·95백분위가 62·105·137걸음이었습니다(10 ms 걸음). 성공 보상은 에피소드 끝에 한 번 오므로 γ = 0.9 로는 80걸음 전의 스윙 시작에 그 보상이 0.9⁸⁰ ≈ 0.0002 만 남습니다. 그래서 0.99 를 씁니다. 대신 지평이 길수록 되돌림의 분산이 커지는데, 이것을 다루는 것이 12편의 GAE 입니다.

4. 실측: 학습 없이 어디까지 가나

학습을 시작하기 전에 기준선(baseline)을 잽니다. 15편에서 다시 말하겠지만, 기준선 없는 학습 곡선은 아무것도 말해 주지 않습니다. 평가용 공 1,000개 결과입니다.

방법 성공(돌려보냄) 라켓에 맞음
무작위 정책(매 걸음 가속도 균등 무작위) 1.5% 27.4%
가만히 있기(준비 자세 유지) 0% 9.6%
하이브리드 행동 공간의 최선 상수 행동(모든 공에 같은 타격 파라미터) 45.9% -
고전 계획기: 회전 모르는 모델로 격자 119개를 시험해 공마다 고름 40.0% -
하이브리드 행동 공간의 상한: 참 결과로 격자에서 공마다 고름 85.4% -

4.1 환경을 한꺼번에 굴리기

강화학습은 표본을 많이 먹습니다. 12편의 한 번 학습이 환경 걸음 약 140만 개를 씁니다. 그래서 환경 여러 개를 벡터로 묶어 한꺼번에 굴리는 것이 기본입니다. numpy 로 환경 N 개를 같은 배열 연산으로 굴리며 처리량을 쟀습니다(다른 계산이 없을 때, 5회 가운데 첫 회 버리고 중앙값).

환경을 한꺼번에 굴리면: 병렬 수와 처리량 1 16 256 4,096 1,000 10,000 100,000 1,000,000 한꺼번에 굴린 환경 수(로그) 환경 걸음/초(로그) 1,103 15,742 82,200 180,870 389,283 numpy 벡터 연산, CPU 코어 하나. 걸음 = 10 ms 제어 한 번(물리 10번).
그림: 한꺼번에 굴리는 환경 수에 따른 처리량
한꺼번에 굴린 환경 수 1 16 256 1,024 4,096
환경 걸음/초(중앙값) 1,103 15,742 82,200 180,870 389,283
환경 하나일 때 대비 1배 14배 75배 164배 353배

환경 하나를 굴릴 때는 파이썬의 한 걸음 비용이 대부분이고, 배열이 커지면 그 비용이 여러 환경에 나뉩니다. Rudin 외 2021 은 같은 생각을 GPU 물리 엔진으로 밀어붙여 수천 대의 로봇을 병렬로 시뮬레이션하고, 평지 보행 정책을 워크스테이션 GPU 한 장에서 4분 안에 학습했다고 보고합니다(arXiv:2109.11978 초록). D'Ambrosio 외 2024 는 기본 정책을 병렬 시뮬레이션 워커 6,000개로 약 24억 걸음 학습했습니다(II-C 절). 14편에서 다시 다룹니다.

5. 한계

6. 정리

티티 한마디. 공이 떨어지고 나서야 잘했는지 알 수 있어요. 그래서 1초 전의 스윙까지 칭찬이 닿도록 할인율을 0.99 로 크게 잡았어요!

참고

모든 자료는 2026-10-18 에 열람했습니다.

로그인하면 좋아요를 누를 수 있습니다

댓글

아직 댓글이 없습니다.

로그인하면 댓글을 쓸 수 있습니다