콘텐츠로 이동
Study Note강화학습

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에 있다. 다음 순간 어디로 갈까? 알 수 없다. 오른쪽으로 달리는 중일 수도, 왼쪽으로 달리는 중일 수도 있다. 속도가 상태에 없어서 마르코프 성질이 깨졌다.

넣는다넣지 않는다이유
다음을 예측하는 데 필요한 것예측과 무관한 잡음차원이 늘면 샘플이 더 필요해진다
변화율 (속도 · 추세 · 잔고 변화)절대 시각·날짜 그 자체시각은 대개 학습을 과거에 맞춰 외우게 만든다
에이전트 자신의 상태 (보유 포지션, 관절 각도)미래 정보이게 새면 백테스트가 통째로 거짓이 된다
정규화된 값스케일이 제각각인 원값신경망 학습이 안 된다 (9장)

행동 공간의 모양이 쓸 수 있는 알고리즘을 정한다. 이게 4~6장의 갈림길이다.

형태예쓰는 알고리즘
이산 (몇 개 중 하나)매수/매도/관망, 상하좌우DQN 계열, PPO
연속 (실수 벡터)관절 토크 7개, 목표 비중 −1.0~1.0PPO · 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~50HzPD 제어기가 그 사이를 채운다
로봇 조작정책 10~30Hz카메라 프레임률에 묶인다
주문 체결초~분 단위호가 갱신 속도와 수수료 구조
포지션 배분일 단위그 이하로 가면 비용이 수익을 먹는다

같은 다섯 칸을 두 응용에 채운 것이다. 뒤 장에서 이 표가 계속 정교해진다.

칸사족 보행 로봇 (14장)대량 주문 체결 (13장)
S관절 각도·속도, 몸통 자세·각속도, 명령 속도, 직전 행동남은 수량, 남은 시간, 호가창 상태, 최근 체결 흐름
A관절 12개의 목표 각도 (연속)이번 구간에 낼 수량과 주문 유형
P물리 시뮬레이터시장 (재현 불가)
R명령 속도 추종 − 에너지 − 흔들림−(체결 단가 − 기준가) × 수량
γ0.99에피소드가 짧아 1.0에 가깝게
종료몸통이 바닥에 닿으면 terminated수량 소진 또는 정해진 마감이면 terminated

로봇 쪽 P는 우리가 만들 수 있고, 트레이딩 쪽 P는 못 만든다. 이 한 칸의 차이가 두 응용의 모든 것을 가른다.

실수증상고치는 법
상태에 속도·추세가 없다학습이 특정 수준에서 멈춘다변화율을 상태에 추가
자기 포지션·자세를 안 넣는다같은 행동을 반복한다누적 결과를 상태에
미래 정보가 샌다학습 성능이 비현실적으로 좋다상태 생성 시점을 감사 (12장)
행동이 너무 저수준학습이 아예 안 오른다한 층 올려 목표값으로
관측 스케일이 제각각초반부터 발산정규화 (9장)
terminated와 truncated를 뭉갬성능이 시간 제한 근처에서 이상Gymnasium API대로 분리
스텝이 너무 짧다보상 신호가 잡음에 묻힌다프레임 스킵 · 행동 반복
  • 강화학습 프로젝트의 첫 산출물은 코드가 아니라 MDP 다섯 칸 표다
  • P는 환경의 반응이고 상태·행동·보상·할인율은 설계한다. 시뮬레이터에서는 P의 근사도 설계 대상이다
  • 상태 표현에 필요한 과거를 넣어 마르코프성에 가까워지게 설계한다. 숨은 변수까지 사라지는 것은 아니다
  • 관측이 부족하면(POMDP) 프레임 스택·순환 신경망·belief state로 이력을 접어 넣는다
  • 행동이 연속이면 DQN을 못 쓴다. 이산화는 관절 수에 따라 곱셈으로 폭발한다
  • 행동을 한 층 올리면(목표 각도 · 목표 비중) 문제가 크게 쉬워진다
  • γ는 성능 손잡이가 아니라 시야 길이다. 대략 1/(1−γ) 스텝 앞을 본다
  • terminated와 truncated를 반드시 구분한다 — 안 하면 시간 제한을 실패로 배운다
  • 스텝 길이는 결과를 크게 흔든다. 제어 주기와 정책 주기를 나눈다