Skip to main content

RL, Reinforcement Learning Basics


1. 강화학습이란?

Reinforcement Learning, RL (강화학습) : 머신러닝의 한 분야로, 에이전트(Agent)가 환경(Environment)과 상호작용하며 시행착오를 통해 학습하는 방법을 연구하는 학문.

[note]
정답이 주어진 데이터를 외우는 것이 아니라, 어떤 행동을 했을 때 주어지는 피드백을 지표 삼아 "어떻게 행동해야 가장 좋은 결과를 얻을 수 있는지"를 스스로 깨우치는 과정!

-> 에이전트의 행동에 대해 보상/처벌을 가하면, 에이전트가 미래에 해당 행동을 반복/지양할 가능성이 높아진다는 개념을 공식화한 것!


2. 주요 구성 요소

1-1

2-1. Agent (에이전트)

: Environment(환경) 속에서 State(상태)를 Observation(관찰)하고, 자신의 Policy(정책)에 따라 판단하여 Action(행동)을 내리며, 그 결과로 받는 Reward(보상)을 통해 스스로 학습해 나가는 주체!
-> Agent의 목표는 Return(누적 보상)을 최대화하는 것.

(이해가 되지 않아도 걱정 마세요. 아래에 모든 용어 설명이 이루어질 겁니다!)

2-2. Environment (환경)

: Agent(에이전트)가 상호작용하는 세계
-> 이때, 환경은 에이전트의 행동에 따라 변화하나, 스스로 변화하기도 함.

[note]
Agent는 Environment로부터 reward 신호를 인지하는데, 이 신호는 현재 세계 상태가 얼마나 좋거나 나쁜 지를 나타내는 수치


  • 우리는 위에서 언급된 강화학습의 기초적 정의와 구성 요소, 방법에 대해 이해하기 위해 다음과 같은 용어를 정리하려고 합니다!
    • states(상태) / observations(관찰)
    • action(행동) / action spaces(활동 공간)
    • policies(정책)
    • trajectories(궤적)
    • Reward(보상) / Return(누적 보상)
    • the RL optimization problem(강화학습 최적화 문제)
    • value function(가치 함수)
      ...

3. 용어 정리

3-1. States(상태) / Observations(관찰)

1-2

우리가 다루게 될 highway-env 자율주행 시뮬레이션 환경

  • 정의:

    • 상태(State): 환경에 대한 모든 정보를 담고 있는 완벽한 설명
    • 관찰(Observation): 에이전트가 센서 등을 통해 받아들이는 상태의 일부(제한된 정보)

    [note]
    이때 환경의 모든 정보를 에이전트가 볼 수 있으면 Fully Observed(완전 관측)라고 하며, 이는 마르코프 결정 과정(MDP)의 기본 전제가 됩니다. 반대로 자율주행처럼 주변의 일부만 볼 수 있는 현실적인 상황은 Partially Observed(부분 관측)라고 하며, 부분 관측 마르코프 결정 과정(POMDP)이라고 부릅니다.

    💡 [개념 보충] 마르코프 결정 과정(MDP)이란?

    MDP(Markov Decision Process)는 강화학습에서 에이전트가 의사결정을 내리는 과정을 수학적으로 엄밀하게 정의해 놓은 틀입니다. 쉽게 말해, "현재 상황에서 어떤 행동을 해야 가장 좋은 결과를 얻을 수 있을까?"를 계산하기 위해 환경을 모델링한 도면입니다.

    가장 핵심이 되는 건 마르코프 성질(Markov Property)입니다. "미래는 오직 '현재'의 상태와 행동에 의해서만 결정되며, 과거의 역사는 전혀 상관없다"는 뜻을 담고 있습니다.

    MDP는 기본적으로 5가지 핵심 요소로 구성되어 있습니다.

    • S (State): 에이전트가 인식할 수 있는 환경의 모든 상태 집합
    • A (Action): 에이전트가 특정 상태에서 취할 수 있는 모든 행동의 집합
    • P (Transition Probability): 상태 전이 확률. 현재 상태 ss에서 행동 aa를 했을 때, 다음 상태 ss'로 넘어갈 확률 P(ss,a)P(s'|s, a)
    • R (Reward): 보상 함수. 상태 ss에서 행동 aa를 취해 다음 상태 ss'로 넘어갔을 때 받는 피드백 R(s,a,s)R(s, a, s')
    • γ\gamma (Discount Factor): 할인율. 미래에 받을 보상을 현재 가치로 환산할 때 곱해주는 숫자
  • 예시: 우리가 사용할 highway-env 기반의 도로 교통 시뮬레이션 환경에서 '상태'는 도로 위 모든 차량의 정확한 위치와 속도입니다. 하지만 자율주행 에이전트는 주변 반경의 일부 차량 정보만 '관찰'하여 판단을 내립니다.

  • 수식:

    • 상태: ss

    • 관찰: oo

      • 완전 관측 상태에서는 o=so = s 가 성립합니다.
  • 코드 (Python): 시뮬레이션 환경을 초기화하고 첫 관찰값을 받아옴

    obs, info = env.reset()

