Одной из больших проблем обучения с подкреплением является неэффективность данных.
Да, мы можем обучить нейронную сеть, которая будет играть в Pac-Man лучше, чем человек.
Для этого ей нужно будет сделать огромное, поистине астрономическое количество попыток.
Для сравнения, мой кот тоже может разрабатывать сложные стратегии, и при этом ему не нужны тысячи повторений, чтобы выучить что-то элементарное.
В 2020 году Google выпустил статью «Мечтать контролировать: обучение поведению с помощью скрытого воображения».
В статье описан новейший алгоритм обучения с подкреплением — Dreamer. Алгоритм примечателен тем, что он относительно быстро изучает выигрышную стратегию — с относительно небольшим количеством взаимодействий с окружающей средой.
После этого мне очень захотелось свой Dreamer — желательно не такой, как у Google, но получше.
К тому же, по математическому описанию код можно написать очень по-разному — хотелось понять, в чем подводные камни, поэтому в код Google практически не лез.
Отказ от ответственности: Я не пытаюсь сделать ИИ похожим на человека и не говорю, что нейронные сети подобны нервным системам любых организмов.
По моему опыту, машинное обучение обычно превосходит людей в задачах, где есть большие данные и легко проверяемая функция ошибок.
Большинство известных мне исключений связаны с тем, что либо эволюция заранее обучила человека на огромном наборе данных, либо в детстве человек собирал огромную статистику.
Поскольку задача требует объективного общего интеллекта, оказывается, что при хороших шансах XGBoost работает точнее, чем любой эксперт.
Что такое Мечтатель?
Dreamer — это система обучения с подкреплением, которая использует обучение воображению.Состоит из трех основных блоков:
- Редуктор размеров.
На входе у нас кадры из какого-нибудь Pac-Man, а на выходе — небольшие массивы чисел с плавающей запятой, также называемые «встраиванием».
Поскольку любое изображение весьма избыточно, его можно сжать в несколько чисел, описывающих содержимое изображения.
Подстилку можно получить, например, с помощью автоэнкодера — это нейросеть, которая пытается воспроизвести вход на выходе.
Но один из слоев автоэнкодера содержит мало нейронов, то есть нейросеть вынуждена сжимать изображение в небольшой информативный вектор, из которого потом можно получить то же самое изображение.
Например, если мы посмотрим на катапульту и увидим в ней систему рычагов, масс, сил, упругостей и сил, то это «теоретическое» описание и будет вложением.
- Модель мира.
Это своего рода нейронная сеть, которая принимает на вход несколько прошлых вложений и действий нашего агента, а на выходе прогнозирует будущие встраивания.
Или некоторая последовательность этих сжатых представлений.
- Система обучения с подкреплением, которая будет учиться в виртуальной реальности, на модели мира (пункт 2), и управлять ею в реальном мире.
Затем он обучает автоэнкодер так, что из цветного изображения размером 128 на 128 он теперь может составить вектор из 30 элементов.
Поскольку проблема одна — пинг-понг, то кодер не обязательно должен быть емким.
Затем модель мира обучается — она учится предсказывать будущие на основе прошлых кадров и действий.
Затем обучается система актер-критик — она понимает, какие действия в каких ситуациях приводят к увеличению и уменьшению сигнала вознаграждения, на любом горизонте планирования.
Здесь нужно понимать, что каждая из описанных систем построена на нейронных сетях, то есть каждый раз при обучении модели она просто совершает несколько шагов градиентного спуска.
Автоэнкодер чуть ближе от совершенно случайного нейрона к действительно хорошему компрессору, сеть моделирования тоже чуть ближе к идеальной модели мира и так далее.
Сколько длится обучение сновидца? И это показано на синем графике.
Фактически, когда я запустил Dreamer в игре в понг, он начал показывать некоторые результаты, отличные от случайных, в 120-й игре.
Для меня это стало шоком: самый эффективный ИИ вынужден проиграть 120 игр, прежде чем он научится действовать лучше, чем случайный.
Там всего две кнопки.
В общем, подумал я, Dreamer успешно провалил кошачий тест (мой кот научился бы быстрее), а значит, чтобы побить рекорд Google, достаточно сделать что-то хоть немного лучше.
Архитектура
Я пробовал и думал о многих архитектурах обучения с подкреплением.Мои требования были:
- Система должна быть эффективной с точки зрения выборки.
Я знаю, как найти хорошую стратегию в бесконечном количестве экспериментов — эволюционный алгоритм отлично с этим справится.
Но нужно пройти кошачий тест — система должна уметь на нескольких единицах подкрепления научиться создавать некую неслучайную стратегию в единицах из тысяч кадров.
- Система должна иметь возможность использовать чужой опыт. Если мы проводим обучение с подкреплением, скажем, для игры Doom, то мы должны иметь возможность играть в нее сами, передавать запись игры боту и обучать его на ней.
Не копируйте стратегию человека – просто сделайте из нее выводы, лучше поймите, какие ходы хорошие, а какие плохие.
- Система должна быть максимально универсальной.
Как минимум, он должен хорошо справляться со многими задачами, где на входе у нас цветное видео, а действие происходит в чем-то отдаленно похожем на наш мир.
- Система должна работать максимально «из коробки» — никакой сложной настройки гиперпараметров.
Но это возможно.
Я хотел повторить Dreamer, но решил, что не обязательно каждый раз обучать автоэнкодер под задачу.
Можно один раз провести на сервере несколько недель и получить какой-то средний универсальный кодировщик.
Вы даже можете начать с обучения ему на задачах, похожих на те, где мы его будем использовать.
Мой кодер
Автоэнкодеры широко используются для создания вложений.На входе изображение, на выходе то же самое.
А в узком промежуточном слое происходит встраивание.
Но потом я подумал: хочу, чтобы система работала с видео.
Было бы здорово, если бы мой кодер мог обнаруживать не только области света и тени, но и материальные объекты.
Я провожу обучение с подкреплением, которое буду тестировать в играх, и рассматриваю игры как метафору реальности.
Итак, давайте на входе «автокодировщика» иметь видеоряд, а на выходе — следующий кадр.
Да и мы это всё протащим через узкое место.
Я хотел сделать систему, которая бы внутри встраивания получала что-то вроде координат объектов, их скорости, массы.
Возможно какие-то свойства силы, взрывчатости и так далее.
Конечно, можно отметить все эти свойства вручную, но ручная разметка точно будет неполной.
Или вы можете разметить его автоматически — и тогда он будет менее значимым, но более полным.
Итак, я арендовал сервер и начал экспериментировать.
Для начала я сделал из видео огромный датасет и разбил его на входы и выходы.
На входе — цепочки из 6 кадров, на выходе — следующий кадр.
Все кадры идут с определённым периодом, то есть не подряд. На входе есть сверточные слои, на выходе — деконволюционные слои, здесь все стандартно.
Что посередине? Я пробовал и LSTM, и GRU — они дали ужасные результаты.
Трансформатор дал еще худшие результаты — наверное, его нужно как-то хитро использовать.
Лучше всего работал, как ни странно, обычный полносвязный слой, соединяющий входные и выходные «каскады» нейронной сети.
Итак, картинки.
Первая картинка – это конец видеоряда.
Последнее – это то, что нам нужно предсказать.
В середине — то, что предсказал автоэнкодер.
Встраивание есть — всего 300 поплавков, то есть чудес я не ждал.
Чтобы убедиться, что система не просто размывает последний кадр, а делает прогноз, взгляните на картинку с самолетом: вы можете увидеть, как система прогнозирует смещение линии горизонта.
Автоэнкодер хорошо замечает статичные и контрастные детали — например, он быстро научился рисовать небо и графические интерфейсы.
Кроме того, я сделал еще один кодер.
На этот раз на входе был тот же видеоряд, но только от стрелков.
А на выходе было сразу несколько вещей: предсказанный следующий кадр, сколько здоровья потеряет главный герой в ближайшем будущем (и два разных горизонта прогноза), сколько врагов он убьет и подберет предметов.
А размер встраивания составляет 30 поплавков.
Конечно, картинку предсказывали хуже (первые 2 кадра — входные, затем прогноз, затем реальное будущее):
Однако в реальных тестах в сочетании с обучением с подкреплением лучше работал именно второй автоэнкодер.
Вообще, насколько важно, чтобы «автоэнкодер» предсказывал картинку, если он ее так плохо предсказывает? Трудно сказать, но, наверное, это позволяет нам различать сцены, одинаково перспективные с точки зрения наград, но по-разному выглядят, по крайней мере, имеют разное освещение.
Окружающая среда и исходные данные
Большая часть моего тестирования проходила внутри vizdoom — порта Doom, подходящего для запуска с Python. На вход обучение с подкреплением получало картинку, а на выход — набор действий, связанных с движением, стрельбой и открытием дверей.Сигнал награды привязан к убийству врагов (+1 за каждую смерть врага), попаданиям (+0,15 за попадание), подбору предметов (+0,1 за предмет) и изменению здоровья (+0,005 за каждую единицу здоровья, но это уже нечто большее).
сигнала наказания, поскольку здоровье чаще ухудшается).
Для сравнения я использовал два основных алгоритма управления.
Во-первых, это совершенно случайно.
Совершенно случайные действия.
Во-вторых, это сарса.
Одна нейросеть предсказывает, насколько перспективна позиция — она оценивает общее вознаграждение за следующие несколько шагов на основе полученного встраивания.
Второй оценивает ошибку первого, зная вложение и предпринятое действие.
То есть условно первый нейрон говорит: обычно в такой ситуации мы убиваем в среднем 2 монстра.
А второй говорит: если мы начнем стрелять, то это число увеличится на 1, а если пойти влево, то упадет на 2. Кроме того, для каждого товара есть рейтинг новизны.
Эта оценка добавляется к сигналу вознаграждения, поэтому бот не только будет практиковать самую известную стратегию, но и попытается открыть что-то новое.
Примерно так это выглядит на графике.
Синий — общая награда за последние несколько шагов.
Оно принимается с экспоненциальным затуханием, чтобы более близкое вознаграждение воспринималось как более важное.
Оранжевый — общее убывающее вознаграждение с учетом новизны позиции (дополнительно немного вознаграждаем систему, если она пропускает кадры, отличные от тех, что были в прошлом).
Зелёный — оценка перспективности позиции исключительно на основе знания самой позиции (состояние -> вознаграждение).
Красный — коррекция этого прогноза нейросетью, которая знает и позицию (встраивание), и действие (состояние+действие -> вознаграждение).
Как оказалось, сарса решает большинство тестовых задач существенно лучше, чем полный рандом.
Он натыкается только на те, где награды встречаются реже всего.
И что немаловажно, Сарса добивается хороших результатов за 5-10 серий.
То есть он рандомизирует 5-10 игр – а потом начинает практически стабильно выигрывать.
Может, стоит отказаться от мечтателя и сделать ИИ на основе сарсы? Он учится очень быстро.
Дело в том, что сарса имеет теоретические ограничения по своей эффективности.
Мы прогнозируем награду на следующих шагах на основе истории.
То есть исходя из неявного предположения, что мы будем действовать примерно так же, как и в прошлом.
При таком подходе очень сложно развить сложный навык.
Например, наше обучение с подкреплением может проходить через лужу кислоты за большой аптечкой.
Лужа снимет 5 ХП, аптечка даст 25 - все нормально.
Но Сарса не знает, как он поведет себя после попадания в кислоту.
Возможно, он будет стоять на месте.
Возможно, он отступит. А может быть, он пойдет в аптечку.
В результате ожидаемые потери от кислоты во многом зависят от того, как сарса вела себя ранее при воздействии кислоты.
Вот почему мы делаем мечтателя.
Мечтатель, попробуй номер один
Я сделал нейросеть, которая предсказывает следующий кадр на основе нескольких вложений и действий — она работала на LSTM. Это должно было стать «моделью мира» для сновидца.Первое, что выяснилось, это то, что она училась очень долго.
А потренировавшись, все равно выдает ошибку 25-30%.
Я пробовал другие архитектуры нейронных сетей — например, вместо слоя LSTM я пробовал полносвязный слой или даже преобразователь.
Ничего подобного, качество низкое.
Когда вы учитесь на таких «мечтах», вы получаете совершенно нежизнеспособную стратегию.
Тогда я попробовал сделать ход конем: в мире машинного обучения есть невероятно точная, универсальная и быстрая модель.
Да, у нее есть некоторые недостатки, но в своей области эта модель побеждает любые нейронные сети.
Я говорю о повышении решающих деревьев.
LightGBM, XGBoost, Catboost — простые способы создать систему со сверхчеловеческой точностью.
Я сделал ряд усилений.
Каждый из них брал на вход данные нескольких последних вложений, а также последнее действие агента и на выходе предсказывал один компонент вложения.
Чтобы все это не перетренировалось, а делило выборку на обучающую и валидирующую, и строило новые деревья до тех пор, пока валидация не начнет проседать.
Ошибка 7-10%.
Победа! Но нам нужно прогнозировать не на один шаг, а на.
Сколько 10 секунд будет в кадрах? 250-300 шагов – это минимум.
Уже на втором шаге модель получает на вход те данные, которые она выдавала на выходе в прошлый раз.
С ошибкой, конечно.
Как быстро прогноз ошибся? На 2-м шаге ошибка с 7-10% взлетела до 40-100%.
?Эффект бабочки на максимальной скорости.
Меня, конечно, это не устроило, и я решил дополнить данные.
Сделайте несколько копий входных данных с шумом, чтобы сделать систему прогнозирования более надежной.
Это не помогло: бабочка продолжала насмешливо махать крыльями, вызывая ураганы на другом конце Земли.
Я понял, что в большинстве статей по рекуррентным системам планирования эффекту бабочки уделяется мало внимания.
Да, говорят, если прогнозировать мир покадрово, то прогноз ухудшается, а к 50-му кадру он вырождается.
Но они не предлагают какой-либо хорошей теории, которая объясняла бы, что может усилить или ослабить эту нестабильность и как вообще с ней работать.
Вместо этого они говорят о том, как сложно разобраться в большом количестве планов внутри модели.
Но мне это как раз не показалось проблемой — если есть безмодельные системы типа Sarsa, значит, их можно запускать в виртуальной реальности, сгенерированной нейронной сетью, и не придется тестировать огромное количество траекторий.
На основе модели и попытка №2
Где-то в этот момент я начал задаваться вопросом: почему я делаю то, что написано в статье Google, а это не работает? Именно в этот момент я скачал и запустил оригинальный мечтатель, и именно тогда я понял, насколько неэффективно творение Google с точки зрения данных.Я получил коды для многих методов обучения с подкреплением на основе моделей на Github. Это системы, которые могут предсказать кадры, которые создаст среда, если в нее будут вложены определенные действия.
Оказалось, что все системы, которые я видел, имели одно важное общее свойство.
Они делают прогноз одновременно на много кадров вперед. За один прогон нейросеть генерирует не один кадр, а сразу цепочку.
Да, и это был не LSTM, а гибрид сверточной и полносвязной сети — вроде моих «автоэнкодеров».
Немного творческой доработки — и у меня есть модель, которая может на основе цепочки вложений, старых действий и запланированных новых за один проход делать прогноз на много кадров вперед.
На мой взгляд модель выглядит убого и плохо.
Никакого LSTM, никакого трансформатора, план на будущее — просто зарядка «на скорую руку».
Но, важный момент. Эта модель действительно работает. На уровнях из Doom выдавало ошибку 10-20% на горизонте 50-110 кадров, причем с огромной скоростью эта ошибка не росла.
А если на основе предсказанных кадров построить еще 50-110 следующих кадров, то ошибка не будет стремительно расти в геометрической прогрессии.
При таком подходе можно предсказать на 300 кадров вперед (блоками по 50-100 кадров), и не получить заметного эффекта бабочки.
Например, посредственно обученная модель выдает прогноз со следующей ошибкой:
Это 3 шага прогноза по 90 кадров каждый.
Я взял средний модуль ошибки (mae) и разделил его на средний разброс вложений (их std).
Погрешность в 10-20% — это много или мало? Если оценивать вознаграждение с такой точностью, то это очень хороший результат. Но мы оцениваем встраивание и на его основе рассчитываем вознаграждение, используя другую нейронную сеть (которая, в свою очередь, обучается на реальных исторических сигналах вознаграждения).
Итак, я сделал простое обучение с подкреплением на основе модели.
Берем текущую ситуацию, предлагаем несколько сотен планов и прогнозируем траекторию (последовательность вложений) для каждого плана.
Мы оцениваем каждое вложение на предмет ожидаемого вознаграждения, выбираем траекторию с максимальным вознаграждением и выполняем действие, с которого начинается траектория.
И по возможности дополнительно обучаем модель мира (состояния+действия-> следующие состояния) и модель вознаграждения (состояние-> вознаграждение).
Эта модель сработала.
Он был медленным и работал хуже, чем sarsa, но лучше, чем случайный.
Однако он относительно хорошо справлялся с задачами с особенно скудным вознаграждением — лучше, чем сарса.
Тогда я сделал своего рода мечтатель: модель мира генерирует множество траекторий, и на них обучается алгоритм актера-критика.
А актер-критик уже принимает решения.
Но у актера-критика есть плохое свойство.
Когда он оценивает «потенциал» позиции, то есть вознаграждение, которого можно добиться от этой позиции, он использует рекурсивную q-функцию.
Что это значит? Он разбивает всю историю на пары позиций: прошлую позицию и будущую позицию.
А затем он рассчитывает потенциал для каждой позиции.
Скажем так.
У нас было 2 единицы вознаграждения в 50 кадре и -1 награда в 51 кадре.
Мы считаем, что награды, которые ближе к нам по времени, важнее тех, которые дальше.
Для простоты будем считать, что это 2 раза за каждую единицу времени.
Итого скажем, что потенциал (q-функция) 50-й позиции равен 2+0,5*(-1) = 1,5. Но это потенциал точки с горизонтом планирования 2. А что, если нам понадобится больше? Вместо награды во «второй» точке нужно подставить q-функцию и вычислить ту же формулу заново.
Откуда нам знать q-функцию, в нашем случае, для 51-й точки? Вероятно, будем считать, исходя из 52-го пункта.
Хорошо, а если это невозможно, ведь 51-й пункт последний? Хотим ли мы горизонт в 200 шагов? Затем нам нужно построить модель, которая на основе встраивания предсказывает q-функцию в точке.
А затем заполните неизвестные значения q моделью.
Хотим ли мы, чтобы диапазон прогнозирования составлял 200 шагов? Нам нужно обучить модель 200 раз и сгенерировать прогноз 200 раз.
Во-первых, это ужасно долго.
Во-вторых, у нас даже есть награды, предсказанные машинным обучением — с ненулевой ошибкой.
И мы рассматриваем из них какую-то функцию и делаем ее целью другой нейросети.
Затем мы берём выходы получившейся нейронной сети, добавляем к ним вознаграждения и снова делаем их целью для нейрона.
200 раз подряд. Интуитивно кажется, что машинное обучение поверх машинного обучения — это не очень хорошо, и если делать это рекурсивно, то ошибка будет расти лавинообразно.
Так что на практике мой мечтатель с актером-критиком внутри сработал хорошо.
Хуже, чем сарса, а главное, гораздо медленнее.
Но это лучше, чем полная случайность.
Может быть, ML по сравнению с ML, в конце концов, не так уж и плох? В любом случае проблема медлительности не исчезла.
Поэтому я решил вычислить q-функцию так, как это делается в сарсе.
Сгенерируйте набор случайных планов, постройте на их основе траектории и используйте их для расчета дисконтированного (то есть с экспоненциальным затуханием) вознаграждения.
Делал.
Я назвал этот дизайн мечтатель-сарса.
Система действительно работала быстрее, чем мечтатель с актером-критиком, но эффективность значительно упала.
Почему? Не могу сказать, почему получилось хуже, чем в предыдущем сновидце, но скажу, почему получилось хуже, чем в сарсе.
Когда мы оцениваем потенциал точки на основе фактически пройденных траекторий, мы очень зависим от того, как мы действовали на этих траекториях.
Если поместить случайную стратегию и, например, сарсу в одну среду, то сарса через какое-то время выучит какую-нибудь хорошую стратегию и получит траектории с более высоким вознаграждением, чем случайный алгоритм.
Как это:
На картинке видно, что даже хороший алгоритм не сразу находит эффективную стратегию, либо использует интеллект, либо по какой-то другой причине действует неоптимально.
В любом случае среднее вознаграждение по траекториям (а значит и q-функция в начальной точке) будет совершенно разным в зависимости от того, какая стратегия породила эти траектории.
Тогда были следующие соображения.
Существует уравнение Беллмана — оно позволяет нам вычислить q-функцию так, как если бы мы использовали наилучшую возможную стратегию.
Даже не зная этой стратегии и лучшей траектории.
Это хорошо, но уравнение Беллмана вычисляется рекурсивно по формуле, аналогичной формуле q-функции в актере-критике.
Это значит, что, во-первых, это занимает много времени, во-вторых, ML поверх ML с соответствующим накоплением ошибок.
Можно было бы создавать планы действий, аналогичные тем, что существовали раньше — например, генерировать их с помощью специальной нейронной сети.
Можно попробовать взять нейросеть, последовательно предсказывающую на 100 шагов вперед, и взять прогноз только 1-го шага.
И таким образом можно не просто генерировать траектории, а сделать полноценную интерактивную виртуальную реальность, где будет обучаться некий алгоритм, имеющий совершенно ужасную выборочную эффективность, но который находит хорошие стратегии.
В любом случае, первое, что нужно проверить, заключается ли проблема именно в том, что траектории генерируются плохой стратегией.
Поэтому я сделал дополнение к своему мечтателю-сарсу: теперь он берет много отправных точек и создает для каждой множество траекторий.
А потом оставляет несколько лучших.
Например, он берет 500 эпизодов прошлого и для каждого эпизода создает 300 планов длиной 800 шагов.
Выполняет и оценивает планы.
Оставляет 3 лучших (с максимальным количеством наград).
Получается 500х3=1500 траекторий длиной 800 шагов.
Запускаю и.
мечтатель-сарса-фильтр работает лучше, чем просто мечтатель-сарса! И почти так же быстро.
Тесты
Приведу таблицу со сравнительной оценкой полученного обучения с подкреплением.По таблице видно, что я не всё тестировал — к сожалению, мои RL слишком медленные.
Тестировал я их в основном на сторис по 15-30 серий, то есть Google Dreamer за это время показывает результат как полный рандом.
Пробный | случайный | сарса | основанный на модели | мечтатель | мечтатель-сарса | мечтатель-сарса-фильтрованный |
базовая карта 6 (впереди темный коридор, по бокам колонны) | 2.0296 | 3.05 | 2.235 | 2.6 | ? | 2.46 |
оборонительный центр (персонаж находится в центре хорошо освещенного зала, вокруг монстры) | 0.975 | 2.306 | 1.32 | ? | 1.17 | 1.38 |
дум 2 карта 5 (персонаж находится в комнате, впереди выход в коридор к монстрам) | 0.981 | 0.64 | 0.93 | 1.27 | 1.17 | 1.21 |
Я взял типичные эпизоды тренированного РЛ - не слишком удачные и не слишком неудачные.
Сразу оговорюсь: хотя выполнение стратегий нестабильно (сарса может получить 3 очка в одном эпизоде и 1 в следующем), сам процесс обучения стабилен, то есть при многих запусках один и тот же алгоритм RL будет сходятся примерно к одному и тому же среднему за 30 эпизодов значению вознаграждения.
Так как я не смог сюда вставить красивую таблицу с гифками, Я реализую это как ссылку Во-первых, понятно, что в большинстве случаев РЛ вообще никуда не уходят. Как они набирают очки?.
Фактически, они получают очки, если монстр по какой-либо причине умирает. Поэтому очень популярны стратегии, в которых РЛ привлекает внимание монстров стрельбой, а затем движется так, что они убивают друг друга случайными попаданиями.
Во-вторых, как видно из этих записей, стратегии сарсы заметно отстают. Сарсы гораздо более склонны.
Делать что-то нестандартное, что ли? Почему это происходит? Вероятно, все дело в эвристике любопытства.
Итак, нам нужно добавить эту эвристику к мечтателю и посмотреть, что произойдет. Искусство любопытства называется RND — случайная дистилляция сети.
Его суть в том, что мы создаем случайно инициализированную нейронную сеть, которая принимает на вход эмбеддинги и выдает определенные векторы.
И делаем вторую нейронную сеть, которая предсказывает результаты случайной сети.
Если мы хорошо прогнозируем, значит, ситуация знакома.
Если ошибка велика, это означает, что ситуация новая, и вознаграждение необходимо увеличить на эту «степень новизны».
Ссылка на визуализацию Пробный:
случайный | сарса | основанный на модели | мечтатель | мечтатель-сарса | мечтатель-сарса-фильтрованный | мечтатель | |
базовая карта 6 | 2.0296 | 3.05 | 2.235 | 2.6 | ? | 2.46 | 2.7 |
оборонительный центр | 0.975 | 2.306 | 1.32 | ? | 1.17 | 1.38 | 1.06 |
дум 2 карта 5 | 0.981 | 0.64 | 0.93 | 1.27 | 1.17 | 1.21 | 1.23 |
дум 2 карта 11 (впереди лужа кислоты) | 0.15 | -0.05 | ? | ? | ? | ? | 0.21 |
Сарса не очень устойчива – она не справляется со всеми средами.
И все эти РЛ к человеку даже близко не приближаются.
Каков потенциал развития? Где-то на этом этапе я решил посмотреть, на скольких последовательностях была обучена модель мира.
Оказалось, что все печально — каждый период ее обучения включает в себя десятки последовательностей — это очень мало, странно, что мы вообще чему-то научились.
А все потому, что когда я разделил весь таймлайн на порции, я сделал их непересекающимися.
А длина одного прогноза составляет ~100 вложений.
Хорошо, давайте устроим перекрытие бучей.
А пока идет тестирование, мы проведем еще одну проверку.
Нам хотелось бы знать, какие траектории генерирует сновидец? Однако траектории состоят из вложений, поэтому мы не сможем их увидеть.
А поскольку автоэнкодера у меня толком нет, то декодирующая часть не будет выдавать на выходе вменяемое изображение.
Но для каждого встраивания можно найти наиболее похожее из недавней истории.
А затем найти кадр, совпадающий по времени с этим вложением.
Таким образом мы все равно найдем что-то похожее на сгенерированную траекторию.
Я заставлю траекторию воспроизводиться медленно - так будет меньше мерцаний.
Итак, с новой схемой обучения модель обучается гораздо быстрее.
Увеличение обучающей выборки компенсировалось уменьшением количества эпох, а в сумме увеличилась и скорость обучения (как в секундах, так и особенно в эпизодах), и точность.
И сгенерированные эпизоды выглядят примерно так Так .
Как видите, не все траектории одинаково полезны.
Ну и технология визуализации не совсем удачна.
Однако новая версия мечтателя смогла добиться несколько лучших результатов, чем предыдущая, по крайней мере, на этой карте.
2,88 балла против 2,7 у лучших мечтателей прошлого и против 3,05 у сарсы.
Теги: #Машинное обучение #искусственный интеллект #машина+обучение #обучение с подкреплением #обучение с подкреплением
-
Управление Usb-Накопителем Windows Xp
19 Oct, 24 -
Openstreetmap С Использованием Mkmapkit
19 Oct, 24 -
Ibm Разделяет Мнение
19 Oct, 24