Главная » Хабрахабр » Что не так с обучением с подкреплением (Reinforcement Learning)?

Что не так с обучением с подкреплением (Reinforcement Learning)?

Основная претензия которой сводилась к тому, что современные алгоритмы обучения с подкреплением требуют для решения задачи примерно столько же времени, как и обычный случайный поиск. Еще в начале 2018 года вышла статья Deep Reinforcement Learning Doesn't Work Yet ("Обучение с подкреплением пока не работает").

Нет. Изменилось ли что-то с того времени?

Но трудности, с которыми сталкивается эта область машинного обучения, и методы, которыми ученые пытаются бороться с этими трудностями, наводят на мысль что, возможно, с самим этим подходом имеются фундаментальные проблемы. Обучение с подкреплением считается одним из трех основных путей к созданию сильного ИИ.

Постойте, что значит один из трех? А остальные два какие?

С учетом успеха нейронных сетей в последние годы и анализом того, как они работают с высокоуровневыми когнитивными способностями, считавшимися ранее характерными только для человека и высших животных, на сегодняшний день в научном сообществе сложилось мнение, что можно выделить три основных подхода к созданию сильного ИИ на основе нейронных сетей, которые можно считать более менее реалистичными:

1. Обработка текстов

Текст удобен и быстр для обработки на компьютере. В мире накоплено огромное количество книг и текста в интернете, в том числе учебников и справочников. Теоретически, этого массива текстов должно хватить для обучения сильного разговорного ИИ.

Но это совершенно не факт. При этом подразумевается, что в этих текстовых массивах отражено полное устройство мира (как минимум, оно описано в учебниках и справочниках). Тексты как вид представления информации сильно оторваны от реального трехмерного мира и течения времени, в котором мы живем.

Так как для перевода текста нужно понять смысл фразы и пересказать его новыми словами (на другом языке). Хорошими примерами ИИ, обученными на текстовых массивах, являются чат-боты и автоматические переводчики. Это не так. Существует распространенное заблуждение, что правила грамматики и синтаксиса, включая описание всех возможных исключений, полностью описывают конкретный язык. Язык — это лишь вспомогательный инструмент в жизни, он легко меняется и адаптируется под новые ситуации.

Обратите внимание — не правил построения самих фраз (чем занимается грамматика и синтаксис), а именно какие фразы в каких жизненных ситуациях. Проблема обработки текста (хоть экспертными системами, хоть нейронными сетями) в том, что не существует набора правил, какие фразы в каких ситуациях нужно применять. Сравните фразы при крайней степени удивления: "о, боже!" и "o, holy shit!". В одной и той же ситуации люди произносят на разных языках фразы, которые вообще никак друг с другом не связаны с точки зрения структуры языка. Да никак. Ну и как между ними провести соответствие, зная языковую модель? Нужно знать ситуацию и что в ней обычно говорят на конкретном языке. Так случайно сложилось исторически. Именно из-за этого автоматические переводчики пока такие несовершенные.

Но если автоматические переводчики станут идеально переводить, не делая глупых и нелепых ошибок, то это будет доказательством, что создание сильного ИИ только на основе текста возможно. Можно ли выделить эти знания чисто из массива текстов — неизвестно.

2. Распознавание изображений

Посмотрите на это изображение

Судя по флагам, ветер дует справа налево. Глядя на эту фотографию мы понимаем, что съемка велась ночью. Никакая эта информация не указана явно в пикселях картинки, это внешние знания. А судя по правостороннему движению, дело не происходит в Англии или Австралии. На фото есть лишь признаки, по которым мы можем воспользоваться знаниями, полученными из других источников.

Вы знаете еще что-то, глядя на эту картинку?

О том и речь… И найдите себе девушку, наконец

И это представление, полученное по фотографиям, уж точно будет соответствовать нашему реальному и настоящему миру. Поэтому считается, что если обучить нейронную сеть распознавать объекты на картинке, то у нее сложится внутреннее представление о том, как устроен реальный мир. В отличие от массивов текстов, где это не гарантировано.

А в том, что хранится в предпоследнем слое. Ценность нейронных сетей, обученных на массиве фотографий ImageNet (а теперь и OpenImages V4, COCO, KITTI, BDD100K и другие) вовсе не в факте распознавания котика на фото. Вектора в 1024 числа достаточно, чтобы из него получить описание 1000 разных категорий объектов с 80% точностью (и в 95% случаев правильный ответ будет в 5 ближайших вариантах). Именно там находится набор высокоуровневых features, описывающих наш мир. Только вдумайтесь в это.