3-2. Action(행동) / Action Spaces(활동 공간)

  • 정의:

    • 행동(Action): 에이전트가 환경에 가하는 조작

    • 활동 공간(Action Space): 에이전트가 선택할 수 있는 모든 유효한 행동들의 집합.

      • 선택지가 정해져 있으면 이산(Discrete), 연속적인 수치면 연속(Continuous) 공간이라고 함.
  • 예시: 차선 변경, 가속, 감속 등 명확하게 나누어진 5가지 선택지 중에서 하나를 고르는 '이산 활동 공간'을 예로 들 수 있습니다.

  • 수식:

    • 행동: aa

    • 활동 공간: AA

      • 이때 Action은 Action space에 속함. (aAa ∈ A)
  • 코드 (Python): 결정한 행동을 시뮬레이터에 전달하여 환경을 한 스텝 진행시킵니다.

    env.step(action)

3-3. Policies(정책)

  • 정의: 에이전트가 특정 상태에서 어떤 행동을 할지 결정하는 '규칙'이자 에이전트의 '뇌'.

    결과가 무조건 하나로 정해진 결정론적(Deterministic) 정책과, 확률에 따라 행동이 달라지는 확률론적(Stochastic) 정책이 있음!

    • OpenAI Spinning Up에서는 특히 확률론적 정책을 강조합니다. 이산 행동 공간에서는 범주형 분포(Categorical Distribution)를, 연속 행동 공간에서는 대각 가우시안 분포(Diagonal Gaussian Distribution)를 주로 사용한다는 점을 알아두면 좋습니다.
  • 예시: 학습 중에는 다양한 시도를 위해 주사위를 굴리는 확률론적 정책을 쓰지만, 실전에 투입할 때는 가장 정답일 확률이 높은 행동만 수행하는 결정론적 정책을 사용합니다.

1-3

결정론적 정책(좌)과 확률론적 정책(우)의 차이

  • 수식:

    • 결정론적: a=μ(s)a = μ(s)
    • 확률론적: a π(s)a ~ π(·|s) (상태 ss에서 행동 aa를 할 확률 분포)
  • 코드 (Python): 학습된 모델(정책)에게 현재 상태를 주고 다음 행동을 예측하게 합니다.

    action, _states = model.predict(obs, deterministic=True)

3-4. Trajectories(궤적)

  • 정의: 에이전트가 환경 속에서 경험한 상태와 행동들의 연속된 나열.
    -> 에피소드(Episode) 하나가 시작해서 끝날 때까지의 기록 전체를 의미함.

    [note]
    에피소드(Episode): 에이전트가 환경과 상호작용하여 시작 상태에서 종료 상태(Terminal State)에 이르기까지의 완전한 시나리오/작업 단위.

    💡 [개념 보충] 알아두면 좋은 내용

    세계의 최초 상태 s0s_0 는 시작 상태 분포(start-state distribution)에서 무작위로 추출됩니다.

    상태 전이(시간 t,stt, s_t에서의 상태와 시간 t+1,st+1t+1, s_t+1에서의 상태 사이에서 세계에 일어나는 일) 는 환경의 자연 법칙에 의해 지배되며, 가장 최근의 행동에만 의존합니다.

    • 상태 전이는 결정론적일 수도 있고, 확률적일 수도 있습니다.
    • 에이전트의 행동은 해당 에이전트의 정책에 따라 이루어집니다.
  • 예시: 자율주행 에이전트가 고속도로에 진입해서 목적지에 도착할 때까지의 '1회 주행 블랙박스 녹화 영상' 전체가 하나의 궤적입니다.

  • 수식: 궤적은 기호 타우(τ\tau)로 표기합니다.

    τ=(s0,a0,s1,a1,)\tau = (s_0, a_0, s_1, a_1, \dots)

    특정 궤적이 발생할 확률은 환경의 상태 전이 확률(Transition Probability)과 에이전트의 정책 확률의 곱으로 엄밀하게 표현할 수 있습니다.

    P(τπ)=ρ0(s0)t=0T1P(st+1st,at)π(atst)P(\tau|\pi) = \rho_0 (s_0) \prod_{t=0}^{T-1} P(s_{t+1} | s_t, a_t) \pi(a_t | s_t)
  • 코드 (Python): PPO 알고리즘 등에서는 에이전트가 돌아다니며 겪은 이 궤적 데이터를 메모리 버퍼에 자동으로 수집하여 학습에 활용합니다.

