Являются ли эти реализации градиента политики эквивалентными? - PullRequest
0 голосов
/ 12 февраля 2019

Я изучаю градиент политики через игру CartPole.Я получил две реализации, и обе работают хорошо.Однако я думаю, что эти два примера используют противоположный способ выбора действия.Вот частичные коды обеих реализаций.Я только перечисляю модель сети и то, как они выбирают действия.

метод 1

observations = C.sequence.input_variable(state_dim, np.float32, name="obs")
W1 = C.parameter(shape=(state_dim, hidden_size), init=C.glorot_uniform(), name="W1")
b1 = C.parameter(shape=hidden_size, name="b1")
layer1 = C.relu(C.times(observations, W1) + b1)
W2 = C.parameter(shape=(hidden_size, action_count), init=C.glorot_uniform(), name="W2")
b2 = C.parameter(shape=action_count, name="b2")
layer2 = C.times(layer1, W2) + b2
output = C.sigmoid(layer2, name="output")

while not done:    
    state = np.reshape(observation, [1, state_dim]).astype(np.float32)
    # Run the policy network and get an action to take.
    prob = output.eval(arguments={observations: state})[0][0][0]
    # Sample from the bernoulli output distribution to get a discrete action
    action = 1 if np.random.uniform() < prob else 0
    y = 1 if action == 0 else 0 # create a "fake label" or pseudo label

метод 2

    observations = tf.placeholder(tf.float32, shape=[None, state_dim])
    hidden = tf.layers.dense(observations, hidden_size, activation=tf.nn.relu, kernel_initializer=initializer)
    logits = tf.layers.dense(hidden, n_outputs)
    output = tf.nn.sigmoid(logits) # probability of action 0 (left)
    p_left_and_right = tf.concat(axis=1, values=[output, 1 - output])
    action = tf.multinomial(tf.log(p_left_and_right), num_samples=1)
    y = 1. - tf.to_float(action)

while not done:
    state = np.reshape(observation, [1, state_dim]).astype(np.float32)
    # Run the policy network and get an action to take.
    action_val, gradients_val = sess.run([action, gradients], feed_dict={observations: state})
    action_val = action_val[0][0]

Мой вопрос о том, как выбрать действие из политики сети.Оба метода вычисляют вероятность действия 0 (переменная output ).Метод 2, который использует многочлен с вероятностью output , мне подходит.Что меня смутило, так это метод 1. Я думаю, что он использует метод, противоположный методу 2. Если вероятность выбора действия 0 равна prob ( output ), я должен установить action на 0, еслиnp.random.uniform () <<em> prob , не так ли?Я пытался, как я думал, но результат плохой.Я что-то здесь неправильно понимаю?

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...