강화 학습 알고리즘 선택과 운영 설계
Q-Learning, DQN, Actor-Critic, PPO, MARL의 학습 방식과 안정화 기법, 강화 학습 운영 파이프라인을 정리한다.
2026-08-14 · 최초 발행 2025-10-14
보상 지연이 있는 의사결정을 모델링하는 방법
강화 학습은 에이전트가 환경과 상호작용하며 누적 보상을 극대화하는 정책을 학습하는 방식이다. 보상이 즉시 돌아오지 않는 순차적 의사결정 문제를 마르코프 결정 과정(MDP)으로 표현하는 데서 출발한다.
모델에는 상태(state), 행동(action), 보상(reward), 전이동학(transition), 정책(policy), 가치함수(value)가 들어간다. 정책이 현재 상태에서 무엇을 선택할지 표현한다면, 가치함수는 그 선택이 장기적으로 얼마나 유리한지를 추정한다. 미래 보상은 할인율(γ)로 가중치를 조정한다.
학습 방식은 행동을 수집한 정책으로만 업데이트하는 on-policy와, 이전 정책의 경험도 재사용하는 off-policy로 구분할 수 있다. 환경 모델 없이 경험에서 직접 학습하는 model-free와 전이 모델을 활용하는 model-based 구분도 함께 고려한다.
보상 설계는 모델 성능과 운영 지표를 연결하는 지점이다. 보상 스케일링이나 셰이핑, 페널티를 통해 수렴을 돕되, 보상이 실제 KPI와 어긋나지 않는지 검증해야 한다. 탐험은 ε-greedy, Boltzmann 탐색, 엔트로피 보너스 등으로 조절하며, 위험한 환경에서는 안전 탐험 제약을 별도로 둔다.
가치 기반 방법인 Q-Learning과 DQN은 Q 함수 근사에 초점을 둔다. Actor-Critic 계열은 정책과 가치함수를 함께 학습하므로 분산을 다루고 연속 제어 문제에 적용하기 좋다. 학습 안정화를 위해 리플레이 버퍼, 타깃 네트워크, 이점추정(GAE), KL 제약, 그래디언트 클리핑을 사용하며, 학습률·배치 크기·타깃 스무딩의 민감도도 관리 대상이다.
다수 에이전트가 얽힌 문제에서는 중앙집중 학습·분산 실행(CTDE) 패턴을 적용할 수 있다. 파라미터 공유와 상호작용 로그는 샘플 효율을 높이는 데 활용한다.
문제 형태에 따라 달라지는 알고리즘
Q-Learning
Q-Learning은 모델 프리·오프폴리시 방식으로 Q 값을 반복 업데이트한다. 탭룰러 환경에서는 적절한 방문 조건 아래 이론적 수렴을 보장한다.
상태 s와 Q 테이블 또는 함수로 시작한 뒤, ε-greedy로 행동을 선택하고 보상 r과 다음 상태 s'를 관찰한다. TD 타깃 r+γ max_a' Q(s',a')를 이용해 Q(s,a)를 갱신하고, 에피소드가 끝나면 환경을 리셋한다.
학습이 불안정하면 학습률 감소 스케줄과 ε 감소를 조정한다. 상태 방문이 희소하다면 탐험을 강화한다. 연속 상태에서는 타일 코딩, RBF, 신경망 같은 함수근사가 필요하다.
DQN
DQN은 신경망으로 Q 함수를 근사하며, 리플레이 버퍼와 타깃 네트워크로 업데이트를 안정화한다. 이산 행동 공간에 적합하다.
전이 (s,a,r,s',done)를 버퍼에 쌓고, 미니배치를 뽑아 r+γ(1-done) max_a' Q_target(s',a')를 TD 타깃으로 삼는다. MSE 손실을 줄여 Q 네트워크를 갱신하고, 타깃 네트워크는 주기적으로 동기화한다.
과대추정 완화에는 Double DQN, 상태가치와 어드밴티지를 분리하는 구조에는 Dueling, 표본 효율 개선에는 Prioritized Replay를 적용할 수 있다. 그래디언트 클리핑도 안정화 수단이다.
Actor-Critic
Actor-Critic은 정책을 담당하는 Actor와 가치함수를 추정하는 Critic을 동시에 학습한다. on-policy 수렴성과 샘플 효율 사이의 균형을 다루는 구조다.
롤아웃을 수집한 다음 리턴과 어드밴티지를 계산한다. 정책 그라디언트 ∇θ log πθ(a|s)·A, 가치 손실, 엔트로피 보너스를 합산해 업데이트하며, 결과는 갱신된 정책·가치 네트워크다. A3C에서는 여러 프로세스가 동시에 롤아웃을 수집한다.
GAE는 분산과 바이어스의 절충에 쓰이며, 학습률·엔트로피 가중치 튜닝과 advantage 정규화도 함께 적용한다.
PPO
PPO는 KL 제약을 근사하는 클리핑 목적함수로 정책이 한 번에 과도하게 바뀌는 일을 막는다. 구현의 단순성과 학습 안정성 때문에 실무에서 널리 쓰이는 방식이다.
on-policy 롤아웃(batch T×N)을 입력으로 받아 확률비 r_t, 클리핑 L^CLIP, 가치 손실, 엔트로피를 합산한다. 미니배치 SGD와 다중 에폭을 거쳐 새로운 정책과 가치 네트워크를 만든다.
KL 모니터링과 early stop, 학습률 스케줄, reward·advantage 정규화, 그래디언트 클립으로 갱신을 제어한다.
Multi-Agent RL
MARL은 여러 에이전트가 상호작용하는 환경에서 비정상(non-stationary) 문제를 다룬다. CTDE, 공유 크리틱, 상호작용 모델링이 대표적인 접근이다.
에이전트별 관측·행동·보상과 공통 또는 개별 버퍼를 입력으로 사용한다. 중앙 크리틱이 상태와 공동행동으로 가치를 추정하고, 실행 단계에서는 각 에이전트의 정책이 분산된 형태로 갱신된다. 출력은 에이전트별 정책 파라미터다.
중요도 샘플링, 대칭성을 활용한 파라미터 공유, 커뮤니케이션 채널 제약, 신뢰영역이나 클리핑으로 학습을 안정화한다.
환경 경험이 학습 업데이트로 이어지는 흐름
알고리즘 선택 시 비교할 운영 특성
| 알고리즘 | 성능(최종) | 확장성(분산/병렬) | 일관성(학습 안정) | 안정성(로버스트) | 운영 편의 |
|---|---|---|---|---|---|
| Q-Learning | 중간(이산·작은 상태) | 낮음(탭룰러 한계) | 높음(이론 수렴) | 중간 | 매우 높음 |
| DQN | 중~높음(이산) | 중간(분산 수집 용이) | 중간(트릭 필수) | 중간 | 높음 |
| A2C/A3C | 중간 | 높음(멀티프로세스) | 중간 | 중간 | 높음 |
| PPO | 높음(연속/이산 범용) | 높음 | 높음(클리핑 효과) | 높음 | 매우 높음 |
| MARL(CTDE) | 과제 의존 | 높음 | 낮~중(비정상성) | 과제 의존 | 중간 |
성능과 안정성은 환경 및 하이퍼파라미터에 따라 달라진다. 최신 프레임워크와 버전도 서로 다를 수 있으므로 최신 정보 확인이 필요하다.
배포까지 고려한 학습 환경 설계
먼저 상태·행동·보상을 정의하고, KPI와 보상 함수의 정합성을 검증한다. 비용 보상과 안전 탐험 한계처럼 안전 제약도 함께 정의한다.
시뮬레이터는 현실 데이터 재현율을 측정해 정확도를 검증한다. 확률성, 리셋, 종료 조건을 명시하고, 로그 재생(off-policy)이 가능하도록 설계한다. 배치 평가에는 IPS, DR, OPE 지표를 준비한다.
이산적이고 작은 상태 공간에서는 Q-Learning 또는 DQN을, 연속 제어와 로보틱스에는 PPO 또는 Actor-Critic을 고려한다. 상호작용하는 주체가 여럿이면 CTDE 기반 MARL이 대상이 된다. 실시간 제약이 있다면 경량 모델과 온디바이스 추론을 검토한다.
수집, 버퍼 적재, 학습, 평가, 배포가 반복되는 파이프라인을 자동화한다. 타깃 네트워크, 우선순위 리플레이, KL 모니터링, 조기 종료로 안정성을 확보하고, 시드·정규화·관측 스케일을 고정해 재현성을 관리한다.
운영 단계에서는 온라인 A/B와 샌드박스 롤아웃, 오프라인 OPE로 사전 검증한다. 안전 스위치와 롤백 절차를 갖추고, 보상·행동 분포의 드리프트를 탐지하면서 하이퍼파라미터를 지속적으로 튜닝한다.
FrozenLake에서 실행하는 탭룰러 Q-Learning
전제: Python 3.10+, gymnasium 0.29+, numpy 1.26+. 이산 상태/행동 환경 가정.
import numpy as np
import gymnasium as gym
env = gym.make("FrozenLake-v1", is_slippery=False) # 결정론 버전
nS, nA = env.observation_space.n, env.action_space.n
Q = np.zeros((nS, nA))
episodes, gamma = 3000, 0.99
alpha_start, alpha_end = 1.0, 0.1
eps_start, eps_end = 1.0, 0.05
def schedule(step, total, start, end):
f = step / total
return start * (1 - f) + end * f
step = 0
for ep in range(episodes):
s, _ = env.reset()
done = False
while not done:
eps = schedule(step, episodes*100, eps_start, eps_end)
alpha = schedule(step, episodes*100, alpha_start, alpha_end)
a = np.random.choice(nA) if np.random.rand() < eps else np.argmax(Q[s])
s2, r, terminated, truncated, _ = env.step(a)
done = terminated or truncated
td_target = r + (0 if done else gamma * np.max(Q[s2]))
Q[s, a] += alpha * (td_target - Q[s, a])
s = s2
step += 1
# 간단 평가
def evaluate(episodes=100):
wins = 0
for _ in range(episodes):
s, _ = env.reset()
done = False
while not done:
a = np.argmax(Q[s])
s, r, term, trunc, _ = env.step(a)
done = term or trunc
if done and r > 0: wins += 1
return wins / episodes
print("Success rate:", evaluate())
ε와 α에는 선형 또는 지수 감쇠 스케줄을 적용할 수 있다. 상태 방문 편향이 보이면 탐험을 높여 조정한다. 연속 상태 환경으로 확장할 때는 타일 코딩이나 신경망 같은 함수근사가 필요하다.
학습 효과와 점진적 도입의 기준
안정화 기법을 적용하면 학습 분산이 표준편차 2040% 감소할 수 있다. PPO 도입은 동일 샘플 수 대비 수렴 에폭을 1030% 줄였다는 보고 사례가 있으며, 우선순위 리플레이는 환경에 따라 샘플 효율을 1.2~1.5배 개선할 수 있다.
보상 중심 설계는 KPI를 직접 최적화할 수 있게 하고, 시뮬레이션 기반 실험은 실제 운영 리스크를 낮춘다. 파이프라인 자동화는 실험 속도를 높이며, 멀티에이전트 접근은 복잡한 시스템 제어에 활용할 수 있다. 최신 라이브러리와 하드웨어 변화의 영향은 존재하므로 최신 정보 확인이 필요하다.
PoC는 단순한 환경과 명확한 보상에서 시작한다. 오프라인 평가 체계와 안전 가드레일을 갖춘 뒤 점진적으로 배포하고, 분산 수집과 자동화 파이프라인으로 운영 효율을 높인다.