
강화학습(Reinforcement Learning)은 기계학습의 한 분야로, 에이전트(Agent)가 환경(Environment)과 상호작용하면서 시행착오를 통해 최적의 행동 전략을 학습하는 방법이다. supervised learning처럼 정답 레이블에 의존하지 않고, 에이전트가 보상(Reward)을 최대화하는 방향으로 스스로 학습한다는 점이 특징이다. 이번 글에서는 강화학습의 기본 개념들을 정리하고, 정책 경사 방법의 일종인 REINFORCE 알고리즘을 정리한다.
강화학습의 Key components
Agent는 시점 $t$에서 관측 $O_t$을 받아 행동 $A_t$를 취하고, 환경은 다음 시점 $t+1$의 관측 $O_{t+1}$과 보상 $R_{t|t+1}$을 반환한다. 에이전트 내부의 정책(policy)은 강화학습 알고리즘에 의해 보상을 토대로 계속 갱신된다.
에이전트와 환경 (Agent & Environment)
Agent란 결정 maker, 즉 환경에서 행동을 선택하는 존재를 말한다. 예를 들면, 체스 게임에서 에이전트는 체스를 두는 인공지능 플레이어이고, 로봇 강화학습에서는 로봇 자체가 에이전트이다. 환경은 에이전트가 움직이는 세계 또는 상황으로, 에이전트의 행동에 따라 변하는 무대라고 할 수 있다.
에이전트는 매 시점 환경으로부터 상태(state)나 관측(observation) 정보를 받고, 그에 따라 어떤 행동(action)을 선택하여 환경에 영향을 준다. 환경은 그 결과로 에이전트에게 보상(reward)을 제공하고 새로운 상태로 전이(transition)한다. 이처럼 에이전트와 환경은 순환적인 상호작용을 하며 시간에 따라 진행된다.
상태와 관측 (State & Observation)
상태(state)는 특정 시간에 환경이 놓인 상황을 나타내는 정보이다. 마르코프 의사결정 과정(MDP; 상태, 행동, 전이확률, 보상함수를 기반으로 하는 현재의 기본적인 RL 프레임워크)에서는 상태가 현재까지의 모든 정보를 함축하여, 오직 상태만 알고 있어도 미래 전개의 확률이 결정되도록 한다.
그러나 실제 문제에서는 에이전트가 환경의 완전한 상태를 항상 알 수 없는 경우도 많다. 이때 에이전트는 환경으로부터 관측(observation)을 얻는데, 이는 환경 상태의 부분적인 정보나 노이즈가 섞인 정보일 수 있다. 만약 환경이 완전 관측 가능하다면 관측 = 상태가 되지만, 부분 관측 가능한 경우 에이전트는 일련의 관측들을 기반으로 내부적으로 상태를 추론해야 한다. 예를 들어, 로봇 청소기의 상태가 방 안의 정확한 위치와 먼지 분포라면, 관측은 로봇의 센서가 감지한 일부 정보(앞에 벽까지 거리 등)에 불과할 수 있다.
행동과 행동 공간 (Action & Action Space)
행동(action)은 에이전트가 환경에 취할 수 있는 선택지이다. 행동을 취하면 환경의 상태가 변화하고, 그에 따른 보상이 발생한다. 행동 공간(action space)은 에이전트가 취할 수 있는 모든 행동들의 집합이다. 행동 공간은 이산적(discrete)일 수도 있고 연속적(continuous)일 수도 있다.
예를 들어, 체스 게임에서 행동 공간은 말들을 움직이는 모든 합법적 수들의 집합(이산적)이며, 자율주행 차량의 경우 핸들을 돌리는 각도나 페달을 밟는 세기처럼 연속적인 값들이 행동 공간이 된다. 에이전트의 정책(policy)은 주어진 상태(또는 관측)에서 어떤 행동을 취할지 결정하는 규칙 또는 확률 분포이다. 일반적으로 정책은 $\pi(a|s)$로 표기하며, 상태 $s$에서 행동 $a$를 취할 확률을 뜻한다. 정책이 확률적으로 정의되면 에이전트는 같은 상태에서도 다양한 행동을 시도할 수 있어 탐험(exploration)이 가능하다. 반대로 정책이 결정론적이라면 항상 같은 상태에서는 동일한 행동만 취하게 된다.
에피소드 (Episode)
에피소드란 강화학습에서 한 번의 문제 수행이 시작되어 끝날 때까지의 상태와 행동의 sequence을 말한다. 에피소드는 초기 상태에서 시작하여 에이전트가 일련의 행동을 취하면서 여러 상태와 보상을 거치고, 어떤 종료 상태(terminal state)에 도달하면 끝난다.
예를 들어, 게임에서 에피소드는 시작 화면에서 시작해 게임 오버 화면으로 끝나는 일련의 플레이 과정이다. 에피소드가 종료되면 일반적으로 환경을 초기화(reset)하여 새로운 에피소드를 시작한다. 일부 강화학습 문제는 자연스러운 종료가 없는 연속형(continuous) 태스크일 수도 있는데, 이런 경우는 이론적으로 에피소드가 무한히 길 수 있다. 연속형 태스크에서는 보통 일정 단계마다 임의로 에피소드를 끊거나, 할인율을 사용하여 미래 보상이 수렴하도록 다룬다.
보상과 반환 (Reward & Return)
보상(reward)은 에이전트가 어떤 행동을 취한 뒤 환경으로부터 즉각적으로 받는 피드백 신호이다. 보상은 그 행동의 유용성을 나타내며 보통 실수 값이다. 보상이 큰 값(예: +1, +10 등)이면 에이전트의 행동이 바람직했음을 의미하고, 작은 값이나 음수 값(예: 0 또는 -1)이면 바람직하지 않았음을 의미한다. 예를 들어, 바둑에서 착수를 할 때 승리하면 +1, 패배하면 -1의 보상을 마지막에 줄 수 있고, 또는 매 착수마다 0을 주다가 종료 시 승패에 따라 보상을 줄 수도 있다.
한편 반환(return) 또는 누적 보상은 에이전트가 에피소드 동안 얻은 보상들의 누적 값을 말한다. 일반적으로 시점 $t$부터 최종 시점 $T$까지의 누적 보상 $G_t$를 다음과 같이 정의한다.
$$G_t=R_t+1+R_t+2+⋯+R_T,G_t = R_{t+1} + R_{t+2} + \cdots + R_{T}$$
여기서 $R_{k}$는 시점 $k-1$에서 $k$로 진행할 때 받은 보상이다. 만약 보상이 할인율을 적용해 누적된다면, $G_t = R_{t+1} + \gamma R_{t+2} + \gamma^2 R_{t+3} + \cdots$ 형태로 정의된다. 반환 $G_t$는 에이전트가 시점 $t$부터 앞으로 얼마나 잘할지를 나타내는 지표이며, 강화학습의 목적은 에이전트의 기대 반환(expected return)을 최대화하는 것이다. 결국 에이전트는 각 상태에서 장기적으로 높은 반환을 가져오는 행동들을 찾고자 한다.
할인율 (Discount Factor, $\gamma$)
강화학습에서는 종종 할인율(discount factor) $\gamma \in [0,1]$를 사용하여 미래 보상의 현재 가치(current value)를 조정한다. $\gamma$ 값이 1에 가까울수록 먼 미래의 보상도 거의 동등하게 고려하고, $\gamma$가 0에 가까우면 눈앞의 보상만 중시하게 된다. 예를 들어 $\gamma = 0.9$이면 한 단계 미래의 보상은 0.9배, 두 단계 미래의 보상은 $(0.9)^2=0.81$배로 할인하여 합산한다. 할인율을 사용하는 이유는 (1) 미래에 받을 보상에 대한 불확실성을 반영하고, (2) 무한 에피소드에서도 누적 보상 합이 발산하지 않고 유한하게 만들기 위해서이다. 일반적으로 에피소드가 명확히 끝나는 문제(에피소드형 태스크)는 $\gamma$를 1에 가깝게 설정하기도 한다(또는 1로 설정하여 마지막까지 보상 합계를 그대로 사용). 반면 끝나지 않는 지속적인 문제에서는 $\gamma$를 1보다 약간 작은 값(예: 0.99)으로 하여 먼 미래의 보상 영향력을 조금씩 줄여준다.
Reinforce 알고리즘: Policy Gradient Reinforcement Learning
마르코프 의사결정 과정에 기반하는 강화학습 프레임워크 키 컴포넌트를 확인했으니, 이제 reinforce learning 알고리즘을 알아보자.
reinforce는 대표적인 정책 경사법(Policy Gradient) 기반 강화학습 알고리즘으로, 에이전트의 정책을 직접 최적화하는 방이다.
앞서 언급한 정책 $\pi(a|s)$는 어떤 상태에서 어떤 행동을 취할지에 대한 확률 분포인데, reinforce는 이 확률분포(정책)를 파라미터로 표현하고(eg. 신경망으로 표현된 정책, 파라미터 $\theta$), 에피소드를 통해 얻은 보상을 이용해 정책 파라미터를 업데이트한다. 쉽게 말해, “좋은 결과를 가져온 행동의 확률은 높이고, 나쁜 결과를 가져온 행동의 확률은 낮추는” 방향으로 정책을 조정하는 알고리즘이다.
Policy-based vs. Value-based Reinforcement Learning
강화학습 알고리즘에는 크게 가치 기반(value-based) 방법과 정책 기반(policy-based) 방법이 있다.
가치 기반의 대표적 예로, Q러닝(Q-learning)이나 DQN과 같은 알고리즘은 가치함수(value function), 특히 Q값(Q-value)을 학습하여 그로부터 행동을 선택한다. 가치 기반 방법에서는 에이전트가 각 상태에서 얼마나 좋은지를 평가하는 테이블이나 함수를 학습하고, 그 값을 최대화하는 행동을 선택하는 방식이다. Q러닝의 예시로는 움푸스월드를 예로 들 수 있다. 현재의 상태에서 어떤 grid로 이동해야 최적의 Q값을 가질지 에피소드를 반복하면서 학습한다. 이때 Q값은 단순히 즉각적인 리워드가 아닌 에이전트가 앞으로 얻을 수 있는 보상들을 모두 고려한 장기적인 가치를 평가하는 지표이다. DQN은 이와 같은 Q러닝의 개념을 딥러닝과 결합한 알고리즘으로, 신경망은 가치함수 $Q(s,a)$를 근사하기 위해 가중치를 조정해나간다.
반면 정책 기반 방법은 가치함수를 명시적으로 유지하지 않고 정책 자체를 직접 최적화한다. 정책을 확률적으로 모델링하고 그 기대 반환(expected return)을 최대화하도록 정책 파라미터를 조정하는 것이다.
아래는 정책 기반 방법의 장점을 나열한다.
- 연속적인 행동 공간에서도 바로 적용할 수 있다. (가치 기반은 모든 행동의 가치를 비교해야 하므로, 연속 행동의 경우 어려움이 있지만 정책 기반은 연속 파라미터를 직접 최적화 가능)
- 확률적 정책을 다루기 때문에 탐험(Exploration)을 자연스럽게 포함한다.(낮은 확률의 행동도 시도할 수도 있다.)
- 가치함수를 추정하는 과정에서의 오차 없이 직접 목표인 보상을 최대화하도록 학습하므로 알고리즘이 개념적으로 간단하다.
단점으로는, 정책의 분산(variance)이 큰 방향으로 업데이트될 수 있어 학습 안정성이 떨어질 수 있고, 충분한 학습을 위해 많은 에피소드가 필요할 수 있다는 점 등이 있다.
reinforce는 이러한 정책 경사 방법 중에서도 가장 기본적인 알고리즘으로, 때때로 policy gradient이라고 불리기도 한다. 이제 reinforce의 핵심 아이디어와 알고리즘 절차를 단계별로 살펴보자.
reinforce 알고리즘의 원리
reinforce 알고리즘은 에피소드 단위의 몬테카를로(Monte Carlo) 방식으로 동작한다. 몬테카를로 방식이란 에피소드를 시뮬레이션하여 실제 결과(샘플)를 얻고, 이를 이용해 어떤 기대값을 추정하는 방법이다. reinforce의 경우, 현재 정책으로 여러 에피소드를 샘플링하여 각각의 반환 $G_t$를 계산하고, 이 반환을 사용해 정책을 업데이트한다. 수식으로 표현하면 아래와 같다.
- 우선 현재의 정책 $\pi_{\theta}$를 가지고 에피소드를 하나 실행하여 상태, 행동, 보상 시퀀스 $ (s_0, a_0, r_1, s_1, a_1, r_2, \dots, s_{T-1}, a_{T-1}, r_T, s_T)$를 얻는다. 여기서 $s_T$는 종단 상태이며 에피소드가 길이 $T$로 끝났다고 가정
- 반환 $G_t = \sum_{k=t}^{T-1} \gamma^{,k-t} r_{k+1}$ (또는 할인 없이 누적합)을 각 시간 단계 $t$마다 계산
- 이제 정책 파라미터를 아래 식에 따라 갱신. 모든 시간 단계에 대해 정책의 파라미터 $\theta$를 업데이트하는데, 업데이트 양은 반환 $G_t$와 정책의 로그확률의 경사(gradient)에 비례한다.
$$\theta \leftarrow \theta + \alpha \, G_t \, \nabla_{\theta} \log \pi_{\theta}(a_t \mid s_t)$$
여기서 $\alpha$는 학습률(learning rate)이다. 이 식은 결국 행동 $a_t$의 확률을 그 행동으로 얻은 반환 $G_t$ 만큼 증분시키는 방향으로 파라미터를 조정하는 효과를 낸다. 만약 어떤 행동으로 인한 $G_t$가 평균보다 크면 (예를 들어 긍정적인 성과), $\log \pi_{\theta}(a_t|s_t)$의 경사는 그 행동의 확률을 높이는 방향으로 $\theta$를 바꾼다. 반대로 $G_t$가 낮으면 해당 확률을 줄이는 방향으로 업데이트된다. 이러한 방식으로 반복하면, 에이전트는 점차 높은 보상을 주는 행동의 확률을 키워가며 정책을 개선해나가게 된다.
수식 유도 노트: 위 갱신 식은 정책 성능 지표 $J(\theta)$의 경사 추정치로 볼 수 있다. 이론적으로 정책 파라미터의 목표 함수로 $J(\theta) = \mathbb{E}[G_0]$ (초기 상태에서 기대 반환)라고 두면, 강화학습의 정책 경사 정리에 따라 $\nabla_{\theta} J(\theta) = \mathbb{E}_{\pi}\!\big[ G_t \, \nabla_{\theta} \log \pi_{\theta}(a_t \mid s_t) \big]$ 임을 증명할 수 있다. REINFORCE는 몬테카를로 샘플을 통해 이 기댓값 경사를 추정하여 확률적 경사상승(stochastic gradient ascent)을 수행하는 것으로 해석할 수 있다.
알고리즘 절차 요약 (의사코드)
위 원리를 실제 알고리즘으로 표현하면 아래와 같다.
- 초기화: 정책 $\pi_{\theta}$의 파라미터 $\theta$를 임의의 값으로 초기화한다. (예: 무작위 초기화)
- 에피소드 샘플링: 현 정책으로 환경에서 에피소드를 하나 수행하여 상태, 행동, 보상 시퀀스를 저장한다.
- 반환 계산: 에피소드가 끝나면 각 시간 step $t$에 대해 해당 시점부터 얻은 누적 할인 보상 $G_t$를 계산한다.
- 정책 갱신: 에피소드의 각 시간 step에 대해 $\theta \leftarrow \theta + \alpha , G_t , \nabla_{\theta} \log \pi_{\theta}(a_t \mid s_t)$로 정책 파라미터를 업데이트한다. 이때 $\nabla_{\theta} \log \pi_{\theta}(a_t \mid s_t)$는 현재 정책이 $s_t$에서 $a_t$를 선택한 로그확률의 기울기이다(이 값은 정책이 신경망 등으로 표현된 경우 역전파로 구할 수 있다).
- 반복: 2~4 단계를 여러 에피소드에 걸쳐 반복한다. 충분한 에피소드를 학습하면 정책이 점차 개선되어, 에이전트는 더 높은 보상을 얻도록 행동하게 된다.
위 과정에서 에피소드 단위로 업데이트가 이뤄지므로, REINFORCE 알고리즘은 정책이 한참 잘못되어 있어도 에피소드가 끝날 때까지는 수정하지 않고 쭉 진행해야 한다. 이 때문에 학습이 불안정하거나 느릴 수 있지만, 이 또한 몬테카를로 방법의 일환이기 때문이다. 학습률 $\alpha$를 너무 크게 잡으면 정책 확률이 불안정하게 출렁일 수 있으므로, 작은 값으로 서서히 증가시키는 편이 안전하다.
REINFORCE의 장단점 및 개선
REINFORCE는 구현이 비교적 간단하고 이론적으로 불편편추정(unbiased estimation)의 정책 경사 방향을 제시하지만, 몇 가지 단점이 알려져 있다:
- 높은 분산(variance): 반환 $G_t$ 자체가 확률적 시뮬레이션 결과이기 때문에 샘플 간 편차가 크다. 이는 곧 그래디언트 추정치의 분산으로 이어져 학습이 느려지거나 불안정해질 수 있다.
- 오프라인 업데이트: 에피소드가 끝날 때까지 기다렸다가 한꺼번에 업데이트하므로, 매우 긴 에피소드의 경우 학습 신호가 늦게 반영된다.
- 보상 설계에 민감: 반환값 자체에 스케일이 크거나 보상의 분포가 극단적이면 그래디언트가 폭주하거나 미미해질 수 있다.
이러한 이유로 REINFORCE를 개선하는 여러 기법들이 고안되었다. 대표적으로 baseline이라는 값을 사용하여 반환에서 그 값을 빼주어 분산을 낮추는 기법이 있다. 특히 어드밴티지 함수(Advantage) $A(s,a) = Q(s,a) - V(s)$를 baseline으로 사용하는 경우, 정책 경사에서 단순 반환 $G_t$ 대신 어드밴티지 추정치를 사용하게 되는데, 이는 REINFORCE 대비 분산이 줄어든 Advantage Actor-Critic 알고리즘 등의 기반이 된다. Actor-Critic 방법에서는 에이전트가 정책(actor)과 가치함수(critic)를 모두 학습하여 매 스텝 온라인 업데이트를 수행하므로, REINFORCE의 단점을 보완한다. 또한 최근에는 Trust Region 방법이나 roximal Policy Optimization(PPO) 등 정책 경사의 안정성을 높이는 알고리즘들도 널리 활용되고 있다. 이러한 발전형 알고리즘들은 결국 REINFORCE의 기본 원리를 토대로 보다 빠르고 안정적으로 학습하도록 고안된 것이다.
최신 강화학습 연구 동향
강화학습은 최근 몇 년간 눈부신 발전을 거듭하며 다양한 분야에 적용되고 있다. 최신 연구 동향 몇 가지를 정리하면 아래와 같다.
- 딥 러닝과의 결합: 심층 강화학습(Deep RL)은 딥러닝을 활용해 높은 차원의 상태(예: 이미지)에서도 학습을 가능하게 했다. 2015년 딥마인드의 DQN 알고리즘은 픽셀 입력만으로 아타리 게임을 인간 수준으로 플레이해 주목을 받았고, 이후 AlphaGo와 AlphaZero는 강화학습과 딥러닝으로 바둑과 체스 등에서 인간 챔피언을 이겼다. 현재도 PPO, SAC, TD3 같은 딥러닝 기반 알고리즘들이 로보틱스, 게임 등에서 표준으로 쓰이고 있다.
- 모델 기반 강화학습(Model-based RL): 환경의 동적 모델을 학습하여 활용하는 접근이 다시 각광받고 있다. AlphaGo 계열의 성공으로 한때 모델 프리(model-free) 기법이 주도했지만, 샘플 효율을 높이기 위해 환경 모델을 배워서 시뮬레이션하는 알고리즘(예: AlphaZero의 몬테카를로 트리 탐색, MuZero의 모델 학습)이 활발히 연구된다. 모델을 사용하면 실제 환경 상호작용을 줄이고도 예측과 계획을 통해 효율적 학습이 가능하기 때문이다.
- 오프라인 강화학습(Offline RL): 과거에 수집된 정적 데이터셋만으로 학습하는 강화학습 방법론도 떠오르고 있다. 이는 실제 로봇이나 자율주행처럼 데이터 수집 비용이 큰 분야에서 특히 중요하다. 오프라인 RL에서는 기존 경험 데이터로부터 안전하게 정책을 학습하고, 배운 정책을 실제 환경에 적용하는 방법을 연구한다. 이때 분포 이동(distribution shift) 문제나, 제한된 데이터에서의 일반화 문제가 핵심 이슈이다.
- 메타 강화학습 및 일반화: 한 환경에서 배운 전략을 새로운 환경에 빠르게 적용하는 메타 학습(meta-learning), 전이 학습(transfer learning), 범용성에 관한 연구도 이루어지고 있다. 예를 들어, 다양한 게임을 한 에이전트가 학습한 후 새로운 게임에서도 적응하도록 하거나, 단 몇 번의 시도로 새로운 과제를 해결하는 “학습 방법을 학습”하는 연구들이 진행되고 있다.
- 강화학습 + 언어모델/인간 피드백: 거대 언어 모델(LLM)의 발전과 함께, 인간 피드백을 활용한 강화학습(RLHF)이 화제가 되었다. OpenAI의 ChatGPT도 RLHF로 Fine-tuning되었듯이, 인간 선호나 피드백을 보상으로 사용하는 접근이 AI 안전성과 품질 향상 측면에서 주목받고 있다. 또한 강화학습을 언어 모델의 응답 최적화나, 복잡한 추론 과정을 학습시키는 데 이용하는 시도들도 활발하다.
- 이론적 연구와 윤리적 고려: 드라마틱한 성과들 뒤에서, 한편으로는 강화학습의 안정성, 수렴 보장 등에 대한 이론 연구도 지속되고 있다. 보상 설계의 어려움으로 인한 보상 해킹(reward hacking) 문제나, 안전하지 않은 탐험으로 인한 위험을 줄이는 안전 강화학습도 중요한 흐름이다. 에이전트가 학습 과정에서 예기치 않은 행동을 하지 않도록 제약을 두거나, 인간의 의도를 잘 반영하는 보상 체계를 만드는 연구 등이 진행된다.
강화학습은 기본 개념인 보상과 상태, 정책 등을 바탕으로 REINFORCE 같은 알고리즘이 등장했고, 이후 딥러닝의 융합으로 강력히 사용된다. 최신 연구들은 표현력 증가, 샘플 효율 향상, 일반화와 안전성 확보에 집중하고 있다. 강화학습은 여전히 발전 중인 분야로, 핵심 개념들을 이해하고 나면 새로운 알고리즘이나 응용이 나와도 그 근간을 빠르게 파악할 수 있을 것이다. 앞으로도 등장할 다양한 강화학습 기법들을 이러한 기본 원리와 함께 지속적으로 학습해 나가는 것이 중요한 듯 하다.
레퍼런스
Getting Started with Reinforcement Learning in Python, wrench, https://python.plainenglish.io/getting-started-with-reinforcement-learning-in-python-667a1f3b7f0f
'DATA, AI' 카테고리의 다른 글
[발표요약]what is transformer? (0) | 2025.04.08 |
---|---|
우분투 환경에서 deepseek-r1 로컬 설치하기(open-webui, docker) (2) | 2025.01.30 |
GPU의 제한된 vram 환경에서 효율적으로 모델을 학습하는 방법 (1) | 2024.11.20 |
huggingface로 협업하기 (2) | 2024.10.29 |
입출력 형태에 따른 자연어 처리 Task의 이해 (2) | 2024.10.02 |
개발새발라이프
hi there🙌