Через Transfer Learning и Fine Tuning. Именно поэтому эти features из предпоследнего слоя так успешно используются в совершенно различных задачах по компьютерному зрению. Из этого вектора в 1024 числа можно получить, например, карту глубины по картинке

(пример из работы, где используется практически не измененная предобученная сеть Densenet-169)

Применений много. Или определять позу человека.

От фотографии к видео один шаг, а видео — это и есть наша жизнь, так как около 99% информации мы получаем зрительно. Как следствие, распознавание изображений потенциально можно использовать для создания сильного ИИ, так как оно действительно отражает модель нашего реального мира.

Ее можно обучить отвечать на вопросы вроде "сколько карандашей лежит на столе?" (этот класс задач называется Visual Question Answering, пример такого датасета: https://visualqa.org). Но по фотографии совершенно непонятно, как мотивировать нейронную сеть думать и делать выводы. Это класс задач Image Captioning. Или давать текстовое описание тому, что происходит на фото.

Развив этот подход, в недалеком будущем нейронные сети смогут отвечать по видео на вопросы вроде "На проводах сидело два воробья, один из них улетел, сколько осталось воробьев?". Но является ли это интеллектом? Особенно, если кроме воробьев, там рядом будут сидеть синички, но их не нужно учитывать, так как вопрос был только про воробьев. Это уже настоящая математика, в чуть более усложненных случаях недоступная животным и находящаяся на уровне человеческого школьного образования. Да, это определенно будет интеллект.

3. Обучение с подкреплением (Reinforcement Learning)

Это универсальный способ обучения и, очевидно, он со всей определенностью может привести к созданию сильного ИИ. Идея очень проста: поощрять действия, ведущие к награде, и избегать ведущих к неудаче. Поэтому к Reinforcement Learning такой большой интерес в последние годы.

Смешать, но не взбалтывать

На картинках и с обучением с подкреплением можно получить ИИ уровня животных. Конечно, лучше всего сильный ИИ создавать комбинируя все три подхода. Способный разговаривать. А добавив к картинкам текстовые названия объектов (шутка, конечно же — заставив ИИ просматривать видео, где люди взаимодействуют и разговаривают, как при обучении младенца), и дообучив на текстовом массиве для получения знаний (аналог нашей школы и университета), в теории можно получить ИИ человеческого уровня.

В симуляторе можно создать упрощенную модель мира. У обучения с подкреплением есть один большой плюс. Поэтому в симуляторе можно решать задачу в очень маленькой размерности. Так, для фигурки человека достаточно всего 17 степеней свободы, вместо 700 в живом человеке (примерное число мышц).

То есть не могут решить задачу оптимизации, где на входе 44 числа и на выходе 17. Забегая вперед, современные алгоритмы Reinforcement Learning не способны произвольно управлять моделью человека даже с 17 степенями свободы. И даже в этом случае, например чтобы научить модель гуманоида с 17 степенями свободы бегать, причем начиная с положения стоя (что намного проще), нужно несколько суток расчетов на мощном GPU. Удается это сделать только в очень простых случаях, с тонкой ручной настройкой начальных условий и гиперпараметров. Это провал. А чуть более сложные случаи, например научиться вставать из произвольной позы, может вообще никогда не обучиться.

Крупные сверточные сети используются только чтобы снизить размерность картинки до нескольких features, которые и подаются на вход алгоритмам обучения с подкреплением. Кроме того, все Reinforcement Learning алгоритмы работают с удручающе маленькими нейронными сетями, а с обучением больших не справляются. Серьезно? Тот же бегающий гуманоид управляется Feed Forward сетью с двумя-тремя слоями по 128 нейронов. И на основе этого мы пытаемся построить сильный ИИ?

Чтобы попытаться понять, почему так происходит и что не так с обучением с подкреплением, надо сначала ознакомиться с основными архитектурами в современном Reinforcement Learning.

Так, у мухи в процессе эволюции развилась такая нервная система и такая работа нейромедиаторов в ганглиях (аналог мозга у насекомых), чтобы быстро уворачиваться от мухобойки. Физическое устройство мозга и нервной системы настроено эволюцией под конкретный вид животного и его условия обитания. А носорогу достаточно такой нервной системы и мозга, чтобы медленно повернуться в сторону цели и начать бежать. Ну хорошо, не от мухобойки, а от птиц, которые их ловили 400 миллионов лет (шутка, птицы сами появились 150 млн лет назад, скорее от лягушек 360 млн лет). А там, как говорится, у носорога плохое зрение, но это уже не его проблемы.

В случае млекопитающих, да и насекомых тоже, эту работу выполняет дофаминовая система. Но помимо эволюции, у каждой конкретной особи, начиная с рождения и в течении всей жизни, работает именно обычный механизм обучения с подкреплением. Так формируется ассоциативная память. Ее работа полна тайн и нюансов, но все сводится к тому, что в случае получения награды, дофаминовая система, через механизмы памяти, как-то закрепляет связи между нейронами, которые были активны непосредственно до этого.

Проще говоря, если текущая ситуация (текущие активные нейроны в этой ситуации) по ассоциативной памяти активируют нейроны памяти об удовольствии, то особь выбирает действия, которые она делала в похожей ситуации и которые запомнила. Которая, в силу своей ассоциативности, потом используется при принятии решений. Выбора нет. "Выбирает действия" — это плохое определение. Это если необходимо немедленное действие. Просто активированные нейроны памяти об удовольствии, закрепленные дофаминовой системой для данной ситуации, автоматически активируют моторные нейроны, приводящие к сокращению мышц.

Искусственному обучению с подкреплением, как области знаний, необходимо решить обе эти задачи:

1. Подобрать архитектуру нейросети (что для нас уже сделала эволюция)

Видимо, для этого не нужно какой-то жестко прописанной "архитектуры". Хорошая новость в том, что высшие когнитивные функции, выполняющиеся в неокортексе у млекопитающих (и в полосатом теле у врановых), выполняются в примерно однородной структуре.

Когда по мере эволюции новые части мозга нарастали поверх базовых, оставшихся от самых первых животных. Разноплановость областей мозга, вероятно, объясняется чисто историческими причинами. С другой стороны, у разных людей одинаковые части мозга реагируют на одинаковые ситуации. По принципу работает — не трогай. Что сигнальные пути, закодированные в генах, ведут именно к этим областям. Это может объясняться как ассоциативностью (features и "нейроны бабушки" естественным образом сформировались в этих местах в процессе обучения), так и физиологией. Единого мнения тут нет, но можно почитать, например, эту недавнюю стутью: "Biological and artificial intelligence".

2. Научиться обучать нейронные сети по принципам обучения с подкреплением

И какие успехи? Именно этим, в основном, и занимается современный Reinforcement Learning. Не очень.

Ставим их на выход нейросети как стандартные labels и обучаем нейронную сеть методом обратного распространения ошибки, чтобы она выдавала именно такой выход. Казалось бы, обучать нейросеть с подкреплением очень просто: делаем случайные действия, и если получили награду, то считаем сделанные действия "эталонными". А если действия привели к неудаче, то либо игнорируем этот случай, либо подавляем эти действия (ставим эталонными на выходе какие-нибудь другие, например любое другое случайное действие). Ну, самое обычное обучение нейросети. В общем и целом, эта идея повторяет дофаминовую систему.

Но если вы попробуете так обучать любую нейронную сеть, неважно насколько сложной архитектуры, реккурентную, сверточную или обычную прямого распространения, то… Ничего не выйдет!

Неизвестно. Почему?

Поэтому стандартным методом обратного распространения ошибки сеть не обучается. Считается, что полезный сигнал настолько мал, что теряется на фоне шума. А даже LSTM запоминает максимум 100-500 точек истории, и то лишь в очень простых задачах. Награда случается очень редко, может один раз из сотен или даже тысяч шагов. А на более сложных если будет 10-20 точек истории, то уже хорошо.

На данный момент мы не умеем обучать нейросети, которые запоминали бы единичные случаи. Но корень проблемы именно в очень редких наградах (по крайней мере в задачах, представляющих практическую ценность). Можно что-то, случившееся всего один раз, запомнить на всю жизнь. С чем мозг справляется с блеском. И, кстати, большая часть обучения и работы интеллекта строится именно на таких случаях.

Способов бороться с этим просто нет. Это что-то вроде жуткого дисбаланса классов из области распознавания изображений. То есть, постоянно обучать не только новым случаям, но и удачным старым. Лучшее, что пока смогли придумать — это просто подавать на вход сети наравне с новыми ситуациями, сохраненные в искусственном специальном буфере удачные ситуации из прошлого. Еще пытаются как-то на время фиксировать пути внутри нейросети, бывшие активными во время удачного случая, чтобы последующее обучение их не перезаписывало. Естественно, нельзя бесконечно увеличивать такой буфер, да и непонятно что именно в нем хранить. Так как новые обученные задачи в своем расчете используют и результаты выхода нейронов из замороженных путей, то в итоге сигнал только по этим замороженным интерферирует с новыми, и старые задачи перестают работать. Довольно близкая аналогия к происходящему в мозге, на мой взгляд, хотя особых успехов в этом направлении тоже пока не добились. 01256). Есть еще один любопытный подход: обучать сеть новым примерам/задачам только в ортогональном направлении к предыдущим задачам (https://arxiv.org/abs/1810. Это не перезаписывает предыдущий опыт, но резко ограничивает емкость сети.

Это попытки обучить нейросеть сразу нескольким задачам. Отдельным классом алгоритмов, призванных бороться с этой бедой (а заодно дарящих надежду достичь сильного ИИ), идут разработки в Meta-Learning. Скажем, распознавать картинки и одновременно ездить на велосипеде. Не в смысле, что распознавать разные картинки в одной задаче, а именно разным задачам в разных доменах (каждый со своим распределением и ландшафтом решений). Примеры алгоритмов метаобучения — MAML и Reptile. Успехи пока тоже не очень, так как обычно все сводится к тому, чтобы заранее подготовить нейросеть с общими универсальными весами, а потом быстро, всего за несколько шагов градиентного спуска, доадаптировать их к конкретной задаче.

Вся мощь нейросетей перед этим печальным фактом пока бессильна. В общем, только эта проблема (невозможность учиться на единичных удачных примерах) ставит крест на современном обучении с подкреплением.

Который как наука появился еще в седой древности, когда нейросети не были даже в проекте. Этот факт, что самый простой и очевидный способ не работает, заставил исследователей вернуться к классическому табличному Reinforcement Learning. В этом вся суть современного Reinforcement Learning. Но теперь, вместо ручного подсчета значений в таблицах и в формулах, давайте в качестве целевых функций использовать такой мощный аппроксиматор, как нейронные сети! И главное его отличие от обычного обучения нейросетей.

Чем выше получится это число, тем с большей вероятностью этот путь ведет к победе. Reinforcement Learning (еще до нейросетей) зародился как довольно простая и оригинальная идея: давайте делать, опять же, случайные действия, а потом для каждой ячейки в таблице и каждого направления движения, посчитаем по специальной формуле (получившей название уравнение Беллмана, это слово вы будете встречать практически в каждой работе по обучению с подкреплением), насколько хороша эта ячейка и выбранное направление.

(в сторону максимального числа по бокам текущей ячейки). В какой ячейке вы бы ни появились, двигайтесь по нарастанию зеленого цвета!

Заменив формулу расчета этого числа на нейронную сеть, а точнее обучая нейронную сеть по этой формуле (плюс еще пара трюков, связанных чисто с математикой обучения нейросетей), в Deepmind получили метод DQN. Это число получило название Q (от слова quality — качество выбора, очевидно), а метод — Q-learning. Это который в 2015 году победил в куче Atari игр и положил начало революции в Deep Reinforcement Learning.

В DQN на вход нейросети подается текущий state (текущая ситуация), а на выходе нейросеть предсказывает число Q. К сожалению, этот метод по своей архитектуре работает только с дискретными discrete действиями. Выдает Q для state и action (поэтому обозначение Q(s,a) как функции от s и a). А так как на выходе сети перечислены сразу все возможные действия (каждый со своим предсказанным Q), то получается что нейросеть в DQN реализует классическую функцию Q(s,a) из Q-learning. Мы просто ищем обычным argmax по массиву среди выходов сети ячейку с максимальным числом Q и делаем действие, которое соответствует индексу этой ячейки.

А можно выбирать действие как случайное из доступных, но пропорционально их Q-значениям (т.е. Причем можно всегда выбирать действие с максимальным Q, тогда такая политика будет называться детерменистской. Такая политика называется стохастическая. действия с высоким Q будут выбираться чаще, чем с низким). И тогда мы обучимся и повысим этим действиям вероятность, чтобы теперь они чаще выбирались согласно их вероятности. У стохастического выбора плюс в том, что автоматически реализуется поиск и исследование мира (Exploration), так как каждый раз выбираются разные действия, иногда не кажущиеся самыми оптимальными, но могущие в будущем привести к большой награде.

Если это не 5 кнопок на джойстике в Atari, а continuous момент управления двигателем робота? Но что делать, если вариантов действий бесконечно? 1 можно разбить на поддиапазоны по 0. Конечно, момент в диапазоне -1.. Но не всегда нужное число можно дискретизировать на интервалы. 1, и в каждый момент времени выбирать один из этих поддиапазонов, словно нажатие джойстика в Atari. И можете поворачивать руль только на 10 градусов влево или вправо. Представьте, что вы едете на велосипеде по горному пику. Это принципиальная проблема дискретных действий. В какой-то момент пик может стать настолько узким, что повороты на 10 градусов в обоих направлению приведут к падению. Все хорошо, но есть маленький нюанс, как говорится. А еще DQN не работает с большим размерностями, и на роботе даже с 17 степенями свободы просто не сходится.

Пожалуй, сюда можно также отнести Direct Future Prediction (DFP), который роднится с DQN архитектурой сети и дискретными действиями. В дальнейшем было разработано много оригинальных и местами гениальных алгоритмов на основе DQN, позволивших, в том числе, работать с continuous действиями (за счет хитростей и введения дополнительных нейросетей): DDQN, DuDQN, BDQN, CDQN, NAF, Rainbow. Причем на один шаг вперед и на несколько шагов вперед. Вместо предсказания числа Q для всех действий, DFP напрямую предсказывает сколько на следующем шаге будет здоровья или патронов, если выбрать это действие. Например, если мы ранены, то можем среди выходов сети искать действие, ведущее к максимальному увеличению здоровья. Нам остается лишь перебрать все выходы сети и найти максимальное значение интересующего нас параметра и выбрать соответствующее этому элементу массива действие, в зависимости от текущих приоритетов.

Но что еще важнее, за последующее время были разработаны новые архитектуры специально для Reinforcement Learning.

Мы просто действуем, применяя actions, предсказанные нейросетью. Давайте на вход сети подавать текущий state, а на выходе сразу предсказывать действия (либо сами действия, либо распределение вероятностей для них в стохастической политике). Эта награда может быть либо выше начальной (когда выиграли в игре), либо ниже (проиграли в игре). А потом смотрим, какую награду R набрали за эпизод. Выше она средней или ниже. Также можно награду сравнивать со некоей средней наградой.

И применить этот градиент к весам нейросети! Собственно, динамику полученной награды R в результате действий, которые подсказала нейросеть, можно использовать для вычисления градиента по специальной формуле. Просто вместо "эталонных" действий на выходе сети в качестве labels (мы ведь не знаем какие они должны быть), используем изменение награды для расчета градиента. И дальше использовать обычное обратное распространение ошибки. По этому градиенту сеть обучится, чтобы предсказывать действия, которые ведут к увеличению награды R.

Но у него есть недостаток — надо ждать окончания эпизода, чтобы посчитать куммулятивную награду R, прежде чем изменять веса сети согласно ее изменению. Это классический Policy Gradient. Большая награда сильнее поощряет действия, которые к ней привели. А из преимуществ — гибкая система поощрений и наказаний, которая не только работает в обе стороны, но также зависит от величины награды.

То есть, выдает Q-число для этих действий, как в алгоритме DQN. А теперь представьте, что у нас есть две сети — одна предсказывает какие действия надо совершить, а вторая оценивает насколько эти действия хороши. Вторая сеть на вход тоже получает state, но еще и действия action, предсказанные первой сетью, а на выходе выдает число Q как функцию от них обоих: Q(s,a). На вход первой сети подается state, а она предсказывает action(s).

Ну а вторая сеть обновляется обычным путем, согласно реальному прохождению эпизода. Собственно, это число Q(s,a), выданное второй сетью (ее называют critic, критик), точно также можно использовать для вычисления градиента, которым обновлять веса первой сети (которую называют актером, actor), как мы делали выше с наградой R. Его плюс по сравнению с классическим Policy Gradient, что веса сети можно обновлять на каждом шаге, не дожидаясь окончания эпизода. Этот метод получил название actor-critic. Что ускоряет обучение.

Так как она предсказывает напрямую действия actions, то прекрасно работает с continuous действиями. В таком виде это сеть DDPG. DDPG является прямым continuous конкурентом DQN с его дискретными действиями.

А насколько эти предсказанные действия оказались лучше или хуже, чем мы ожидали. Следующим шагом стало использование для обучения первой сети не просто предсказания критиком critic числа Q(s,a) — насколько хороши действия, предсказанные актером actor, как это было в DDPG.

Из экспериментов известно, что максимальный выброс дофамина происходит не во время самого получения удовольствия, а во время ожидания, что скоро получим удовольствие. Это очень близко к тому, что происходит в биологическом мозге. Впрочем, если ожидания не оправдались, то наступают ужасные последствия, большие чем в обычном случае (в организме присутствует специальная система наказания, обратная системе вознаграждения).

Число A(s,a) показывает не абсолютное качество Q(s,a) выбранных действий, а относительное преимущество — насколько после предпринятых действий станет лучше, чем текущая ситуация V(s). Для этого для расчета градиентов стали использовать не число Q(s,a), а так называемое Advantage: A(s,a) = Q(s,a) — V(s). Если A(s,a) < 0, то градиент будет изменять веса так, что предсказанные действия будут подавляться, т.к. Если A(s,a) > 0, то градиент будет изменять веса нейросети, поощряя предсказанные сетью действия. они оказались плохие.

Если мы стоим в шаге от вершины Эвереста — это очень хорошая ситуация state, с большим V(s). В этой формуле V(s) показывает насколько хорош текущий state сам по себе, без привязки к действиям (поэтому зависит только от s, без a). А если мы уже сорвались и падаем, то это офигеть какой плохой state, с низким V(s).

К счастью, при таком подходе Q(s,a) можно заменить на награду r, которую получим после совершения действия, и тогда формула преимущества для расчета градиентов получается A = r — V(s).

Которая получает на вход state, а на выходе разделяется на две головы head: одна предсказывает действия actions, а другая предсказывает V(s). В таком случае, достаточно предсказывать только V(s) (а награду мы посмотрим уже по факту что получится в реальности), и две сети — actor и critic, можно объединить в одну! обе сети должны на входе получать state. Такое объединение помогает лучше переиcпользовать веса, т.к. Впрочем, можно использовать и две отдельные сети.

Так как при плохом V(s), где уже ничего нельзя исправить ни при каких действиях action (мы летим вниз головой с Эвереста), можно не искать дальше пути решения. Учет и предсказание сетью качества текущей ситуации V(s) в любом случае помогает ускорить обучение. Это используется в Dueling Q-Network (DuDQN), где Q(s,a) внутри сети специально раскладывается на Q(s,a) = V(s) + A(a), а потом собирается обратно.

И обновляющий веса как только набирается батч batch нужного размера. Asynchronous Advantage Actor Critic (A3C) означает всего лишь, что есть сервер, собирающий результаты от множества actor. Это вроде как разбавляет примеры, убирая из них ненужную корреляцию, что улучшает обучение. Поэтому асинхронный, что не ждет каждого actor. A2C тоже показывает хорошие результаты, поэтому применяются обе версии, в зависимости от вкуса разработчика. С другой стороны, потом появился A2C — синхронная версия A3C, в которой сервер дожидается окончания эпизодов у всех actor и только после этого обновляет веса (поэтому синхронный).

Собственно, на этом прогресс закончился.

Даже лучшие Reinforcement Learning алгоритмы требуют десятки миллионов примеров, сравнимы по эффективности со случайным поиском, а самое печальное, что не позволяет с их помощью создать сильный ИИ — работают лишь на крайне низких размерностях, исчисляемых единицами. Не смотря на красивое и выглядящее логичным описание, все это работает не очень. Даже не десятками.

На PPO в настоящее время обучают большинство агентов в мире RL. Дальнейшее улучшение — TRPO и PPO, являющиеся сейчас state-of-the-art, являются разновидностью Actor-Critic. К примеру, им обучали OpenAI Five для игры в Dota 2.

Дело в том, что в A3C/A2C бывают резкие изменения, которые портят предыдущий опыт. Вы будете смеяться, но все что придумали в методах TRPO и PPO — это ограничивать изменение нейронной сети при каждом обновлении, чтобы веса резко не менялись. Что-то вроде gradient clipping в рекуррентных сетях для защиты от взрывающихся градиентов, только на другом математическом аппарате. Если сделать, чтобы новая policy не слишком отличалась от предыдущей, то можно избежать таких выбросов. Сам факт того, что приходится так грубо обрезать и ухудшать обучение (большие градиенты там ведь не просто так появились, они нужны для вызвавшего их примера), и что это дает положительный эффект, говорит о том, что мы свернули куда-то не туда.

Он не сильно отличается от PPO, только добавлена цель при обучении повышать энтропию в policy. В последнее время возрастающей популярность пользуется алгоритм Soft-Actor-Critic (SAC). Нет, не так. Делать поведение агента более случайным. Это автоматически повышает надежность политики, раз агент готов к любым случайным ситуациям. Чтобы агент был способен действовать в более случайных ситуациях. Однако даже с SAC, чтобы обучить бегать гуманоида с 17 степенями свободы, начиная с позиции стоя, нужно около 20 млн кадров и примерно сутки расчета на одном GPU. Кроме того, SAC требует немного меньше примеров для обучения, чем PPO, и менее чувствителен к настройке гиперпараметров, что тоже плюс. Более сложные начальные условия, скажем, научить вставать гуманоида из произвольной позы, может вообще не обучиться.

Итого, общая рекомендация в современном Reinforcement Learning: использовать SAC, PPO, DDPG, DQN (в таком порядке, по убыванию).

Это построить модель окружающей среды, и использовать ее для прогнозирования, что произойдет если мы предпримем какие-то действия. Существует еще один интересный подход, косвенно касающийся обучения с подкреплением.

Лишь об их результате. Его недостатком является то, что он никак не говорит, какие действия нужно предпринять. Получается что-то вроде симулятора мира на основе нейронной сети. Но зато такую нейронную сеть легко обучать — просто обучаем на любой статистике.

И смотрим, какое из них принесет максимальную награду. После этого генерируем огромное количество случайных действий, и каждое прогоняем через этот симулятор (через нейронную сеть). И действительно, если мы поднимаем руку, то с большой вероятностью нужно продолжать ее поднимать. Есть небольшая оптимизация — генерировать не просто случайные действия, а отклоняющиеся по нормальном закону от текущей траектории. Поэтому в первую очередь нужно проверить минимальные отклонения от текущей траектории.

А если обучить нейронную сеть прогнозировать вперед хотя бы на несколько шагов, то для простых окружений легко можно за один раз получать батчи по 2000-5000 предсказаний. Здесь фокус с том, что даже примитивный физический симулятор вроде MuJoCo или pyBullet выдает около 200 FPS. Нейросеть здесь просто выполняет роль очень быстрого симулятора реальности. В зависимости от мощности GPU, в секунду можно получить прогноз для десятков тысяч случайных действий благодаря параллелизации в GPU и сжатости вычислений в нейросети.

Эта концепция в Reinforcement Learning получила название Dream Worlds, или World Models. Кроме того, раз уж нейросеть может прогнозировать реальный мир (это и есть model-based подход, в общем смысле), то можно проводить обучение целиком в воображении, так сказать. Кроме того, это имеет природный аналог — обычные сны. Это неплохо работает, хорошее описание есть тут: https://worldmodels.github.io. И многократная прокрутка недавних или планируемых событий в голове.

Здесь удалось достичь неплохих результатов (недостижимых обычным Reinforcement Learning). От бессилия, что алгоритмы Reinforcement Learning не работают на больших размерностях и сложных задачах, народ задался целью хотя бы повторить действия за экспертами в виде людей. Фокус оказался прост — помещать агента сразу в конец игры (в конец показанной человеком траектории). Так, OpenAI получилось пройти игру Montezuma's Revenge. После этого помещаем его немного назад, где он быстро учится доходить до того места, которое он уже изучил. Там с помощью PPO, благодаря близости финальной награды, агент быстро учится идти вдоль траектории. И так постепенно сдвигая точку "респавна" вдоль траектории до самого начала игры, агент учится проходить/имитировать траекторию эксперта в течении всей игры.

Рецепт аналогичен методу OpenAI: каждый эпизод начинаем не с начала траектории, а со случайной точки вдоль траектории. Другой впечатляющий результат — повторение движений за людьми, снятые на Motion Capture: DeepMimic. Тогда PPO успешно изучает окрестности этой точки.

Это обычный случайный поиск, но начиная со случайной посещенной ранее ячейки cell (огрубленной ячейки, в которую попадают несколько state). Надо сказать, что нашумевший алгоритм Go-Explore от Uber, прошедший с рекордными очками игру Montezuma's Revenge, вообще не является алгоритмом Reinforcement Learning. Способом, аналогичным как в OpenAI, т.е. И только когда таким случайным поиском будет найдена траектория до конца игры, уже по ней с помощью Imitation Learning обучается нейросеть. начиная с конца траектории.

В природе оно является двигателем для исследования окружающей среды. Очень важным понятием в Reinforcement Learning является любопытство (Curiosity).

Иначе такая сеть зависнет перед первым же деревом с качающейся листвой. Проблема в том, что в качестве оценки любопытства нельзя использовать простую ошибку предсказания сети, что будет дальше. Так как результат из-за сложности будет невозможно предсказать и ошибка всегда будет большой. Или перед телевизором со случайным переключением каналов. И на то, как другие люди работают =). Впрочем, именно это и является причиной, почему мы (люди) так любим смотреть на листву, воду и огонь. Но у нас есть защитные механизмы, чтобы не зависнуть навечно.