3-5. Reward(보상) / Return(누적 보상)

  • 정의:

    1. 에이전트는 행동의 대가로 즉각적인 보상(Reward) 을 받음.
    2. 그리고 이 보상들을 에피소드 끝까지 모두 합친 것이 누적 보상(Return)!
    3. 먼 미래의 보상일수록 가치를 깎아서 더하는 방식(Discounted Return)이 강화학습에서 가장 널리 쓰임!
  • 예시: 무리하게 끼어들면 당장 +1점(Reward)을 받지만, 그로 인해 뒤차들이 급브레이크를 밟아 나중에 큰 벌점을 받는다면 전체 Return은 마이너스가 됩니다. 에이전트는 할인율(γ)을 고려하여 당장의 이득보다 미래의 전체 흐름을 보는 법을 배웁니다.

  • 수식:

    • 순간 보상:
    rt=R(st,at,st+1)r_t = R(s_t, a_t, s_t+1)
    • 할인된 누적 보상 (Discounted Return):
    R(τ)=현재보상+γ(1초뒤보상)+γ2(2초뒤보상)+...R(τ) = 현재보상 + γ * (1초뒤 보상) + γ^2 * (2초뒤 보상) + ...

1-4

시간이 지날수록 할인율(gamma)에 의해 감소하는 보상의 가치

  • 코드 (Python): 모델을 세팅할 때 파라미터로 할인율(γ\gamma)을 지정해 줍니다.
    model = PPO("MlpPolicy", env, gamma=0.99)

3-6. The RL Optimization Problem(강화 학습 최적화 문제)

  • 정의: 강화학습의 궁극적인 목표로, 무수히 많은 정책들 중에서, 예상되는 누적 보상(Return)의 기댓값을 가장 극대화(Maximize) 하는 단 하나의 최적의 정책을 찾는 수학적 과정!

  • 예시: "어떤 타이밍에 차선을 바꾸고 감속해야 도로 전체의 정체가 가장 완벽하게 해소되는가?"에 대한 절대적인 정답 알고리즘을 찾아내는 전체 프로젝트의 목표와 같습니다.

  • 수식: 기대 수익률 J(π)J(π)를 최대화하는 최적의 정책 ππ*를 찾습니다.

π=argmaxπJ(π)π* = arg max_π J(π)
  • 코드 (Python): learn 함수를 호출하게 되면, 해당 최적화 수학 문제가 백그라운드에서 풀리기 시작합니다.
    model.learn(total_timesteps=20000)

3-7. Value Function(가치 함수)

  • 정의: 특정 상태(ss)에 있을 때, 앞으로 얻을 수 있는 '예상 누적 보상'의 기댓값. 즉, 지금 상황이 에이전트에게 "얼마나 유리한가?"를 수치화한 지표!

    Spinning Up에서는 크게 두 가지 가치 함수를 명확히 구분하여 알아야 한다고 강조합니다.

    1. 상태-가치 함수 (State-Value Function): 특정 상태 ss에 있을 때의 가치.
    2. 행동-가치 함수 (Action-Value Function, Q-Function): 특정 상태 ss에서 특정한 행동 aa를 취했을 때의 가치.
  • 예시: 바둑의 '형세 판단' 능력과 같습니다. 당장 눈앞에 떨어지는 보상이 0점이더라도, 내 차 앞에 뻥 뚫린 차선이 펼쳐져 있는 상태라면 가치 함수는 "이 상황은 앞으로의 가치가 아주 높다!"라고 평가합니다.

