2. MDP — 문제를 강화학습 문제로 옮기기
알고리즘을 고르기 전에 MDP를 잘못 세우면, 그 뒤는 무엇을 해도 안 된다
이 장에서 처음 나오는 말6개
MDPMarkov Decision Process · 마르코프 결정 과정- 강화학습 문제를 적는 표준 양식. 상태 · 행동 · 전이 · 보상 · 할인율 다섯 칸으로 이루어진다.
마르코프 성질Markov Property- "지금 상태만 보면 과거는 몰라도 된다" 는 성질. 이게 성립하도록 상태를 설계하는 것이 실무다.
전이Transition · P(s'|s,a)- 상태
s에서 행동a를 했을 때 다음 상태가s'가 될 확률. 환경이 가진 것이지 우리가 만드는 게 아니다. 리턴Return · G- 지금부터 끝까지 받을 보상을 할인해서 다 더한 값. 에이전트가 진짜로 키우려는 것은 보상이 아니라 이것이다.
할인율Discount Factor · γ0~1사이 숫자. 미래 보상을 얼마나 쳐 줄지 정한다. 에이전트의 시야 길이를 정하는 손잡이다.POMDPPartially Observable MDP · 부분 관측 MDP- 상태를 다 못 보는 경우. 현실 문제는 거의 전부 이쪽이고, 그래서 과거를 상태에 접어 넣는다.
문제 — 현실은 MDP로 태어나지 않는다
섹션 제목: “문제 — 현실은 MDP로 태어나지 않는다”“로봇이 걷게 하고 싶다”는 강화학습 문제가 아니다. 그건 소원이다. 알고리즘이 받아들일 수 있는 형태로 바꿔야 한다 — 다섯 칸을 채우는 일이다.
MDP = ( S, A, P, R, γ )
S : 상태 집합 "에이전트가 매 순간 보는 것" A : 행동 집합 "에이전트가 할 수 있는 것" P : 전이 확률 "행동하면 세상이 어떻게 변하나" ← 환경의 것 R : 보상 함수 "그래서 몇 점인가" ← 우리가 정한다 γ : 할인율 "미래를 얼마나 중요하게 볼 것인가"
P는 환경의 반응을 뜻하고,S·A·R·γ는 설계자가 정의한다. 다만 시뮬레이터를 만드는 경우에는P의 근사 모델까지 설계 대상이 된다.
상태 — 마르코프 성질을 만들어 내는 일
섹션 제목: “상태 — 마르코프 성질을 만들어 내는 일”마르코프 성질은 “다음에 일어날 일은 지금 상태와 지금 행동만으로 결정된다”는 뜻이다. 과거 기록을 따로 들고 있을 필요가 없다는 말이다.
P(sₜ₊₁ | sₜ, aₜ) = P(sₜ₊₁ | s₀,a₀, s₁,a₁, … , sₜ,aₜ)지금 상태만 알면, 그전에 어떻게 여기까지 왔는지는 다음을 예측하는 데 쓸모가 없다.
현실의 관측은 대부분 이 성질을 만족하지 않는다. 필요한 과거 정보를 상태 표현에 넣어 마르코프성에 가까워지게 설계할 수는 있다. 다만 숨은 변수를 끝내 관측할 수 없다면 완전한 MDP로 만들 수 없고, 이력이나 belief state로 근사하는 POMDP로 남는다.
상태 = 카트의 위치 x카트가 x=0에 있다. 다음 순간 어디로 갈까? 알 수 없다.
오른쪽으로 달리는 중일 수도, 왼쪽으로 달리는 중일 수도 있다.
속도가 상태에 없어서 마르코프 성질이 깨졌다.
상태 = (위치 x, 속도 v)이제 다음 위치를 지금 상태만으로 예측할 수 있다. 칸을 하나 늘려서 마르코프 성질을 만들어 낸 것이다.
물리 시뮬레이터의 상태가 대개 (위치, 속도) 쌍인 이유가 이것이다.
관측 = 카메라 이미지 한 장이미지 한 장에는 속도가 없다. 벽 뒤의 물체도 안 보인다. 이럴 때 쓰는 표준 처방이 둘이다 —
- 프레임 여러 장을 쌓는다 (아타리 DQN이 4장을 쌓은 이유)
- 순환 신경망(RNN·LSTM·GRU)이나 트랜스포머로 과거를 요약해 상태에 넣는다
이렇게 “관측만으로 부족한” 문제를 POMDP라 부른다. 현실 문제는 대부분 여기 속한다.
상태에 넣을 것을 고르는 기준
섹션 제목: “상태에 넣을 것을 고르는 기준”| 넣는다 | 넣지 않는다 | 이유 |
|---|---|---|
| 다음을 예측하는 데 필요한 것 | 예측과 무관한 잡음 | 차원이 늘면 샘플이 더 필요해진다 |
| 변화율 (속도 · 추세 · 잔고 변화) | 절대 시각·날짜 그 자체 | 시각은 대개 학습을 과거에 맞춰 외우게 만든다 |
| 에이전트 자신의 상태 (보유 포지션, 관절 각도) | 미래 정보 | 이게 새면 백테스트가 통째로 거짓이 된다 |
| 정규화된 값 | 스케일이 제각각인 원값 | 신경망 학습이 안 된다 (9장) |
행동 — 이산이냐 연속이냐
섹션 제목: “행동 — 이산이냐 연속이냐”행동 공간의 모양이 쓸 수 있는 알고리즘을 정한다. 이게 4~6장의 갈림길이다.
| 형태 | 예 | 쓰는 알고리즘 |
|---|---|---|
| 이산 (몇 개 중 하나) | 매수/매도/관망, 상하좌우 | DQN 계열, PPO |
| 연속 (실수 벡터) | 관절 토크 7개, 목표 비중 −1.0~1.0 | PPO · SAC · TD3 (DQN은 못 쓴다) |
| 혼합·구조적 | “종목 A를 3주” (무엇 + 얼마나) | PPO 계열 + 행동 분해, 또는 이산화 |
이산화의 유혹과 대가
섹션 제목: “이산화의 유혹과 대가”연속 행동을 잘게 잘라 이산으로 만들면 DQN을 쓸 수 있다. 편하지만 대가가 있다.
관절 7개를 각각 5단계로 이산화하면 5⁷ = 78,125 가지 행동관절이 늘 때마다 행동 수가 곱셈으로 폭발한다. 이것이 로봇에서 가치 기반(DQN)이 아니라 정책 기반(PPO · SAC) 을 쓰는 결정적 이유다.
반대로 트레이딩에서는 “매수/관망/매도” 셋이면 되는 경우가 많아 이산이 자연스럽다. 다만 “얼마나” 를 표현하려면 결국 연속(목표 비중)으로 가는 편이 낫다 (12장).
행동을 무엇으로 놓느냐가 난이도를 바꾼다
섹션 제목: “행동을 무엇으로 놓느냐가 난이도를 바꾼다”같은 로봇도 행동을 어디에 두느냐로 문제가 완전히 달라진다.
| 행동 | 난이도 | 성격 |
|---|---|---|
| 모터 토크 직접 | 어렵다 | 자유롭지만 학습이 오래 걸리고 진동이 생긴다 |
| 목표 관절 각도 (PD 제어기가 받는다) | 쉽다 | 보행 RL에서 흔하다. 저수준 제어를 제어기에 맡긴다 |
| “앞으로 걸어” 같은 상위 명령 | 매우 쉽다 | 대신 그 명령을 실행할 하위 정책이 따로 필요하다 |
보상과 종료 — 우리가 정하는 진짜 문제
섹션 제목: “보상과 종료 — 우리가 정하는 진짜 문제”보상은 환경이 주는 것처럼 보이지만 실은 우리가 쓰는 코드다. 그래서 8장을 통째로 여기에 쓴다. 여기서는 MDP 관점의 두 가지만 짚는다.
리턴 — 에이전트가 실제로 키우는 값
섹션 제목: “리턴 — 에이전트가 실제로 키우는 값”에이전트는 지금 보상이 아니라 앞으로 받을 것을 다 더한 값을 키운다.
Gₜ = rₜ + γ·rₜ₊₁ + γ²·rₜ₊₂ + γ³·rₜ₊₃ + …지금 받은 점수에, 다음 점수는
γ배로, 그다음은γ²배로 깎아서 더한다.
γ가 하는 일은 시야 길이 조절이다. 대략 1/(1−γ) 스텝 앞까지 신경 쓴다고 보면 된다.
| γ | 대략 보는 앞 | 성격 | 쓰는 자리 |
|---|---|---|---|
| 0.9 | ~10 스텝 | 근시안 | 즉각 반응이 중요한 제어 |
| 0.99 | ~100 스텝 | 흔한 출발점 | 여러 연속 제어 벤치마크 |
| 0.999 | ~1000 스텝 | 원시안. 학습이 불안정해진다 | 긴 호흡의 계획 |
| 1.0 | 끝까지 | 에피소드가 유한할 때만 가능 | 게임 승패 |
종료 조건 — 조용한 보상 설계
섹션 제목: “종료 조건 — 조용한 보상 설계”에피소드를 언제 끝낼지는 사실상 보상 설계다. 넘어지면 즉시 종료로 두면 “넘어지지 마라”라는 강한 벌을 준 것과 같다. Gymnasium은 끝나는 방식을 둘로 나눈다.
| 값 | 뜻 | 예 |
|---|---|---|
terminated | 문제 정의상 끝났다 | 넘어짐, 목표 도달, 파산 |
truncated | 시간이 다 됐을 뿐 | 1000 스텝 제한, 장 마감 |
이 둘을 구분하는 건 필수다. truncated는 “여기서 진짜 끝나는 게 아니라 우리가 자른 것”이라
뒤에 올 가치를 이어 붙여 계산해야 하는데, 하나로 뭉뚱그리면
시간 제한에 걸린 것을 실패로 배운다. 옛 gym API의 done 하나만 쓰던 코드가
이 버그를 그대로 갖고 있다.
시간 단위 — 한 스텝은 몇 초인가
섹션 제목: “시간 단위 — 한 스텝은 몇 초인가”의외로 결과를 크게 흔드는 결정이다.
| 스텝이 너무 짧으면 | 스텝이 너무 길면 |
|---|---|
| 한 행동의 효과가 안 보인다 (잡음에 묻힌다) | 세밀한 제어가 불가능하다 |
| 에피소드 길이가 폭증해 공로 배분이 어려워진다 | 중요한 사건을 스텝 사이에서 놓친다 |
| 학습이 느리다 | 반응이 굼뜨다 |
| 도메인 | 흔한 선택 | 이유 |
|---|---|---|
| 로봇 보행 | 저수준 제어는 훨씬 빠르게, 정책은 20~50Hz | PD 제어기가 그 사이를 채운다 |
| 로봇 조작 | 정책 10~30Hz | 카메라 프레임률에 묶인다 |
| 주문 체결 | 초~분 단위 | 호가 갱신 속도와 수수료 구조 |
| 포지션 배분 | 일 단위 | 그 이하로 가면 비용이 수익을 먹는다 |
실제로 옮겨 보기
섹션 제목: “실제로 옮겨 보기”같은 다섯 칸을 두 응용에 채운 것이다. 뒤 장에서 이 표가 계속 정교해진다.
| 칸 | 사족 보행 로봇 (14장) | 대량 주문 체결 (13장) |
|---|---|---|
| S | 관절 각도·속도, 몸통 자세·각속도, 명령 속도, 직전 행동 | 남은 수량, 남은 시간, 호가창 상태, 최근 체결 흐름 |
| A | 관절 12개의 목표 각도 (연속) | 이번 구간에 낼 수량과 주문 유형 |
| P | 물리 시뮬레이터 | 시장 (재현 불가) |
| R | 명령 속도 추종 − 에너지 − 흔들림 | −(체결 단가 − 기준가) × 수량 |
| γ | 0.99 | 에피소드가 짧아 1.0에 가깝게 |
| 종료 | 몸통이 바닥에 닿으면 terminated | 수량 소진 또는 정해진 마감이면 terminated |
로봇 쪽 P는 우리가 만들 수 있고, 트레이딩 쪽 P는 못 만든다.
이 한 칸의 차이가 두 응용의 모든 것을 가른다.
MDP를 세울 때 저지르는 실수
섹션 제목: “MDP를 세울 때 저지르는 실수”| 실수 | 증상 | 고치는 법 |
|---|---|---|
| 상태에 속도·추세가 없다 | 학습이 특정 수준에서 멈춘다 | 변화율을 상태에 추가 |
| 자기 포지션·자세를 안 넣는다 | 같은 행동을 반복한다 | 누적 결과를 상태에 |
| 미래 정보가 샌다 | 학습 성능이 비현실적으로 좋다 | 상태 생성 시점을 감사 (12장) |
| 행동이 너무 저수준 | 학습이 아예 안 오른다 | 한 층 올려 목표값으로 |
| 관측 스케일이 제각각 | 초반부터 발산 | 정규화 (9장) |
terminated와 truncated를 뭉갬 | 성능이 시간 제한 근처에서 이상 | Gymnasium API대로 분리 |
| 스텝이 너무 짧다 | 보상 신호가 잡음에 묻힌다 | 프레임 스킵 · 행동 반복 |
참고 자료
섹션 제목: “참고 자료”- Reinforcement Learning: An Introduction, 2판 — MDP·POMDP·리턴·가치의 표준 정의
- Gymnasium: Handling Time Limits —
terminated와truncated의 공식 구분 - Gymnasium 환경 생성 가이드 — 상태·행동·종료를 API로 옮기는 방법
2장 요약
섹션 제목: “2장 요약”- 강화학습 프로젝트의 첫 산출물은 코드가 아니라 MDP 다섯 칸 표다
P는 환경의 반응이고 상태·행동·보상·할인율은 설계한다. 시뮬레이터에서는P의 근사도 설계 대상이다- 상태 표현에 필요한 과거를 넣어 마르코프성에 가까워지게 설계한다. 숨은 변수까지 사라지는 것은 아니다
- 관측이 부족하면(POMDP) 프레임 스택·순환 신경망·belief state로 이력을 접어 넣는다
- 행동이 연속이면 DQN을 못 쓴다. 이산화는 관절 수에 따라 곱셈으로 폭발한다
- 행동을 한 층 올리면(목표 각도 · 목표 비중) 문제가 크게 쉬워진다
γ는 성능 손잡이가 아니라 시야 길이다. 대략1/(1−γ)스텝 앞을 본다terminated와truncated를 반드시 구분한다 — 안 하면 시간 제한을 실패로 배운다- 스텝 길이는 결과를 크게 흔든다. 제어 주기와 정책 주기를 나눈다