Если коротко, агент (нейронная сеть) кроме того, что предсказывает какие действия лучше всего совершить в данной ситуации, дополнительно пытается предсказать что будет с миром после совершенных действий. Один из таких механизмов придумали как Inverse Model в работе Curiosity-driven Exploration by
Self-supervised Prediction. И использует это свое предсказание мира для следующего шага, чтобы по нему и по текущему шагу обратно предсказать свои же предпринятые ранее действия (да, сложно, без поллитра не разобраться).

На качающиеся ветки дерева он никак не может повлиять, поэтому они становятся ему неинтересны. Это приводит к любопытному эффекту: агент становится любопытным только к тому, на что он может повлиять своими действиями. А вот походить по округе он может, поэтому ему любопытно ходить и исследовать мир.

И ему будет любопытно щелкать каналы до бесконечности (так как не может предсказать, какой будет следующий канал, т.к. Однако если у агента будет пульт от телевизора, переключающий случайные каналы, то он может на него повлиять! Попытка обойти эту проблему предпринята в Google в работе Episodic Curiosity through Reachability. он случайный).

Ее суть в том, что берется вторая, совершенно случайно инициализированная сеть, и ей на вход подается текущий state. Но, пожалуй, лучший state-of-the-art результат по любопытству, на данный момент принадлежит OpenAI с идеей Random Network Distillation (RND). Вторая сеть не обучается, она остается все время фиксированной как была инициализирована. А наша основная рабочая нейросеть пытается угадать выход этой нейросети.

