Я пытаюсь построить сеть политики в кератах, которая принимает состояние в качестве входных данных и выводит вероятности возможных действий.
Моя модель определяется следующим образом и использует настраиваемую функцию потерь:
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()
Мои дисконтированные вознаграждения могут быть положительными или отрицательными, в то время как я хочу, чтобы модель предпочитала действия, которые приводят к положительным вознаграждениям.Насколько я понимаю, категориальная_кросентропия приводит к отрицательной логарифмической вероятности действий, которые необходимо предпринять в отношении входного состояния.Поэтому, когда я умножаю их на положительное вознаграждение, это приводит к отрицательному значению, а когда есть отрицательное вознаграждение, оно приводит к положительному значению.
Но когда я тренирую свою модель, потери сходятся от отрицательного значения кноль, хотя я хотел бы, чтобы потеря имела все более отрицательные значения, потому что это означало бы, что вознаграждение было более положительным.

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