정책 그래디언트 방법: REINFORCE
정책 그래디언트 정리, REINFORCE 알고리즘, 기준선 차감, 분산 감소를 다룹니다.
정책 그래디언트 방법: REINFORCE은(는) CoddyKit의 무료 Learn AI with Python 강의입니다. 이것은 4개 중 1번째 강의입니다. 아래에서 전체 강의를 무료로 읽을 수 있으며, 내장 코드 에디터와 24/7 AI 튜터와 함께 브라우저에서 직접 실습할 수 있습니다. 이 강의는 Learn AI with Python 학습 경로의 일부이며, 진행 상황이 웹과 CoddyKit 앱에 동기화됩니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.
가치 기반 RL과 Policy 기반 RL
일부 RL 방법은 행동의 가치를 학습한 뒤 탐욕적으로 행동합니다. 반면 Policy 그래디언트 방법은 정책을 직접 학습합니다. 정책은 행동 확률을 출력하는 함수입니다. 이 방법은 연속적인 행동과 확률적 정책을 자연스럽게 처리합니다.
Policy pi(a|s)
매개변수화된 정책 pi(a|s, theta)는 상태를 행동에 대한 확률 분포로 매핑하며, 매개변수 theta(신경망)를 가집니다. 학습에서는 더 많은 보상을 얻는 행동을 선호하도록 theta를 조정합니다.
class Policy(nn.Module):
def __init__(self, obs_dim, n_actions):
super().__init__()
self.net = nn.Sequential(
nn.Linear(obs_dim, 128), nn.ReLU(),
nn.Linear(128, n_actions)
)
def forward(self, s):
return torch.softmax(self.net(s), dim=-1)행동 샘플링
정책은 분포이므로 최댓값을 고르는 대신 행동을 sample합니다. 샘플링은 탐색을 가능하게 하고 정책을 확률적으로 만듭니다.
probs = policy(state)
dist = torch.distributions.Categorical(probs)
action = dist.sample()
log_prob = dist.log_prob(action)궤적 실행
에피소드(궤적)는 시작부터 종료까지 이어지는 상태, 행동, 보상의 순서입니다. 환경이 종료될 때까지 행동하면서 전체 궤적을 수집합니다.
states, actions, rewards, log_probs = [], [], [], []
state, _ = env.reset()
done = False
while not done:
probs = policy(torch.tensor(state).float())
dist = torch.distributions.Categorical(probs)
a = dist.sample()
state, r, term, trunc, _ = env.step(a.item())
rewards.append(r); log_probs.append(dist.log_prob(a))
done = term or trunc할인된 return G_t
return G_t는 시점 t 이후의 전체 미래 보상이며, 가까운 보상에 더 큰 비중을 두도록 gamma로 할인합니다. 이를 통해 t 이후 각 step에서 취한 행동이 얼마나 좋은 결과를 냈는지 알 수 있습니다.
def returns(rewards, gamma=0.99):
G, out = 0, []
for r in reversed(rewards):
G = r + gamma * G
out.insert(0, G)
return torch.tensor(out)REINFORCE 목적함수
REINFORCE는 기대 누적 보상에 대해 그래디언트 상승을 수행합니다. 직관적으로 말하면, 높은 누적 보상으로 이어진 행동의 확률은 높이고 낮은 누적 보상으로 이어진 행동의 확률은 낮춥니다. 각 행동은 해당 행동의 G_t에 따라 가중됩니다.
정책 경사법
손실 함수는 -sum(log_prob * G_t)입니다. 음수 부호를 사용하면 그래디언트 상승이 하강으로 바뀌므로 최적화기가 누적 보상을 최대화하게 됩니다. 누적 보상이 높은 행동은 로그 확률이 증가하도록 조정됩니다.
G = returns(rewards)
loss = -torch.sum(torch.stack(log_probs) * G)정책 업데이트
평소처럼 역전파를 수행하고 업데이트합니다. 한 번의 업데이트에는 전체 궤적을 사용한 다음 해당 궤적을 버립니다(REINFORCE는 온폴리시 방식이므로 현재 정책에서 얻은 데이터만 사용합니다).
optimizer.zero_grad()
loss.backward()
optimizer.step()높은 분산 문제
기본 REINFORCE는 악명 높을 정도로 불안정하고 분산이 큽니다. 에피소드마다 누적 보상이 크게 달라지므로 그래디언트 추정이 잡음이 많고 학습이 느리며 불규칙합니다.
분산 감소를 위한 기준선
G_t에서 평균 누적 보상과 같은 기준선을 빼면 그래디언트에 편향을 주지 않고 분산을 줄일 수 있습니다. 단순히 누적 보상이 양수인 행동이 아니라 기대보다 나은 행동에 보상을 줍니다.
baseline = G.mean()
advantage = G - baseline
loss = -torch.sum(torch.stack(log_probs) * advantage)REINFORCE가 중요한 이유
REINFORCE는 모든 정책 경사법의 토대입니다. 높은 분산과 표본 비효율성이라는 단점이 다음에 살펴볼 액터-크리틱 및 PPO 방법의 동기가 됩니다.
빠른 확인
정책 경사법에 대한 이해도를 확인해 보세요.
복습: REINFORCE
정책 pi(a|s,theta)를 매개변수화하고, 궤적을 실행하며, 할인된 누적 보상 G_t를 계산하고, -sum(log_prob * G_t) 손실로 그래디언트 상승을 수행하는 방법을 배웠습니다. REINFORCE의 높은 분산과 이를 기준선으로 줄이는 방법도 살펴보았습니다.
자주 묻는 질문
“정책 그래디언트 방법: REINFORCE” 강의는 무료인가요?
네 — “정책 그래디언트 방법: REINFORCE” 전체 내용을 이 웹사이트에서 무료로 읽을 수 있습니다. 인터랙티브하게 실습하려면(내장 코드 에디터와 24/7 AI 튜터), CoddyKit PRO로 업그레이드하면 Learn AI with Python 강의 전체를 잠금 해제할 수 있습니다. Learn AI with Python 강의에는 총 4개의 강의가 포함되어 있습니다.
“정책 그래디언트 방법: REINFORCE”에서 뭘 배우나요?
정책 그래디언트 정리, REINFORCE 알고리즘, 기준선 차감, 분산 감소를 다룹니다. 브라우저에서 직접 실행하는 실습 코드로 Learn AI with Python을(를) 배우며, 24/7 AI 튜터가 강의를 진행하면서 질문에 답변해줍니다.
Learn AI with Python을(를) 시작하는 데 경험이 필요한가요?
사전 경험은 필요하지 않습니다. CoddyKit의 Learn AI with Python은(는) 초급자부터 고급 학습자까지를 위해 구성되어 있으므로, 여기서 시작하거나 처음부터 시작할 수 있으며 자신의 속도대로 진행할 수 있습니다. 이것은 4개 중 1번째 강의입니다.
“정책 그래디언트 방법: REINFORCE” 강의는 얼마나 걸리나요?
대부분의 CoddyKit 강의는 약 5~10분이 소요됩니다. 각 강의는 간결하고 인터랙티브하여 꾸준한 진행이 가능하며, 웹과 앱에서 중단한 부분부터 바로 시작할 수 있습니다.
이 Learn AI with Python 강의에서 코드를 작성하고 실행할 수 있나요?
네. 모든 Learn AI with Python 강의에는 내장 코드 에디터가 포함되어 있으므로, 브라우저에서 바로 실제 코드를 작성하고 실행한 후 즉시 AI 피드백을 받을 수 있습니다 — 로컬 설정이 필요 없습니다.
이 강의의 모든 강의
- 정책 그래디언트 방법: REINFORCE
- 액터-크리틱 방법(A2C)
- 근접 정책 최적화(PPO)
- 사용자 지정 Gymnasium 환경