Обучаем нейронные сети нейронными сетями
Сделал второй подход к снаряду, осуществил с помощью ИИ-агента мою изначальную задумку: игра GhostRabbit (клон Doodle Jump) на Rust с ботом на нейросети. С первой попытки мне удалось сделать только сам перевод оригинального проекта, написанного мной на первом курсе универа. А вот вторую часть, написать бота на нейросети с обучением через генетический алгоритм (ГА) - нет. После доработки в игре появился бот, которого можно обучить с нуля за пару минут.
Идея добавить нейросеть и ГА навеяна тоже универом, у нас на пятом курсе были такие лабы по нейросетям с более простыми задачами, не ботами для игр. Сам я этого сделать не смог, бот был необучаем. Пришлось данную фичу вырезать. Делать нейросеть - это искусство и требует кучу знаний, а главное, опыта. Написать примитивы: нейрон, слой, сети и обучение с обратным распространением не сложно, это все лежало у меня в репозитории, как черновик. А вот выбрать входы, значимость сигналов начальную, сколько слоев и нейронов, это уже сложно и нужно проводить кучу экспериментов. В этом и помогает агент. Например, Claude выяснил, что мой старый бот смотрел на две самые нижние платформы, то есть себе под ноги. Одна замена входов подняла счет с нуля до 200 очков.
Claude перепробовал десятки разных гипотез: одна/две сети; обучение ГА, обратным распространением; разные оценки фитнеса; конфигурация сетей. В итоге сработал подход с двумя сетями: “глаза” учатся с учителем, их выходы идут на вход второй сети “мозг” с обучением ГА. Учителем была сама копия игры: она проигрывает несколько кадров вперед и показывает, где кролик умрет. Все исследование заняло около 9 дней. Сам бы я долго до этого доходил и скорее всего бы не дошел, что и остановило меня пару лет назад.
После первых экспериментов у Claude получился рабочий PoC сети. На этом было останавливаться рано, так как впереди была следующая проблема: нужна не какая-то сеть, а оптимальная, с меньшей тратой ресурсов.
Мне это было важно, так как в игре задумал два режима: выбор предобученных весов и обучение сети в runtime. Пользователя ждать долго заставлять нельзя, поэтому все должно быть вылизано: обучаться до нормального уровня за минимально возможное процессорное время.
Своей цели я достиг. Новый бот живет больше минуты и набирает около 2к+ очков. Можно заценить онлайн. В браузере на одном потоке прекрасно работает. Полное обучение с нуля занимает около 2-3 минут.
Где еще полезен агент, помимо обучения сети
Не GhostRabbit единым, у меня есть и другие пет-проекты на гитхабе, в которых агент может быть полезен. Ниже приведу несколько занимательных случаев:
- В GhostRabbit агент попутно нашел баг, который жил в проекте около 15 лет, еще с университетской версии на C#. Как полагается багу, он правился одной строчкой и был допущен из-за невнимательности. Монстр появлялся сбоку, получал скорость NaN из-за корня от отрицательного числа, становился невидимым и все равно убивал кролика на краю экрана.
- Claude помог обRust’ить box2d-lite, который я переписал дословно с C++ в Rust. Плюс поправил баг, где я в формуле пропустил одну букву, и у меня коллизии считались неверно, предметы друг через друга проваливались иногда.
- GhostRabbit и box2d-lite оба написаны на Rust и поддерживают автомасштабирование под окно с сохранением пропорций рабочей области. В крейтах winit/macroquad такой логики нет, и я итеративно сделал свое решение. Но вышло довольно запутанно, я оставил это на доработку. В этот заход с Claude хоп - и новая версия этого решения готова и доработана.
- С CI гитхаба Claude помогает на 5+. Очень легко прикручивать сборку в Actions, добавлять dependabot, обновлять версии зависимостей у своего проекта. Так что вся работа по поддержанию проекта теперь стоит ноль.
- В проекте по трендовушкам на MOEX Claude делает ежемесячный апдейт котировок и дивидендов, сверяет дивы по разным источникам и работает неаффилированным консультантом по портфелю. Об этом я уже упоминал.
Вывод
Так как с агентами я программирую каждый день, то могу сказать, что кодинг вышел на новый уровень. Но после доработки GhostRabbit я думаю, что исследования получили более мощный буст. Проверка гипотез, оформление результатов стоят около нуля. Помню, что кто-то на обучениях нейросетей дипломы делал в магистратуре. Так вот этот диплом можно сделать за пару дней сейчас. Завидую ученым и студентам, насколько продуктивнее теперь можно проводить исследования.