это отличный вопрос, и если вы делаете градиентное восхождение, это должно означать, что вы делаете вариант обучения усилению градиентов политики.
Во-первых, позвольте мне извиниться от имени некоторых излюди в этом сообществе, потому что они не могут полностью понять эту тему и решили отказаться от голосования по этому вопросу.Этот вопрос очень специфичен для области ИИ, и вам, возможно, повезет больше, если вы разместите его на бирже стеков ИИ.
Вернуться к вопросу.Выполнение градиентного всплытия чрезвычайно просто, коротко говоря, вы просто применяете градиентный спуск, за исключением того, что ставите знак минуса перед термином градиента!
В коде тензорного потока:
gradients = - tf.compute_gradients(loss)
update = tf.apply_gradients(zip(gradients, vars))
Это основной алгоритм градиентного спуска, где тета - это веса модели, альфа - скорость обучения, а dJ / dtheta - градиент функции потерь по отношению к весам.
![enter image description here](https://i.stack.imgur.com/h2Sxo.png)
Выше мы спускаемся по градиенту, потому что хотим минимизировать потери.Но в методах градиента политики мы хотим максимизировать отдачу , и поскольку мы берем градиент по отношению к вознаграждению (интуитивно), мы хотим максимизировать его.
Пожалуйста, смотритеНа рисунке ниже от TowardsDataScience видно, что веса обновляются в направлении самого низкого значения J. (обратите внимание на положительное, а не на отрицательное)
![enter image description here](https://i.stack.imgur.com/VRuHD.png)
Просто изменив знак обновления, мы можем вместо этого пойти другим путем (т. Е. Максимизировать вознаграждение
![enter image description here](https://i.stack.imgur.com/MvhDR.png)
Ниже приведено формальное уравнение для градиентного отклонения для методов градиента политики. Градиент политики * Vt по существу равен dJ / dtheta.
![enter image description here](https://i.stack.imgur.com/462W8.png)