Методы градиента политики PG довольно популярны в обучении с подкреплением (RL). Базовый принцип состоит в использовании градиентного спуска и подъема в направлениях, где ожидается наибольшая награда. Но при первом приближении оптимизация получается неаккуратной. При чрезмерной самоуверенности мы можем сделать действия, которые разрушат прогресс, достигнутый предыдущей тренировкой. Работы, посвященные TRPO, являются наиболее цитируемыми по этой проблеме. При этом его объясняют без должного введения в три базовые концепции: MM алгоритм, регион доверия и выборка по значимости (перенормировка).
![](https://habrastorage.org/r/w1560/webt/ob/oo/w0/oboow0-f_knqkvudvnrqq1lbpay.png)
В RL мы оптимизируем функцию политики, чтобы получать максимальное дисконтированное вознаграждение. Тем не менее есть несколько сложностей, которые вредят.
![](https://habrastorage.org/r/w1560/webt/tu/bw/vn/tubwvn3ul-lr7opgojax38psmso.png)
Первая сложность в том, то PG использует самый крутой спуск по направлению к большему вознаграждению и соответственно делает шаг в этом направлении.
![](https://habrastorage.org/r/w1560/webt/1t/yu/bf/1tyubfvndzjam9vhuv7tnxoaxga.png)
Этот метод использует только первую производную и думает, что поверхность плоская. Если же поверхность изогнутая, то мы можем зайти не туда.
![](https://habrastorage.org/r/w1560/webt/gi/sy/ys/gisyysvjhhuvvipscct5qlkngmg.png)
Слишком большие шаги ведут к катастрофе, а слишком маленькие тормозят обучения. Можно изобразить поверхность функции вознаграждения, как скалу. Если путник сделает слишком большой шаг возле обрыва, то он упадет вниз к меньшим показателям. Если мы продолжим с места падения, то займет много времени на восстановление достигнутых ранее показателей.
![](https://habrastorage.org/r/w1560/webt/za/sx/xl/zasxxlpzdk3fbcyvxz268rzw-ae.png)
Во-вторых, очень трудно узнать правильную скорость обучения (learning rate). Допустим скорость обучения хорошо настроена в желтой точке. Эта область относительно плоская и скорость обучения должна быть выше, чем средняя. Но после неверного шага мы падаем вниз к красной точке. Градиент в этой точке высок и эта скорость обучения приведет к взрыву градиента. Так как скорость обучение не чувствительная к рельефу, то PG будет в таких случаях иметь плохую сходимость. Небольшие изменения в параметрах
могут привести к заметным изменениям в политике
. Небольшие изменения в политике ведут в большим изменениям в вознаграждении. Надо как-то сделать так, чтобы вознаграждение было под контролем…
В третьих, стоит вопрос,- а надо ли еще ограничивать изменения политики, чтобы не совершать шальных шагов? На самом деле это то, то делает TRPO. Под контроль берутся как изменения в политике, так и изменения в вознаграждении. Этот алгоритм ограничивает изменения параметров в соответствии с конъюнктурой поверхности, чтобы не сильно изменять политику и вознаграждение на каждом шаге. Но рецепт, как это сделать совсем неочевиден. Мы вводим дополнительные параметры.
В четвертых, мы должны использовать всю траекторию(т.е. массив состояний среды и реакций агента) для одного изменения политики. То есть мы не можем изменять политику на каждом шаге траектории.
![](https://habrastorage.org/r/w1560/webt/9i/zm/rw/9izmrwpcbmpwluz7hnxy7vsmzuu.png)
Почему? Визуализируем модель политики, как сеть. Увеличение вероятности
в одной точке. Тянет за собой близлежащие точки тоже. Состояния внутри траекторий очень похожи в частности, когда они представлены сырыми пикселями. Если мы обновляем политику на каждом шагу, то мы тянем близлежащие точки много раз. Изменения усиливают друг друга и делаю процесс тренировки нестабильным.
![](https://habrastorage.org/r/w1560/webt/ts/pd/_l/tspd_lzf-0fwqhj5g1_k6-wyz6e.png)
В одной траектории может быть сотни или тысячи шагов. Одно обновление для каждой траектории не репрезентативно, поэтому используется много траекторий. В простом PG требуется порядка 10 миллионов или больше шагов для обучения даже в небольших экспериментах. То есть выборка обучающих примеров работает мало эффективно. Для того, чтобы обучить реального робота потребуются слишком большие затраты для этого, так как скорее робот изотрётся в порошок, чем чему-нибудь научится.
Кратко сформулируем недостатки PG
Можем ли мы гарантировать, что любые изменения политики неуклонно увеличивают ожидаемое вознаграждение? Кажется, что это нереально, но теоретически возможно. В MM алгоритме это достигается интерактивно с помощью максимизации суррогатных функций
. Эти функции во всех точках меньше, чем исходная функция. Звучит тавтологически.
![](https://habrastorage.org/r/w1560/webt/ek/oz/bz/ekozbzjit_m2qqt17viwiy2rdc8.png)
Попробуем разобраться в деталях. Мы сначала стартуем с некой приближенной политики. Мы находим суррогатную функию
, которая аппроксимирует вознаграждение
локально в текущем предположении. На функции
мы находим точку максимума
и перемещаем параметры политики в эту точку и тд.
Для будущих выкладок, пусть
является квадратичной функцией.
, что в векторной форме выглядит так:
![$g \cdot (\theta - \theta_{old}) - \frac{\beta}{2}(\theta - \theta_{old})^TF(\theta - \theta_{old})$](https://habrastorage.org/getpro/habr/formulas/677/6e7/ad6/6776e7ad6b6c4373b60458d9f95c50ff.svg)
функция выпуклая и поэтому хорошо известно, как её оптимизировать.
Суррогатную квадратичную функцию легко построить через разложение в ряд Тэйлора до второго члена и немного модифицировав второй член, умножив его на определенный множитель.
Почему MM алгоритм сходится к оптимальной политике?
![](https://habrastorage.org/r/w1560/webt/wz/hw/3w/wzhw3wiek83ntaxbrqqfxwa-jmo.png)
Если M является нижней границей, то она никогда не пересекает красную линию. И если рассуждать от обратного, то предположим, что ожидаемое вознаграждение уменьшается, тогда красная линия пересекает синюю и это противоречит тому, что M является нижней границей.
Так как мы имеем ограниченные политики, то по мере продвижения мы интерактивно будем приближаться к глобальному максимуму, то есть к оптимальной политике. Так мы находим магию, которая нам нужна.
angms.science/doc/NMF/Surrogate.pdf
www.leg.ufpr.br/~paulojus/EM/Tutorial%20on%20MM.pdf
(
Примечание переводчика: для разложения в ряд Тэйлора до второго члена потребуется знание этой матрицы en.wikipedia.org/wiki/Hessian_matrix
Чтобы приближенно найти максимум такой суррогатной функции используется метод сопряженного градиента (conjucture gradient) www.cs.cmu.edu/~quake-papers/painless-conjugate-gradient.pdf, для этого надо решить линейное уравнение Hx=g, где H — матрица гессиана, а g — вектор градиента.
)
В математике есть два метода оптимизации: через линейный поиск и через доверительный регион. Градиентный спуск является примером линейного поиском. Мы сначала определяем направление спуска, а потом делаем шаг в этом направлении.
![](https://habrastorage.org/r/w1560/webt/sn/7a/cx/sn7acxq2p2ksinjrc2-zksd8ge4.png)
В методе доверительного региона мы сначала определяем максимальный размер шага и далее ищем оптимальную точку внутри региона. Давайте начнём с начальной точки, определим размер шага δ, как радиус доверительного региона (желтый круг).
![](https://habrastorage.org/r/w1560/webt/ux/gv/1s/uxgv1sp9ysnnukia8nrdtervvgs.png)
В этой формуле m является приближением нашей исходной функции f. Нашей целью является поиск оптимальной точки для m внутри радиуса δ. Мы продолжаем процесс интерактивно, пока не приблизимся к пику с достаточной точностью.
![](https://habrastorage.org/r/w1560/webt/r7/k7/vn/r7k7vnjs4vbcf-mlw8s3eoq2wzq.png)
Чтобы лучше контролировать процесс обучения, мы можем динамически увеличивать или уменьшать δ в соответствии с изогнутостью поверхности. В традиционном методе доверительного региона δ уменьшается, если аппроксиматор плохо аппроксимирует исходную функцию и наоборот при хорошей аппроксимации — δ увеличивается. Но вычислить f в случае RL довольно трудно. Вместо этого используется альтернативный способ, — мы уменьшаем шаг δ, если вдруг заметили, что расхождение текущей политики и политики предыдущего шага стали слишком большими. И наоборот. То есть, чтобы более осторожно шагать, мы уменьшаем регион доверия, если политика стала изменяться слишком быстро.
Выборка по значимости – это техника оценки параметров распределения, если мы имеем выборку из другого, функционально зависимого распределения. Выборка по значимости вычисляет ожидаемое значение
, где
распределено по
.
![](https://habrastorage.org/r/w1560/webt/s3/r3/ky/s3r3kyovrq6haf0aex9v-lrluey.png)
Тут мы предлагаем не создавать выборку
и не получать серию конкретных значений
. Вместо этого мы делаем рекалибровку между двумя распределениями. Таким образом мы можем использовать примеры из старой политики, чтобы получить градиент в новой точке.
![](https://habrastorage.org/r/w1560/webt/sm/jq/jw/smjqjwtgmobokpxwtvtvwdif_tq.png)
![](https://habrastorage.org/r/w1560/webt/jd/hs/uk/jdhsukeg9vjrdynrqqpbuiz3g90.png)
Такой трюк возможен, если старая и новая политики мало отличаются, так как в противном случае использование примеров из другой политики делает процесс сходимости менее стабильным.
Более подробно процесс разобран в
rail.eecs.berkeley.edu/deeprlcourse-fa17/f17docs/lecture_13_advanced_pg.pdf
Тем не менее мы не можем слишком долго использовать примеры из одной и той же политики. Нам все равно необходимо перевычислять траектории довольно часто с использованием текущей политики. Но мы можем это делать не каждый раз, а, например, один раз в 4 итерации. То есть мы получаем обучающие примеры и аккуратно двигаемся несколько итераций в сторону увеличения вознаграждения. Это движение не обязательно будет прямым.
Разберем детально, как использовать выборку по значимости применительно к PG.
Если изначальная формулировка выглядит так:
![](https://habrastorage.org/r/w1560/webt/sa/4f/se/sa4fse0g63at38bcjyi90ppacni.png)
Попробуем записать по-другому при условии, что часто γ=1.
Мы можем обратить производные и получить
![](https://habrastorage.org/r/w1560/webt/ka/3s/rd/ka3srdvvf5r8gqa85mw0ckkwysg.png)
Это может быть выражено как
![](https://habrastorage.org/r/w1560/webt/v0/k_/oe/v0k_oef3kebr9wllij5szhfginq.png)
![](https://habrastorage.org/r/w1560/webt/j4/xv/n8/j4xvn8lkqr307zjxxgzfwywinnk.png)
Так как производные обоих целевых функций одинаковы, то и оптимальное решение тоже одинаково.
Присутствие двух политик в процессе оптимизации позволяет формально ограничивать изменения в политике. Это ключевой принцип для многих PG методов. Так же это позволяет оценить новую политику прежде, чем принять изменение.
И так мы описали три базовые концепции, и готовы погрузиться в TRPO.
![](https://habrastorage.org/webt/ob/oo/w0/oboow0-f_knqkvudvnrqq1lbpay.png)
Трудности метода градиента политики (PG)
В RL мы оптимизируем функцию политики, чтобы получать максимальное дисконтированное вознаграждение. Тем не менее есть несколько сложностей, которые вредят.
![](https://habrastorage.org/webt/tu/bw/vn/tubwvn3ul-lr7opgojax38psmso.png)
Первая сложность в том, то PG использует самый крутой спуск по направлению к большему вознаграждению и соответственно делает шаг в этом направлении.
![](https://habrastorage.org/webt/1t/yu/bf/1tyubfvndzjam9vhuv7tnxoaxga.png)
Этот метод использует только первую производную и думает, что поверхность плоская. Если же поверхность изогнутая, то мы можем зайти не туда.
![](https://habrastorage.org/webt/gi/sy/ys/gisyysvjhhuvvipscct5qlkngmg.png)
Слишком большие шаги ведут к катастрофе, а слишком маленькие тормозят обучения. Можно изобразить поверхность функции вознаграждения, как скалу. Если путник сделает слишком большой шаг возле обрыва, то он упадет вниз к меньшим показателям. Если мы продолжим с места падения, то займет много времени на восстановление достигнутых ранее показателей.
![](https://habrastorage.org/webt/za/sx/xl/zasxxlpzdk3fbcyvxz268rzw-ae.png)
Во-вторых, очень трудно узнать правильную скорость обучения (learning rate). Допустим скорость обучения хорошо настроена в желтой точке. Эта область относительно плоская и скорость обучения должна быть выше, чем средняя. Но после неверного шага мы падаем вниз к красной точке. Градиент в этой точке высок и эта скорость обучения приведет к взрыву градиента. Так как скорость обучение не чувствительная к рельефу, то PG будет в таких случаях иметь плохую сходимость. Небольшие изменения в параметрах
В третьих, стоит вопрос,- а надо ли еще ограничивать изменения политики, чтобы не совершать шальных шагов? На самом деле это то, то делает TRPO. Под контроль берутся как изменения в политике, так и изменения в вознаграждении. Этот алгоритм ограничивает изменения параметров в соответствии с конъюнктурой поверхности, чтобы не сильно изменять политику и вознаграждение на каждом шаге. Но рецепт, как это сделать совсем неочевиден. Мы вводим дополнительные параметры.
В четвертых, мы должны использовать всю траекторию(т.е. массив состояний среды и реакций агента) для одного изменения политики. То есть мы не можем изменять политику на каждом шаге траектории.
![](https://habrastorage.org/webt/9i/zm/rw/9izmrwpcbmpwluz7hnxy7vsmzuu.png)
Почему? Визуализируем модель политики, как сеть. Увеличение вероятности
![](https://habrastorage.org/webt/ts/pd/_l/tspd_lzf-0fwqhj5g1_k6-wyz6e.png)
В одной траектории может быть сотни или тысячи шагов. Одно обновление для каждой траектории не репрезентативно, поэтому используется много траекторий. В простом PG требуется порядка 10 миллионов или больше шагов для обучения даже в небольших экспериментах. То есть выборка обучающих примеров работает мало эффективно. Для того, чтобы обучить реального робота потребуются слишком большие затраты для этого, так как скорее робот изотрётся в порошок, чем чему-нибудь научится.
Кратко сформулируем недостатки PG
- Слишком большие изменения в политике разрушают тренировку.
- Неверная скорость обучения ведет к исчезающим или взрывным градиентам
- Нет прямой связи между величиной изменения параметров модели и величиной изменения политики.
- Низкая эффективность использования выборки обучающих примеров.
Алгоритм миноризации максимизации
Можем ли мы гарантировать, что любые изменения политики неуклонно увеличивают ожидаемое вознаграждение? Кажется, что это нереально, но теоретически возможно. В MM алгоритме это достигается интерактивно с помощью максимизации суррогатных функций
![](https://habrastorage.org/webt/ek/oz/bz/ekozbzjit_m2qqt17viwiy2rdc8.png)
Попробуем разобраться в деталях. Мы сначала стартуем с некой приближенной политики. Мы находим суррогатную функию
Для будущих выкладок, пусть
функция выпуклая и поэтому хорошо известно, как её оптимизировать.
Суррогатную квадратичную функцию легко построить через разложение в ряд Тэйлора до второго члена и немного модифицировав второй член, умножив его на определенный множитель.
Почему MM алгоритм сходится к оптимальной политике?
![](https://habrastorage.org/webt/wz/hw/3w/wzhw3wiek83ntaxbrqqfxwa-jmo.png)
Если M является нижней границей, то она никогда не пересекает красную линию. И если рассуждать от обратного, то предположим, что ожидаемое вознаграждение уменьшается, тогда красная линия пересекает синюю и это противоречит тому, что M является нижней границей.
Так как мы имеем ограниченные политики, то по мере продвижения мы интерактивно будем приближаться к глобальному максимуму, то есть к оптимальной политике. Так мы находим магию, которая нам нужна.
angms.science/doc/NMF/Surrogate.pdf
www.leg.ufpr.br/~paulojus/EM/Tutorial%20on%20MM.pdf
(
Примечание переводчика: для разложения в ряд Тэйлора до второго члена потребуется знание этой матрицы en.wikipedia.org/wiki/Hessian_matrix
Чтобы приближенно найти максимум такой суррогатной функции используется метод сопряженного градиента (conjucture gradient) www.cs.cmu.edu/~quake-papers/painless-conjugate-gradient.pdf, для этого надо решить линейное уравнение Hx=g, где H — матрица гессиана, а g — вектор градиента.
)
Доверительный регион
В математике есть два метода оптимизации: через линейный поиск и через доверительный регион. Градиентный спуск является примером линейного поиском. Мы сначала определяем направление спуска, а потом делаем шаг в этом направлении.
![](https://habrastorage.org/webt/sn/7a/cx/sn7acxq2p2ksinjrc2-zksd8ge4.png)
В методе доверительного региона мы сначала определяем максимальный размер шага и далее ищем оптимальную точку внутри региона. Давайте начнём с начальной точки, определим размер шага δ, как радиус доверительного региона (желтый круг).
![](https://habrastorage.org/webt/ux/gv/1s/uxgv1sp9ysnnukia8nrdtervvgs.png)
В этой формуле m является приближением нашей исходной функции f. Нашей целью является поиск оптимальной точки для m внутри радиуса δ. Мы продолжаем процесс интерактивно, пока не приблизимся к пику с достаточной точностью.
![](https://habrastorage.org/webt/r7/k7/vn/r7k7vnjs4vbcf-mlw8s3eoq2wzq.png)
Чтобы лучше контролировать процесс обучения, мы можем динамически увеличивать или уменьшать δ в соответствии с изогнутостью поверхности. В традиционном методе доверительного региона δ уменьшается, если аппроксиматор плохо аппроксимирует исходную функцию и наоборот при хорошей аппроксимации — δ увеличивается. Но вычислить f в случае RL довольно трудно. Вместо этого используется альтернативный способ, — мы уменьшаем шаг δ, если вдруг заметили, что расхождение текущей политики и политики предыдущего шага стали слишком большими. И наоборот. То есть, чтобы более осторожно шагать, мы уменьшаем регион доверия, если политика стала изменяться слишком быстро.
Выборка по значимости (перенормировка)
Выборка по значимости – это техника оценки параметров распределения, если мы имеем выборку из другого, функционально зависимого распределения. Выборка по значимости вычисляет ожидаемое значение
![](https://habrastorage.org/webt/s3/r3/ky/s3r3kyovrq6haf0aex9v-lrluey.png)
Тут мы предлагаем не создавать выборку
![](https://habrastorage.org/webt/sm/jq/jw/smjqjwtgmobokpxwtvtvwdif_tq.png)
![](https://habrastorage.org/webt/jd/hs/uk/jdhsukeg9vjrdynrqqpbuiz3g90.png)
Такой трюк возможен, если старая и новая политики мало отличаются, так как в противном случае использование примеров из другой политики делает процесс сходимости менее стабильным.
Более подробно процесс разобран в
rail.eecs.berkeley.edu/deeprlcourse-fa17/f17docs/lecture_13_advanced_pg.pdf
Тем не менее мы не можем слишком долго использовать примеры из одной и той же политики. Нам все равно необходимо перевычислять траектории довольно часто с использованием текущей политики. Но мы можем это делать не каждый раз, а, например, один раз в 4 итерации. То есть мы получаем обучающие примеры и аккуратно двигаемся несколько итераций в сторону увеличения вознаграждения. Это движение не обязательно будет прямым.
Целевая функция с использованием выборка по значимости(перенормировки)
Разберем детально, как использовать выборку по значимости применительно к PG.
Если изначальная формулировка выглядит так:
![](https://habrastorage.org/webt/sa/4f/se/sa4fse0g63at38bcjyi90ppacni.png)
Попробуем записать по-другому при условии, что часто γ=1.
Мы можем обратить производные и получить
![](https://habrastorage.org/webt/ka/3s/rd/ka3srdvvf5r8gqa85mw0ckkwysg.png)
Это может быть выражено как
![](https://habrastorage.org/webt/v0/k_/oe/v0k_oef3kebr9wllij5szhfginq.png)
![](https://habrastorage.org/webt/j4/xv/n8/j4xvn8lkqr307zjxxgzfwywinnk.png)
Так как производные обоих целевых функций одинаковы, то и оптимальное решение тоже одинаково.
Присутствие двух политик в процессе оптимизации позволяет формально ограничивать изменения в политике. Это ключевой принцип для многих PG методов. Так же это позволяет оценить новую политику прежде, чем принять изменение.
И так мы описали три базовые концепции, и готовы погрузиться в TRPO.