Модуль 13. TD-обучение и дофамин¶
Чему вы научитесь в этом модуле
- Объяснять, чем обучение без модели среды отличается от value iteration из модуля 12.
- Записывать ошибку предсказания награды \(\delta\) и интерпретировать её как «получил минус ожидал».
- Понимать, что такое бутстрэп: обучение оценки на основе другой оценки, а не на основе фактического итога.
- Показывать на числах, как ценность распространяется назад от награды, а всплеск ошибки переезжает на сигнал-предвестник.
- Рассказывать, почему разряды дофаминовых нейронов в опытах Шульца совпали с сигналом \(\delta\), и что именно здесь предсказало что.
Время: около двух недель. Пререквизиты: модуль 12.
Ноутбук: открыть в Colab · notebooks/13-td-learning-and-dopamine.ipynb
Зачем нужен этот модуль¶
В модуле 12 ценность вычислялась при известной модели среды: переходы и награды были даны заранее, и value iteration прогонялся по ним. В реальной задаче модели среды нет. Агент не знает, куда ведёт действие и какую награду за него дадут, — он узнаёт это только в процессе действия.
Значит, ценность необходимо обучать по опыту, по одному переходу за раз. Метод, который это делает, — обучение временными разностями (temporal-difference learning, TD), и в его основе лежит одна-единственная величина: разница между тем, что агент ожидал, и тем, что фактически получил. Эта же самая величина, как выяснилось в 1997 году, оказалась сигналом дофаминовых нейронов. Этот модуль о том, как алгоритм и мозг здесь совпали, и почему это совпадение неслучайно.
Ошибка предсказания награды¶
Агент находится в состоянии \(s\) и ожидает ценность \(V(s)\). Он совершает шаг, получает награду \(r\) и оказывается в новом состоянии \(s'\), ценность которого \(V(s')\). Теперь у него есть уточнённая оценка того же самого: \(r + \gamma V(s')\). Разница между уточнённой оценкой и прежней — это ошибка предсказания награды (reward prediction error):
Знак \(\delta\) читается напрямую. Положительная ошибка — получилось лучше, чем ожидалось, значит, состояние было недооценено и его ценность нужно поднять. Отрицательная — получилось хуже ожидаемого, состояние переоценено, ценность нужно снизить. Ноль — всё произошло ровно так, как ожидалось, менять нечего.
Отсюда следует правило обучения. Оценка ценности сдвигается в направлении ошибки на маленький шаг \(\alpha\):
Та же самая конструкция, что и градиентный спуск в модуле 4: шаг в направлении уменьшения ошибки. Только ошибка здесь — это не разница с известным правильным ответом, а разница с собственной уточнённой оценкой.
Бутстрэп¶
Вот что в TD-обучении является одновременно самым странным и самым важным. В правиле обновления \(V(s)\) обучается по \(V(s')\) — по другой оценке, которая сама по себе тоже неточна. Оценка подтягивается к оценке, а не к фактическому итогу. Это называется бутстрэп (bootstrap), и на первый взгляд выглядит как жульничество: каким образом можно чему-то научиться на основании того, чего ты сам ещё не знаешь?
Работает это потому, что награда \(r\) на каждом шаге — настоящая, она приходит из среды. Крупица истины подмешивается на каждом переходе, и через множество переходов оценки постепенно насыщаются этой истиной и сходятся к правильным значениям. Альтернатива — дождаться конца эпизода и обучать ценность по полной фактической отдаче (метод Монте-Карло) — честнее в том смысле, что не использует промежуточные оценки, но зато ждёт до самого конца и потому шумнее и медленнее. TD-обучение корректирует оценки на каждом шаге, расплачиваясь за это тем, что корректирует их по догадке.
Ценность и дофамин вручную¶
Проведём эксперимент. Проба устроена следующим образом: в определённый момент зажигается сигнал (лампа), а через несколько шагов поступает награда. Ничего, кроме этого, агент заранее не знает. Запускаем TD-обучение и наблюдаем два ряда: как нарастает ценность \(V\) по шагам и где вспыхивает ошибка \(\delta\) — тот самый дофаминовый сигнал.
Нажимайте «Проба». На первых пробах ценность всюду нулевая, и всплеск \(\delta\) стоит на награде: она пришла неожиданно. С каждой последующей пробой ценность нарастает назад — от награды к сигналу, — а всплеск ошибки ползёт вместе с ней. Когда обучение достигло насыщения, картина переворачивается: всплеск стоит на сигнале, а на награде — тишина. Награда больше не является сюрпризом, потому что её предсказал сигнал. Нажмите «Без награды» на обученной модели — там, где ожидалась награда, \(\delta\) проваливается ниже нуля.
Эти три картины — не изобретение алгоритма. Это ровно то, что было записано с электродов в реальном эксперименте.
Три случая Шульца¶
В 1997 году Вольфрам Шульц с коллегами записывали активность дофаминовых нейронов обезьяны, пока она обучалась тому, что определённый сигнал предсказывает порцию сока. Было получено три характерных паттерна, и все три точно соответствуют знаку \(\delta\).
Неожиданная награда — дофамин вспыхивает в момент получения награды: \(\delta = r - 0 > 0\). Предсказанная награда — вспыхивает на сигнале, молчит на награде: сигнал поднял ценность (всплеск), а награда пришла ровно в соответствии с ожиданием (\(\delta = 0\)). Награда не пришла — на её месте дофаминовая активность падает ниже фонового уровня: \(\delta = 0 - V < 0\).
Здесь алгоритм предсказал нейробиологию. Обычно математика описывает то, что уже обнаружено в природе. В данном случае произошло наоборот: TD-обучение было выведено в теории RL, а через несколько лет его сигнал \(\delta\) был узнан в разрядах дофаминовых нейронов. Это продолжение линии из модуля 12: закон эффекта Торндайка был психологией, уравнение Беллмана — математикой, а ошибка предсказания награды оказалась ещё и нейрохимией. Одна модель в трёх науках.
Куда это ведёт дальше¶
TD-обучение учит ценность. Но агенту нужна политика — конкретные решения о том, что делать. Есть два пути, и оба встретятся в модуле 14.
Через ценность. Выучить ценность действий \(Q(s,a)\) тем же TD-методом и в каждом состоянии выбирать действие с наибольшим значением \(Q\). Это Q-обучение, и его правило обновления — та же ошибка \(\delta\), только с максимумом по следующему действию.
Через градиент. Напрямую настраивать параметры политики в направлении увеличения отдачи. Здесь понадобится градиент из модуля 4, а ошибка \(\delta\) из этого модуля станет сигналом, который подсказывает политике, какое действие оказалось лучше ожидаемого.
Практическая часть¶
Часть 1. Работа с ноутбуком¶
Откройте notebooks/13-td-learning-and-dopamine.ipynb. Только numpy и matplotlib, вычисления мгновенны.
Что содержится внутри:
- TD(0) на цепочке состояний с наградой в конце. Ценность распространяется назад — та же картина, что в интерактивной фигуре.
- Сдвиг сигнала \(\delta\): тепловая карта ошибки по пробам. Всплеск смещается с награды на сигнал.
- Три случая Шульца на числах: неожиданная, предсказанная и пропущенная награда. Знак \(\delta\) в каждом из трёх случаев.
- TD против Монте-Карло: кто сходится быстрее и кто вносит больше шума на одной и той же задаче. Бутстрэп против ожидания конца эпизода.
- Сверка с точным решением: оценка ценности по TD сравнивается с точной ценностью из модуля 12, вычисленной по модели среды.
Часть 2. Собственная проба¶
- Задайте свой момент сигнала и награды и прогоните обучение. За сколько проб всплеск переезжает на сигнал?
- Сделайте награду случайной (иногда она есть, иногда нет). Что происходит с \(\delta\) и с ценностью?
- Уберите награду навсегда после завершения обучения. Проследите, как ценность затухает и \(\delta\) возвращается к нулю. Это угасание (extinction) из поведенческой психологии — и снова один и тот же термин из двух наук.
Задание¶
- Выведите ошибку \(\delta\) из уравнения Беллмана модуля 12. Покажите, что в среднем \(\delta\) равна нулю, когда ценность верна.
- Реализуйте TD(0) на цепочке состояний и постройте, как ценность каждого состояния сходится к \(\gamma^{k}\), где \(k\) — число шагов до награды.
- Постройте тепловую карту \(\delta\) по пробам и состояниям и определите, на какой именно пробе всплеск окончательно переезжает на сигнал.
- Сравните TD и Монте-Карло по числу проб до сходимости и по разбросу. Сформулируйте вывод в формате модуля 1: величина эффекта, условия, базовая линия.
- Смоделируйте ситуацию «награду не дали» и покажите отрицательную \(\delta\). Свяжите её словами с провалом дофаминовой активности у Шульца.
Проверка усвоения¶
- Чем TD-обучение отличается от value iteration модуля 12 по объёму знаний, доступных агенту?
- Прочитайте \(\delta\) словами, не называя букв. Что означает её знак?
- Что такое бутстрэп и почему обучение оценки на основе оценки всё-таки сходится?
- Почему на первых пробах всплеск \(\delta\) стоит на награде, а после обучения — на сигнале?
- Что происходит с \(\delta\), когда предсказанную награду не выдают, и что этому соответствует в экспериментах Шульца?
- Чем TD и Монте-Карло расплачиваются друг перед другом: за что TD быстрее и что является его ценой?
- Что здесь предсказало что — математика нейробиологию или наоборот?
Что дальше¶
В модуле 14 появляется способ обучать саму политику: policy gradient, актор-критик, PPO. Ошибка \(\delta\) из этого модуля станет там сигналом критика, а градиент из модуля 4 — двигателем актора. И там же — почему в RL воспроизводимость особенно плоха, и каким образом бутстрэп по случайным зёрнам из модуля 1 отделяет настоящее улучшение от удачного зерна.
Ошибка предсказания награды — это «получил минус ожидал». Она обучает ценность по одному переходу и она же вспыхивает в дофаминовых нейронах. Один сигнал — в алгоритме и в мозге.
Принцип
Дофамин кодирует не награду, а неожиданность награды. Предсказанное удовольствие молчит; удивление — вот что движет обучением, и в машине, и в голове.