от
Я пытаюсь реализовать алгоритм усиления для непрерывной космической действий. Я создал игрушку, один-государственный пру, где награда-это минус абсолютная разница между выбранным действием и целевое значение. Оптимальная стратегия для действий, совпадающее с целевым значением. Диапазон возможных действий -INF до inf-файл. Например, если целевое значение 5, а агент принимает меры 2.2, награда -2.8 = -АБС(2.2-5) и эпизод заканчивается. Нейронная сеть с одного линейного нейрона прогнозирует в смысле распределения Гаусса, который имеет фиксированное стандартное отклонение, что агент образцы его действий. Государство пру имеет характеристический вектор, который просто [1.0]. Когда стандартное отклонение невелико, скажем 0.05, сеть сходится красиво. Однако, когда стандартное отклонение больше, скажем 0.5, предсказание расходится по сети в обратном направлении целевого значения. Вот код:
import numpy as np
import tensorflow as tf
import tensorflow_probability as tfp

tf.enable_eager_execution()

if __name__ == '__main__':
    mean_input_layer = tf.keras.Input(shape=(1,))
    mean_output_layer = tf.keras.layers.Dense(1, activation='linear')(mean_input_layer)
    mean_model = tf.keras.Model(inputs=mean_input_layer, outputs=mean_output_layer)
    optimizer = tf.keras.optimizers.SGD(learning_rate=0.001)

    target_mean = 5
    standard_deviation = 0.05 # Works
    # standard_deviation = 0.5 # Diverges
    for t in range(10000):
        with tf.GradientTape() as tape:
            mean = mean_model(np.array([[1]]), training=True)
            stdev = np.array([[standard_deviation]], dtype=np.float32)
            dist = tfp.distributions.Normal(loc=mean, scale=stdev)
            samp = dist.sample()
            ascent = 

Переменная "восхождение" является отрицательным с намерением, что градиент подъема, а не спуска, выполняется.

Вот пример выполнения с целевым значением 5 и стандартным отклонением 0.05:

#0 Пример: [-0.3368746] Означает: [-0.400553]

#1 Пример: [-0.35207522] Означает: [-0.3980214]

#2 Пример: [-0.39965397] Означает: [-0.3947122]

#3 Образца: [-0.3883655] Означает: [-0.39056838]

...

#Образец 2460: [5.0231776] Означает: [4.9940543]

#2461 Образец: [5.030905] Означает: [4.99024]

#2462 Образец: [4.853626] Означает: [4.9867477]

#Образец 2463: [4.8647094] Означает: [4.983813]

#Образец 2464: [4.9929175] Означает: [4.982292]

Он сходится.

Вот пример запуска с целевого значения в 5 и стандартным отклонением 0.5:

#1 Пример: [0.6297094] Означает: [1.4340767]

#2 Пример: [0.75481075] Означает: [1.4310371]

#3 Образца: [0.9269088] Означает: [1.4287564]

#4 Образец: [1.2933123] Означает: [1.4272974]

...

#Образец 3210: [-3.4329443] Означает: [-3.322072]

Образец #3211: [-3.755511] Означает: [-3.3225727]

Образец #3212: [-3.6817236] Означает: [-3.3237739]

#3213 Образец: [-3.4897459] Означает: [-3.324738]

...

#Образец 9996: [-13.280873] Означает: [-13.032175]

#Образец 9997: [-13.879341] Означает: [-13.032874]

#9998 Образец: [-12.796365] Означает: [-13.036192]

#9999 Образец: [-13.04003] Означает: [-13.036874]

Он расходится в противоположном направлении целевого значения.
Что здесь происходит? Есть ли ошибка в моей реализации? Спасибо за помощь.

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.
...