Смысл в том, что если какой-либо state уже был посещен и изучен нашей рабочей сетью, то она более менее успешно сможет предсказывать выход той второй сети. В чем смысл? Эта ошибка в предсказании выхода той случайно инициализированной сети используется как показатель любопытства (дает высокие награды, если в данной ситуации не можем предсказать ее выход). А если это новый state, где мы никогда не были, то наша нейросеть не сможет предсказать выход той RND сети.

Но пишут, что это устраняет проблему когда цель предсказания стохастическая и когда недостаточно данных, чтобы самому сделать предсказание что будет дальше (что дает большую ошибку предсказания в обычных алгоритмах любопытства). Почему это работает, не совсем понятно. И справляется с проблемой случайного телевизора. Так или иначе, но RND реально показал отличные результаты по исследованию на основе любопытства в играх.

Не каждый раз и ненадежно, но время от времени получается. С помощью RND любопытства в OpenAI впервые честно (а не через предварительный случайный поиск, как в Uber) прошли первый уровень Montezuma's Revenge.

Не просто несколько удачных решений, как в сверточных сетях, где resudal и skip connections позволили тренировать сети глубиной в сотни слоев, вместо десятка слоев с одной только функцией активации Relu, поборовшей проблему исчезающих градиентов в сигмоиде и tanh. Как видите, всего за несколько лет Reinforcement Learning прошел долгий путь. Ключевое слово "не заработал". В обучении с подкреплением произошел прогресс в концепциях и понимании причин, почему не заработал тот или иной наивный вариант реализации.

