TF-Agents 정책 다루기


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

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

정책은 TimeStep에 대해 행동 (Action)을 반환하며, 강화학습은 목표에 맞게 동작하는 정책을 얻기 위한 과정입니다.



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

tf_agents.policies 모듈은 정책 (Policy)과 관련된 모듈을 포함합니다.

이 중 임의의 행동을 선택하는 정책과 관련된 random_tf_policy 모듈을 임포트합니다.




2) 에이전트의 정책

예제

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())

print(eval_policy)
print(collect_policy)
print(random_policy)
<tf_agents.policies.greedy_policy.GreedyPolicy object at 0x7fdb8be6f588>
<tf_agents.policies.epsilon_greedy_policy.EpsilonGreedyPolicy object at 0x7fdb8be6f470>
<tf_agents.policies.random_tf_policy.RandomTFPolicy object at 0x7fdb8be6f860>

dqn_agent.DqnAgent 인스턴스는 policy, collect_policy 속성을 포함합니다.

policy는 에이전트의 현재 정책을, collect_policy는 에이전트가 환경으로부터 데이터를 수집하는 정책을 반환합니다.

에이전트와 독립적인 정책을 만들 수 있습니다.

random_tf_policy 모듈의 RandomTFPolicy 클래스는 주어진 action_spec에서 임의로 샘플링한 행동을 반환합니다.




3) 정책으로부터 행동 얻기

예제

ex_env = tf_py_environment.TFPyEnvironment(
  suite_gym.load('CartPole-v0')
)

time_step0 = ex_env.reset()

rand_action = random_policy.action(time_step0)

print(rand_action)
print(rand_action.action)
print(rand_action.action.numpy())
PolicyStep(action=<tf.Tensor: shape=(1,), dtype=int64, numpy=array([1])>, state=(), info=())
tf.Tensor([1], shape=(1,), dtype=int64)
[1]

임의의 CartPole 환경 (ex_env)을 하나 만들었습니다.

ex_env.reset()은 첫번째 TimeStep을 반환합니다.

policy.action(TimeStep)과 같은 형식을 통해서, 정책 policy로부터 특정 TimeStep에 대한 행동을 얻을 수 있습니다.

rand_action은 정책 random_policy로부터 time_step0에 대해 얻은 임의의 행동입니다.

rand_action.action으로 Tensor 형태로, rand_action.action.numpy()는 NumPy 어레이 형태로 행동을 얻을 수 있습니다.

CartPole 환경에서 행동 1은 카트를 오른쪽으로 미는 동작을 의미합니다.



이전글/다음글