Обучение с подкреплением — различия между версиями
м |
|||
Строка 230: | Строка 230: | ||
For all final states <math>s_f</math>, <math>Q(s_f, a)</math> is never updated, but is set to the reward value <math>r</math> observed for state <math>s_f</math>. In most cases, <math>Q(s_f,a)</math> can be taken to equal zero. | For all final states <math>s_f</math>, <math>Q(s_f, a)</math> is never updated, but is set to the reward value <math>r</math> observed for state <math>s_f</math>. In most cases, <math>Q(s_f,a)</math> can be taken to equal zero. | ||
− | + | Обозначения | |
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
− | |||
* LF — это фактор обучения. Чем он выше, тем сильнее агент доверяет новой информации. | * LF — это фактор обучения. Чем он выше, тем сильнее агент доверяет новой информации. | ||
* DF — это фактор дисконтирования. Чем он меньше, тем меньше агент задумывается о выгоде от будущих своих действий. | * DF — это фактор дисконтирования. Чем он меньше, тем меньше агент задумывается о выгоде от будущих своих действий. | ||
− | === | + | '''fun''' init(): |
− | # max = minValue | + | '''for''' \forall s and a: |
− | + | Q[s, a] = rand() | |
− | + | ||
− | + | '''fun''' observe(): | |
+ | s' = s // Запомнить предыдущие состояния | ||
+ | a' = a // Запомнить предыдущие действия | ||
+ | s = get_from_sensor() // Получить текущие состояния с сенсора | ||
+ | r = get_from_sensor() // Получить вознаграждение за предыдущее действие | ||
+ | |||
+ | '''fun''' q-update(): | ||
+ | Q[s', a'] = Q[s', a'] + LF * (r + DF * MAX(Q,s) — Q[s',a']) | ||
+ | |||
+ | '''fun''' decision(): | ||
+ | a = ARGMAX(Q, s) | ||
+ | TO_ACTIVATOR = a | ||
+ | # '''Repeat''': GO TO 2 ??? | ||
+ | |||
+ | '''fun'' max(Q, s): | ||
+ | max = minValue | ||
+ | for each a of ACTIONS(s) do | ||
+ | if Q[s, a] > max: | ||
+ | max = Q[s, a] | ||
+ | return max | ||
− | + | '''fun'' argmax(Q, s): | |
− | + | amax = First of ACTION(s) | |
− | + | for each a of ACTION(s) do | |
− | + | if Q[s, a] > Q[s, amax]: | |
− | + | amax = a | |
+ | return amax | ||
Версия 22:30, 13 января 2019
Содержание
Обучение с подкреплением
Обучение с подкреплением, идея которого была почерпнута в смежной области психологии, является подразделом машинного обучения, изучающим, как агент должен действовать в окружении, чтобы максимизировать некоторый долговременный выигрыш. Алгоритмы с частичным обучением пытаются найти стратегию, приписывающую состояниям окружающей среды действия, которые должен предпринять агент в этих состояниях. В экономике и теории игр обучение с подкреплением рассматривается в качестве интерпретации того, как может установиться равновесие.
Окружение обычно формулируется как марковский процесс принятия решений (МППР) с конечным множеством состояний, и в этом смысле алгоритмы обучения с подкреплением тесно связаны с динамическим программированием. Вероятности выигрышей и перехода состояний в МППР обычно являются величинами случайными, но стационарными в рамках задачи.
При обучении с подкреплением, в отличии от обучения с учителем, не предоставляются верные пары „входные данные-ответ“, а принятие субоптимальнх решений (дающих локальный экстремум) не ограничивается явно. Обучение с подкреплением пытается найти компромисс между исследованием неизученных областей и применением имеющихся знаний. Баланс изучения-применения при обучении с подкреплением исследуется в задаче многорукого бандита.
Формально простейшая модель обучения с подкреплением состоит из
- множества состояний окружения S
- множества действий A
- множества вещественнозначных скалярных "выигрышей"
В произвольный момент времени t агент характеризуется состоянием
для МППР без терминальных состояний (где
- дисконтирующий множитель для „предстоящего выигрыша“).Таким образом, обучение с подкреплением особенно хорошо подходит для решения задач, связанных с выбором между долгосрочной и краткосрочной выгодой.
Постановка задачи обучения с подкреплением
S - множество состояний среды
Игра агента со средой:
- инициализация стратегии и состояния среды
- для всех
- агент выбирает действие
- среда генерирует премию и новое состояние
- агент корректирует стратегию
Это марковский процесс принятия решений (МППР), если
МППР называется финитным, если
,Алгоритмы
Теперь, когда была определена функция выигрыша, нужно определить алгоритм, который будет использоваться для нахождения стратегии, обеспечивающей наилучший результат.
Наивный подход к решению этой задачи подразумевает следующие шаги:
- опробовать все возможные стратегии;
- выбрать стратегию с наибольшим ожидаемым выигрышем.
Первая проблема такого подхода заключается в том, что количество доступных стратегий может быть очень велико или же бесконечно. Вторая проблема возникает, если выигрыши стохастические — чтобы точно оценить выигрыш от каждой стратегии потребуется многократно применить каждую из них. Этих проблем можно избежать, если допустить некоторую структуризацию и, возможно, позволить результатам, полученным от пробы одной стратегии, влиять на оценку для другой. Двумя основными подходами для реализации этих идей являются оценка функций полезности и прямая оптимизация стратегий.
Подход с использованием функции полезности использует множество оценок ожидаемого выигрыша только для одной стратегии
либо ожидаемый выигрыш, при принятии решения a в состоянии s и дальнейшем соблюдении
Если для выбора оптимальной стратегии используется функция полезности Q, то оптимальные действия всегда можно выбрать как действия, максимизирующие полезность.
Если же мы пользуемся функцией V, необходимо либо иметь модель окружения в виде вероятностей
либо применить т.н. метод исполнитель-критик, в котором модель делится на две части: критик, оценивающий полезность состояния V, и исполнитель, выбирающий подходящее действие в каждом состоянии.
Имея фиксированную стратегию
, оценить при можно просто усреднив непосредственные выигрыши. Наиболее очевидный способ оценки при — усреднить суммарный выигрыш после каждого состояния. Однако для этого требуется, чтобы МППР достиг терминального состояния (завершился).Поэтому построение искомой оценки при
Подставляя имеющиеся оценки, V, и применяя метод градиентного спуска с квадратичной функцией ошибок, мы приходим к алгоритму обучения с временными воздействиями. В простейшем случае и состояния, и действия дискретны и можно придерживаться табличных оценок для каждого состояния. Другие похожие методы: Адаптивный эвристический критик (Adaptive Heuristic Critic, AHC), SARSA и Q-обучение (Q-learning). Все вышеупомянутые используют различные методы приближения, но в некоторых случаях сходимость не гарантируется. Для уточнения оценок используется метод градиентного спуска или метод наименьших квадратов в случае линейных приближений.
Задача о многоруком бандите
Формулировка
— неизвестное распределение награды за
— стратегия агента в момент , распределение на
Игра агента со средой:
- инициализация стратегии
- для всех
- агент выбирает действие
- среда генерирует награду
- агент корректирует стратегию
— ценность действия
Задача является модельной для понимания конфликта между exploitation (применение, эксплуатация) и exploration (изучение, исследование).
Задача выглядит следующим образом.
У нас есть автомат - " -рукий бандит", на каждом шаге мы выбираем за какую из рук автомата дернуть,
т.е. множество действий будет .
Выбор действия , на шаге , влечет награду при этом есть случайная величина, распределение которой мы не знаем.
Состояние среды у нас от шага к шагу не меняется, а значит множество тривиально, ни на что не влияет, так что мы его игнорируем.
Для простоты пока будем полагать, что каждому действию соответствует некоторое распределение, которое не меняется со временем. Если бы мы знали, что за распределение, соответствуют каждому действию, то очевидная стратегия заключалась бы в том, чтобы подсчитать математическое ожидание для каждого из распределений, выбрать действие с максимальным математическим ожиданием и теперь совершать это действие на каждом шаге.
Проблема ровно одна: про распределения мы ничего не знаем.
Однако, оценивать математическое ожидание некоторой случайной величины c неизвестным распределением мы умеем. Делаем экспериментов, получаем величин, берем среднее арифметическое:
это и будет оценка математического ожидания. Очевидно, что чем больше
тем оценка точнее.Жадные и эпсилон-жадные стратегии
Объединяя всё вышеизложенное, получаем простую "жадную" стратегию.
Жадная (greedy) стратегия
Заведем массивы
, - сколько раз было выбрано действие
, - текущая оценка математического ожидания награды для действия
На каждом шаге
Выбираем действие с максимальной оценкой математического ожидания:
Выполняем действие at и получаем награду
Обновляем оценку математического ожидания для действия :
Почему это не так хорошо как кажется?
Пример.
Пусть у нас есть "двурукий" бандит. Первая ручка всегда выдаёт награду равную 1, вторая всегда выдаёт 2. Действуя согласно жадной стратегии мы дёрнем в начале первую ручку (поскольку в начале у нас оценка математических ожиданий одинаковые и равны нулю) повысим её оценку до . И в дальнейшем всегда будем выбирать первую ручку, а значит на каждом шаге будем получать на 1 меньше, чем могли бы.
Т.е. желательно всё таки не фиксироваться на одной ручке. Понятно, что для нашего примера достаточно попробовать в начале каждую из ручек. Но если награда все-таки случайная величина, то единичной попытки будет явно не достаточно. В связи с этим предлагается следующая модификация жадной стратегии:
-жадная ( -greedy) стратегия
Зададимся некоторым параметром
Заведем массивы
, - сколько раз было выбрано действие
, - текущая оценка математического ожидания награды для действия
На каждом шаге
Получаем значение случайной величины равномерно расределенной на отрезке
Если , то выберем действие из набора случайно и равновероятно.
Иначе как и в жадной стратегии выбираем действие с максимальной оценкой математического ожидания:
Выполняем действие и получаем награду
Обновляем оценку математического ожидания для действия :
Ясно, что если выбрать
мы вернемся к просто жадной стратегии. Однако, если , в отличии от просто "жадной", у нас на каждом шаге с вероятностью присходит "исследование".Пример. Награда для стратегии с различными
:Метод UCB (upper confidence bound)
Предыдущие алогритмы при принятии решений используют данные о среднем выигрыше. Проблема заключается в том, что если рука даёт выигрыш с какой-то вероятностью, то данные от наблюдений получаются шумные и мы можем считать самой выгодной рукой ту, которая на самом деле таковой не является.
Алгоритм верхнего доверительного интервала (Upper confidence bound или просто UCB) - это семейство алгоритмов, которые пытаются решить эту проблему, используя при выборе данные не только о среднем выигрыше, но и о том, насколько можно доверять этим значениям выигрыша. В книге описывается один такой алгоритм - UCB.
Как и в softmax в UCB при выборе рук используется весовой коэффициент, который представляет собой верхнюю границу доверительного интервала (upper confidence bound, что и дало название алгоритму) значения выигрыша:
- это среднее значение выигрыша руки на момент выбора. Он ничем не отличается от того, что используется в других алгоритмах.
- это бонусное значение, которые показывает, насколько недоисследована эта рука по сравнению с остальными. Он вычисляется следующим образом:
- это суммарное количество использований всех рук, а - это количество использований данной руки.
Доказательство здесь
В отличие от предыдущих алгоритмов UCB не использует в своей работе ни случайные числа для выбора руки, ни параметры, которыми можно влиять на его работу. В начале работы алгоритма каждая из рук выбирается по одному разу (это нужно для того, чтобы можно было вычислить размер бонуса для всех рук). После этого в каждый момент времени выбирается рука с максимальным значением весового коэффициента.
Несмотря на это отсутствие случайности, результаты работы этого алгоритма выглядят довольно шумно по сравнению с остальными. Это происходит из-за того, что данный алгоритм сравнительно часто выбирает недоисследованные руки.
Стратегия Softmax
Алгоритм мягкого максимума (softmax) - это чуть более сложный алгоритм. Его основная идея - уменьшение потерь при исследовании за счёт более редкого выбора рук, которые дали маленький выигрыш в прошлом. Чтобы этого добиться для каждой руки вычисляется весовой коэффициент, на базе которого происходит выбор руки:
- это среднее значение выигрыша руки на момент выбора. Оно позволяет придать больший вес выгодным рукам.
temperature - это параметр, с помощью которого можно настраивать поведение алгоритма (он называется температура). Он может принимать значения от нуля до бесконечности. Если он близок к бесконечности, то softmax будет меньше зависеть от значения выигрыша и выбирать руки более равномерно (т.е. перейдёт в режим исследования). Если он близок к нулю, то алгоритм будет больше ориентироваться на известный средний выигрыш рук (т.е. перейдёт в режим эксплуатации).
Экспонента используется для того, чтобы данный вес был ненулевым даже у рук, выигрыш от которых пока нулевой.
Вероятность выбора руки равна отношению её весового коэффициента и сумме весовых коэффициентов всех рук. При выборе генерируется случайное число от 0 до 1, на основании которого произойдёт выбор конкретной руки.
Мягкий вариант компромисса "exploitation-exploration":
чем больше , тем больше вероятность выбора :
где — параметр температуры,
при стратегия стремится к жадной,
при — к равномерной, т.е. чисто исследовательской
Эвристика: параметр имеет смысл уменьшать со временем.
Q-learning
Q-обучение (Q-learning) — метод, применяемый в искусственном интеллекте при агентном подходе. Относится к экспериментам вида oбучение с подкреплением. На основе получаемого от среды вознаграждения агент формирует функцию полезности Q, что впоследствии дает ему возможность уже не случайно выбирать стратегию поведения, а учитывать опыт предыдущего взаимодействия со средой. Одно из преимуществ Q-обучения — то, что оно в состоянии сравнить ожидаемую полезность доступных действий, не формируя модели окружающей среды. Применяется для ситуаций, которые можно представить в виде марковского процесса принятия решений.
Aлгоритм Q-learning
The weight for a step from a state
steps into the future is calculated as . (the discount factor) is a number between 0 and 1 ( ) and has the effect of valuing rewards received earlier higher than those received later (reflecting the value of a "good start"). may also be interpreted as the probability to succeed (or survive) at every step .The algorithm, therefore, has a function that calculates the quality of a state-action combination:
- .
Before learning begins, Шаблон:Tmath is initialized to a possibly arbitrary fixed value (chosen by the programmer). Then, at each time the agent selects an action , observes a reward , enters a new state (that may depend on both the previous state and the selected action), and is updated. The core of the algorithm is a simple value iteration update, using the weighted average of the old value and the new information:
where
is the reward received when moving from the state to the state , and is the learning rate ( ).An episode of the algorithm ends when state Шаблон:Citation needed If the discount factor is lower than 1, the action values are finite even if the problem can contain infinite loops.
is a final or terminal state. However, Q-learning can also learn in non-episodic tasks.For all final states
, is never updated, but is set to the reward value observed for state . In most cases, can be taken to equal zero.Обозначения
- LF — это фактор обучения. Чем он выше, тем сильнее агент доверяет новой информации.
- DF — это фактор дисконтирования. Чем он меньше, тем меньше агент задумывается о выгоде от будущих своих действий.
fun init(): for \forall s and a: Q[s, a] = rand()
fun observe(): s' = s // Запомнить предыдущие состояния a' = a // Запомнить предыдущие действия s = get_from_sensor() // Получить текущие состояния с сенсора r = get_from_sensor() // Получить вознаграждение за предыдущее действие
fun q-update(): Q[s', a'] = Q[s', a'] + LF * (r + DF * MAX(Q,s) — Q[s',a'])
fun decision(): a = ARGMAX(Q, s) TO_ACTIVATOR = a
- Repeat: GO TO 2 ???
'fun max(Q, s): max = minValue for each a of ACTIONS(s) do if Q[s, a] > max: max = Q[s, a] return max
'fun argmax(Q, s):
amax = First of ACTION(s) for each a of ACTION(s) do if Q[s, a] > Q[s, amax]: amax = a return amax