Почему моя политика сети оптимизируется в сторону нулевых потерь вместо отрицательных значений? - PullRequest
0 голосов
/ 23 февраля 2019

Я пытаюсь построить сеть политики в кератах, которая принимает состояние в качестве входных данных и выводит вероятности возможных действий.

Моя модель определяется следующим образом и использует настраиваемую функцию потерь:

    inp = Input(shape=[8], name="input_x")
    discounted_rewards = Input(shape=[1], name="discounted_rewards")
    model = Dense(10,
                  kernel_initializer=initializers.glorot_normal(seed=1),
                  bias_initializer=initializers.glorot_normal(seed=1),
                  activation="relu",
                  name="dense_1")(inp)
    model = Dense(10,
                  kernel_initializer=initializers.glorot_normal(seed=1),
                  bias_initializer=initializers.glorot_normal(seed=1),
                  activation="relu",
                  name="dense_2")(model)
    unscaled = Dense(4,
                     kernel_initializer=initializers.glorot_normal(seed=1),
                     bias_initializer=initializers.glorot_normal(seed=1),
                     name="unscaled")(model)
    out = Activation(activations.softmax)(unscaled)

    def custom_loss(y_true=None, y_pred=None):
        neg_log_prob = losses.categorical_crossentropy(y_true=y_true, y_pred=y_pred)
        return K.mean(neg_log_prob * discounted_rewards)

    losses.custom_loss = custom_loss
    model_train = Model(inputs=[inp, discounted_rewards], outputs=out)
    model_train.compile(loss=custom_loss, optimizer=tf.keras.optimizers.Adam(0.02))
    model_predict = Model(inputs=[inp], outputs=out)
    model_predict.compile(loss=custom_loss, optimizer=tf.keras.optimizers.Adam(0.02))
    model_train.summary()

Мои дисконтированные вознаграждения могут быть положительными или отрицательными, в то время как я хочу, чтобы модель предпочитала действия, которые приводят к положительным вознаграждениям.Насколько я понимаю, категориальная_кросентропия приводит к отрицательной логарифмической вероятности действий, которые необходимо предпринять в отношении входного состояния.Поэтому, когда я умножаю их на положительное вознаграждение, это приводит к отрицательному значению, а когда есть отрицательное вознаграждение, оно приводит к положительному значению.

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

enter image description here

Почему оно оптимизируется в сторонуноль вместо минимизации в сторону отрицательного значения?

...