Комментарии 15
На js квадратики учатся играть во флаппи берд) https://mkmatrix.github.io/flappynn.github.io/ где-то 300 поколений уходит)
Ага, я статью даж видал) https://habr.com/ru/articles/336612/
У меня кста сигимоида чот не работала.
А, если и бот — обучающаяся нейросетка,
то какие прогнозы обучения обеих агентов в этой модельной ситуации? :)
Почему именно генетика, а не, например, Q-learning?
Видел мельком, но подробно не изучал. С вашей подачи немного ознакомился) Как раз мой случай описан, про "аниматы", но с лучами-сенсорами. Делал до этого похожее на Q-learning - у сетки был выход на каждое возможное действие, выход с максимальным значением определял выбранное действие (может это и есть Q-learning? Хз, делал интуитивно). Результат мне не очень понравился, хоть он и удивил. А так - биологию люблю.
Вот туториал есть, если хотите попробовать: https://pytorch.org/tutorials/intermediate/reinforcement_q_learning.html
Я когда-то игрался, сейчас сам уже не помню ничего ?
Спасибо! Питон к сожалению не знаю - по "идеологическим" причинам) Я так понял - оценка должна быть каждый такт?
Просто для сетки не всегда известно, было ли действие в такте стратегически выгодным. Может быть так, что выгодное действие сейчас - приведет к поражению, и наоборот. Например, турецкий гамбит в шахматах, отдать ферзя ради победы. Это решается через алгоритм minmax, но минмакс требует расчета вообще всех возможных состояний игрового поля.
В этом и смысл обучения "без учителя", чтобы распространить вознаграждение "назад по времени". Грубо говоря, мы тренируем нейросеть не выбирать следующий ход, а предсказывать, как изменится ожидаемая награда после каждого возможного действия. На инференсе смотрим, какое действие даёт наилучшую ожидаемую награду, а потом его и применяем. Там много интересного ?
Для Q-learning нужен набор возможных действий, ведь так?
Сетке нужно определить направление и силу движения. У меня направление и сила движения в dobule, 64bit или 18446744073709551615 состояний для каждого параметра. Это 18446744073709551615 в квадрате = 340,282,366,920,938,463,426,481,119,284,349,108,225 состояний. Это 340 ундециллионов. Я же все верно рассчитал?
Да, сам по себе Q-learning используется для систем с маленьким дискретным пространством возможных действий. Но можно использовать actor-critic. Вот, кстати, курс есть: https://huggingface.co/learn/deep-rl-course/unit6/advantage-actor-critic
Не понимаю, как actor-critic может решить проблему огромного множества дискретных состояний? Я вижу решение лишь снижением размерности.
Просто actor будет предсказывать действие, как и сейчас у Вас он делает, а critic получать на вход действие+среда и считать награду. Соответственно, critic обучается на известной последовательности ходов, как в q-learning, а actor в связке с critiс, чтобы для заданного состояния среды максимизировать награду
Спасибо за разъяснение, понял.
Я кстати хотел a-c тоже использовать, с на уровне выше - как сознание или мышление, а - как рефлексы. Есть некий набор сетей рефлексов, с имеет некое множество "желаний" и определяет приоритеты. Скорее всего, рекуррентная сеть с ячейками памяти и угасающим сигналом. Но глубоко не вникал еще, пока не упрусь в ограничения текущей модели.
Тут нужно сделать жирный комментарий. Генетическим алгоритмам я посвятил лет 15, в основном разными исследованиями баловался. В результате пришел к таким выводам: в любой более-менее сложной задаче нужно закладывать 1 миллион вычислений целевой функции. Дальше смотрим время 1 вычисления и примерно поймем минимальное время нужное для подгонки. Задача должна быть не слишком овражной. Про плюсы и минусы не буду писать. Конкретно в твоем случае (нахождение оптимальных весов нейросети) я бы тебе посоветовал алгоритм имитации отжига (раз ты игнорируешь метод обратного распространения ошибки!). Имитация отжига тоже очень простой алгоритм и он в твоем случае может дать лучше результат.
Генетический алгоритм, нейросеть играет в догонялки