1-5

상태-가치 함수(V)와 행동-가치 함수(Q)의 평가 기준점 차이

  • 수식: 정책 ππ를 따랐을 때, 상태 ss에서 시작하여 얻게 될 누적 보상의 기댓값입니다.

    • 상태-가치 함수 Vπ(s)V^{\pi}(s):
    Vπ(s)=Eτπ[R(τ)s0=s]V^{\pi}(s) = \mathbb{E}_{\tau \sim \pi} [R(\tau) | s_0 = s]
    • 행동-가치 함수 Qπ(s,a)Q^{\pi}(s, a):
    Qπ(s,a)=Eτπ[R(τ)s0=s,a0=a]Q^{\pi}(s, a) = \mathbb{E}_{\tau \sim \pi} [R(\tau) | s_0 = s, a_0 = a]
💡 [개념 보충] 4가지 핵심 가치 함수 (Value Functions)

OpenAI Spinning Up에서는 가치 함수를 크게 '현재 정책을 따르는가(π\pi)', 아니면 '절대적으로 최적의 정책을 따르는가(*)'에 따라 4가지로 명확히 나누어 정의합니다.

  1. 상태-가치 함수 (On-Policy State-Value Function): Vπ(s)V^\pi(s) 에이전트가 상태 ss에서 시작하여, 이후 계속 현재 정책 π\pi를 따를 때 얻을 것으로 기대되는 누적 보상입니다.
Vπ(s)=Eτπ[R(τ)s0=s]V^\pi(s) = \mathbb{E}_{\tau \sim \pi} [R(\tau) | s_0 = s]
  1. 행동-가치 함수 (On-Policy Action-Value Function): Qπ(s,a)Q^\pi(s, a) 에이전트가 상태 ss에서 임의의 행동 aa를 먼저 한 번 취하고, 그 이후부터는 현재 정책 π\pi를 따를 때 기대되는 누적 보상입니다.
Qπ(s,a)=Eτπ[R(τ)s0=s,a0=a]Q^\pi(s, a) = \mathbb{E}_{\tau \sim \pi} [R(\tau) | s_0 = s, a_0 = a]
  1. 최적 상태-가치 함수 (Optimal State-Value Function): V(s)V^*(s) 에이전트가 상태 ss에서 시작하여, 무수히 많은 정책 중 가장 완벽한 최적의 정책을 따를 때 얻을 수 있는 최대 누적 보상입니다.
V(s)=maxπEτπ[R(τ)s0=s]V^*(s) = \max_{\pi} \mathbb{E}_{\tau \sim \pi} [R(\tau) | s_0 = s]
  1. 최적 행동-가치 함수 (Optimal Action-Value Function): Q(s,a)Q^*(s, a) 에이전트가 상태 ss에서 임의의 행동 aa를 취하고, 그 이후부터는 가장 완벽한 최적의 정책을 따를 때 얻을 수 있는 최대 누적 보상입니다.
Q(s,a)=maxπEτπ[R(τ)s0=s,a0=a]Q^*(s, a) = \max_{\pi} \mathbb{E}_{\tau \sim \pi} [R(\tau) | s_0 = s, a_0 = a]

요약하자면: VV는 "이 상태가 얼마나 좋은가?"를, QQ는 "이 상태에서 이 행동을 하는 게 얼마나 좋은가?"를 평가합니다. 기호에 별표(*)가 붙으면 "가장 완벽하게 행동했을 때"를 가정한 절대적인 기준점이 됩니다!

  • 코드 (Python): PPO와 같은 Actor-Critic 구조에서는, 상황의 유불리를 판단하는 가치 함수(Critic) 신경망을 따로 호출해 볼 수 있습니다.
    value = model.policy.predict_values(obs)

