Комментарии 11
А попроще конструкторов для ML еще не выпустили? Чтобы поменьше математики и побольше опытов делать ?
Очень интересная статья, спасибо!
В моем случае я решил каждый ход штрафовать агента за все клетки, которые сдвинулись (то есть изменили свое положение) после выбранного действия… Со временем агент понял, что наибольшая награда получается не только когда он схлопывает более крупные клетки, но и когда он двигает наименьшее количество клеток — и это заставляет его придерживаться выбранной стратегии, и только в исключительных случаях делать шаги в “неприоритетных” направлениях — когда ожидаемая награда с учетом штрафов оказывается действительно выше.
А как бы вы стали решать эту задачу, если бы не было известной стратегии которую сеть должна выучить — и соответственно у вас не было бы возможности придумать хорошие штрафы?
Это очень интересный вопрос, спасибо! На самом деле я с этого и начинал. К своему стыду я только через месяц экспериментов догадался погуглить, как же все-таки правильно играть в эту игру. И именно после этого пришла мысль про штрафы, чтобы натолкнуть агента на нужную стратегию. До этого это был слепой поиск удачной архитектуры сети и гиперпараметров — почему-то мне казалось, что правильно все подобрав, можно добиться положительных результатов.
Наверное, если бы не было известной стратегии, ее пришлось бы искать подбором, по одному выискивая те действия или их комбинации, которые в среднем улучшают показатели в игре и говорят о ее продолжительности, например, не максимально достигнутую клетку, а количество сделанных ходов, или сумму схлопываний за все время игры.
Наверное, если бы не было известной стратегии, ее пришлось бы искать подбором, по одному выискивая те действия или их комбинации, которые в среднем улучшают показатели в игре и говорят о ее продолжительности, например, не максимально достигнутую клетку, а количество сделанных ходов, или сумму схлопываний за все время игры.
К чему это все? К тому, что значения клеток можно рассматривать не как числовые значения, а как категориальные.А что, если использовать не использовать категории, а обратить значения?
Интересная мысль, кстати. Мне интересно услышать ваше мнение, что это может дать и почему это может улучшить результаты.
Написал ответ на коммент не там :(
Отличная статья!
Я бы еще снабдил агента штрафом за нарушение монотонности конструкции.
Как-то раз мне пришла в голову идея, что неплохо было бы научить нейронную сеть играть в змейку. И я использовал еще простой алгоритм поиска пути в графе как помощник для обучения. Может быть стоит для ускорения обучения предлагать варианты из некоторого простого алгоритма, который обучение не задействует?
Я некоторое время думал об оптимальной тактике сбора с целью получения максимального числа очков, и оказывается, что стандартный подход построения цепочки хотя и позволяет относительно спокойно дойти до 2048, но для дальнейшего увеличения нужно подход детализировать. Основная идея — сделать так, чтобы большую часть времени были доступны ходы в 3 направлениях, а не 2, и минимизировать вероятность необходимости сдвига в ненужном направлении. Такой алгоритм позволяет достигать 4096 с примерно 99% вероятностью, до 8192 с не меньше 50% и до 16384 с вероятностью не меньше 10% (можно вместо вероятности использовать среднее число ходов для которых надо было использовать механизм отмены для генерации нового числа в другом месте). Может напишу об этом алгоритме подробнее, если будет интерес.
Исходя из этого подхода, для обучения можно добавить 2 характеристики.
Первая — отклонение от цепочки в численной форме. Здесь можно выбрать много параметров отклонения, так что бы они отрегулировались затем. На основании этого можно получить одну единственную характеристику текущей позиции, так как для любой общей суммы ячеек оптимальная цепочка будет единственна.
Вторая — прогноз отклонений. Наличие варианта, когда будет неизбежен ход рушащий цепочку должно учитываться, соответственно должен быть прогноз на несколько ходов вперед.
ИМХО стремление к цепочке должно быть более важным, чем стремление соединять крупные ячейки с минимумом сдвигов.
Исходя из этого подхода, для обучения можно добавить 2 характеристики.
Первая — отклонение от цепочки в численной форме. Здесь можно выбрать много параметров отклонения, так что бы они отрегулировались затем. На основании этого можно получить одну единственную характеристику текущей позиции, так как для любой общей суммы ячеек оптимальная цепочка будет единственна.
Вторая — прогноз отклонений. Наличие варианта, когда будет неизбежен ход рушащий цепочку должно учитываться, соответственно должен быть прогноз на несколько ходов вперед.
ИМХО стремление к цепочке должно быть более важным, чем стремление соединять крупные ячейки с минимумом сдвигов.
Ваш комментарий заставил меня задуматься, и еще раз взглянуть на картинку с распределением действий. На ней видно, что на самом деле приоритетных направлений три, а не два. Да, оранжевая область со временем поглощает синюю, но не так сильно, как уменьшается зеленая. То есть возможно, тот подход с 3-мя действиями, который вы описали, алгоритм и уловил. И про стремление к составлению цепочек — хорошая мысль, думаю, что она действительно поможет существенно улучшить результаты. Спасибо за полезный комментарий!
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Головоломка для ИИ