TF-Agents 정책 평가하기


TF-Agents - TensorFlow 강화학습 라이브러리

정책 (Policy)은 강화학습의 환경에서 에이전트가 동작하는 방식입니다.

이 페이지에서는 TF-Agents 정책 다루기에서 만들었던 에이전트의 정책을 평가하는 과정을 소개합니다.



1) 정책 만들기

예제

import tensorflow as tf

from tf_agents.environments import suite_gym
from tf_agents.environments import tf_py_environment
from tf_agents.agents.dqn import dqn_agent
from tf_agents.networks import q_network
from tf_agents.utils import common
from tf_agents.policies import random_tf_policy


env_name = 'CartPole-v0'
train_py_env = suite_gym.load(env_name)
eval_py_env = suite_gym.load(env_name)

train_env = tf_py_environment.TFPyEnvironment(train_py_env)
eval_env = tf_py_environment.TFPyEnvironment(eval_py_env)

q_net = q_network.QNetwork(
    train_env.observation_spec(),
    train_env.action_spec(),
    fc_layer_params=(100,))

optimizer = tf.compat.v1.train.AdamOptimizer(learning_rate=1e-3)
train_step_counter = tf.Variable(0)

agent = dqn_agent.DqnAgent(
    train_env.time_step_spec(),
    train_env.action_spec(),
    q_network=q_net,
    optimizer=optimizer,
    td_errors_loss_fn=common.element_wise_squared_loss,
    train_step_counter=train_step_counter)

agent.initialize()

eval_policy = agent.policy
collect_policy = agent.collect_policy
random_policy = random_tf_policy.RandomTFPolicy(train_env.time_step_spec(),
                                                train_env.action_spec())

TF-Agents 정책 다루기에서 설명했던대로 eval_policy, collect_policy는 에이전트의 정책입니다.

또한 random_policy는 에이전트와 독립적이며, train_env의 특정 TimeStep에 대해 임의의 행동을 반환하는 정책입니다.




2) 정책 평가 함수 만들기

예제

def compute_avg_return(environment, policy, num_episodes=10):

  total_return = 0.0
  for _ in range(num_episodes):

      time_step = environment.reset()
      episode_return = 0.0

      while not time_step.is_last():
          action_step = policy.action(time_step)
          time_step = environment.step(action_step.action)
          episode_return += time_step.reward
      total_return += episode_return

  avg_return = total_return / num_episodes
  return avg_return.numpy()[0]

compute_avg_return() 함수는 주어진 환경 (environment)정책 (policy) 인자에 대해 주어진 에피소드 (num_episodes) 동안의 평균 리턴 (보상의 총합의 평균)을 반환합니다.

total_return은 주어진 에피소드 동안 얻은 리턴의 총합이며, episode_return은 각 에피소드의 리턴 (보상의 총합)입니다.

TimeStep 인스턴스는 is_first(), is_mid(), is_last() 메서드를 포함합니다.

TimeStep 인스턴스의 is_last() 메서드는 해당 TimeStep이 에피소드의 마지막 TimeStep인지 여부를 반환합니다.




3) 정책의 평균 리턴 확인하기

예제

avg_returns = []
for _ in range(5):
    avg_returns.append(compute_avg_return(eval_env, random_policy, 10))

print(avg_returns)
[25.7, 22.1, 22.9, 29.0, 20.4]

avg_returns 리스트의 각 값은 10회 에피소드 동안의 평균 리턴 값을 의미합니다.

eval_env 환경에서 random_policy는 평균 리턴값이 30보다 작음을 알 수 있습니다.

CartPole-v0 게임의 목표는 100회의 연속적인 시도에서 평균 195회의 평균 리턴을 획득하는 것입니다.

즉, 100회 이상의 연속된 에피소드에서 195회의 TimeStep 동안 막대기가 넘어지지 않도록 유지하는 것입니다.



이전글/다음글