3-8. Advantage(어드밴티지) / Advantage Function(어드밴티지 함수)

  • 정의:

    • 어드밴티지(Advantage): 특정 상태에서 어떤 행동을 취하는 것이, 그 상태에서 평균적으로 기대할 수 있는 결과보다 얼마나 더 좋은지(또는 나쁜지)를 수치화한 '상대적인 이득 값'.
    • 어드밴티지 함수(Advantage Function): 특정 상태(ss)와 행동(aa)이 주어졌을 때, 정책 π\pi를 기준으로 해당 행동의 어드밴티지 값을 수치적으로 계산해 내는 '함수'.
  • 예시: 뻥 뚫린 고속도로(상태)에서는 어떤 행동을 해도 기본적으로 예상 보상이 높습니다. 이때 가속을 하는 것이 단순히 현재 속도를 유지하는 것(평균 기대치)보다 얼마나 더 큰 이득을 가져다주는지 그 상대적인 차이가 바로 '어드밴티지'이며, 이 차이를 계산하는 공식이 '어드밴티지 함수'입니다.

  • 수식: 행동-가치 함수(QQ)에서 상태-가치 함수(VV)를 빼서 계산합니다.

Aπ(s,a)=Qπ(s,a)Vπ(s)A^{\pi}(s, a) = Q^{\pi}(s, a) - V^{\pi}(s)
  • 코드 (Python): PPO 알고리즘은 내부적으로 이 어드밴티지 값을 사용하여, 평균보다 좋은 행동을 할 확률은 높이고 나쁜 행동을 할 확률은 낮추는 방식으로 학습합니다.

3-9. Bellman Equation(벨만 방정식)

  • 정의: 현재 상태의 가치와 다음 상태의 가치 사이의 일관된 수학적 관계를 나타내는 방정식.

    강화학습의 모든 알고리즘이 뼈대로 삼는 가장 중요한 수식!

  • 특징: 현재의 가치(VV 또는 QQ)는 즉각적으로 받을 보상과 다음 상태에서 얻을 예상 가치의 합으로 쪼개서 계산할 수 있다는 재귀적인 특성을 가집니다.

  • 수식: 앞서 살펴본 4가지 가치 함수에 각각 대응하는 4개의 벨만 방정식이 존재합니다.

    1. 상태-가치 함수의 벨만 방정식:
    Vπ(s)=Eaπ,sP[R(s,a,s)+γVπ(s)]V^\pi(s) = \mathbb{E}_{a \sim \pi, s' \sim P} [R(s,a,s') + \gamma V^\pi(s')]
    1. 행동-가치 함수의 벨만 방정식:
    Qπ(s,a)=EsP[R(s,a,s)+γEaπ[Qπ(s,a)]]Q^\pi(s,a) = \mathbb{E}_{s' \sim P} [R(s,a,s') + \gamma \mathbb{E}_{a' \sim \pi} [Q^\pi(s', a')]]
    1. 최적 상태-가치 함수의 벨만 방정식:
    V(s)=maxaEsP[R(s,a,s)+γV(s)]V^*(s) = \max_a \mathbb{E}_{s' \sim P} [R(s,a,s') + \gamma V^*(s')]
    1. 최적 행동-가치 함수의 벨만 방정식:
    Q(s,a)=EsP[R(s,a,s)+γmaxaQ(s,a)]Q^*(s,a) = \mathbb{E}_{s' \sim P} [R(s,a,s') + \gamma \max_{a'} Q^*(s', a')]

4. 실전 적용

  • 개요: 지금까지 배운 마르코프 결정 과정(MDP) 구성 요소들을 도로 교통 시뮬레이션 환경에 대입하여, 다수 차량의 흐름을 개선하는 자율주행 물리적 AI(Physical AI) 에이전트를 어떻게 설계할지 논의해 봅니다.

    이 내용은 이후 직접 실험을 통해 수행해볼 예정입니다!

  • 모델링 예시:

    • 에이전트: 도로 위를 주행하는 개별 자율주행 차량
    • 상태(State): 주변 차량들의 위치, 속도, 차간 거리, 도로 형태
    • 행동(Action): 가속, 감속, 차선 유지, 좌/우 차선 변경
    • 보상(Reward): 충돌 시 강한 페널티, 목표 속도 도달 시 기본 보상, 그리고 에이전트의 행동으로 인해 전체 교통 체증이 완화되어 도로의 평균 속도가 올라갈 때 주어지는 추가 보상
  • 의의: 단일 에이전트의 이기적인 주행이 아니라 환경 전체의 누적 보상을 극대화하는 방향으로 정책이 학습되면, 원인 모를 유령 정체 현상을 해결하는 강화학습 시스템을 성공적으로 구현할 수 있습니다.