это отличный вопрос, и если вы делаете градиентное восхождение, это должно означать, что вы делаете вариант обучения усилению градиентов политики.
Во-первых, позвольте мне извиниться от имени некоторых излюди в этом сообществе, потому что они не могут полностью понять эту тему и решили отказаться от голосования по этому вопросу.Этот вопрос очень специфичен для области ИИ, и вам, возможно, повезет больше, если вы разместите его на бирже стеков ИИ.
Вернуться к вопросу.Выполнение градиентного всплытия чрезвычайно просто, коротко говоря, вы просто применяете градиентный спуск, за исключением того, что ставите знак минуса перед термином градиента!
В коде тензорного потока:
gradients = - tf.compute_gradients(loss)
update = tf.apply_gradients(zip(gradients, vars))
Это основной алгоритм градиентного спуска, где тета - это веса модели, альфа - скорость обучения, а dJ / dtheta - градиент функции потерь по отношению к весам.
Выше мы спускаемся по градиенту, потому что хотим минимизировать потери.Но в методах градиента политики мы хотим максимизировать отдачу , и поскольку мы берем градиент по отношению к вознаграждению (интуитивно), мы хотим максимизировать его.
Пожалуйста, смотритеНа рисунке ниже от TowardsDataScience видно, что веса обновляются в направлении самого низкого значения J. (обратите внимание на положительное, а не на отрицательное)
Просто изменив знак обновления, мы можем вместо этого пойти другим путем (т. Е. Максимизировать вознаграждение
Ниже приведено формальное уравнение для градиентного отклонения для методов градиента политики. Градиент политики * Vt по существу равен dJ / dtheta.