Ни временных зависимостей на разных масштабах, как в мозге (Hierarchical Reinforcement Learning не в счет, уж больно примитивная в нем иерархия по сравнению с ассоциативностью в живом мозге). Но с технической стороны все по прежнему упирается в предсказания все тех же Q, V или A значений. Reinforcement Learning либо топчется на месте, радуясь небольшим успехам, либо движется в каком-то совсем уж неправильном направлении. Ни попыток придумать архитектуру сети, заточенную именно под обучение с подкреплением, как это произошло с LSTM и другими рекуррентными сетями для временных последовательностей.

И мы увидим по-настоящему работающее обучение с подкреплением. Хочется верить, что однажды в обучении с подкреплением произойдет прорыв в архитектуре нейронных сетей, аналогичный тому что произошел в сверточных сетях. Обучающееся на единичных примерах, с работающей ассоциативной памятью и работающее на разных временных масштабах.


Оставить комментарий

Ваш email нигде не будет показан
Обязательные для заполнения поля помечены *

*

x

Ещё Hi-Tech Интересное!

[Перевод] Вы знаете кило, мега и гига. Как насчёт ронна и куэкка?

Как раз переопределив килограмм и иные базовые меры, хранители метрической системы выбрали новую цель: новые префиксы для безумно больших и малых чисел. К ним присоединятся их микроскопические коллеги, ронто – 10-27, и куэкто – 10-30. Предложение, поданное в Международное Бюро ...

Лунный орбитальный зонд NASA сделал новые снимки Китайской станции «Чанъэ-4» — ближе и яснее

15 февраля 2019 года NASA показало новые фотографии с орбиты Луны, сделанные зондом LRO спускаемого аппарата «Чанъэ-4» и ровера «Юйту-2». Первая попытка сфотографировать модули «Чанъэ-4» на обратной стороне Луны с расстояния 330 км описана тут. Первое фото зонда LRO от ...