Про симуляцию эволюции - я думал что это приключение на 20 минут, что самым сложным была физика, но оказалось нет. Я написал модуль для нейросети, сделал эволюцию, запускаю её и... Нифига, оно не обучается. Дай бог делает один поворот и всё.
В прошлом посте можно видеть что были зелёные круги - они означают награду, при их пересечении даётся +1. И вот с помощью эволюции пытался максимизировать это число. Была идея что оно само сможет, лёгкая же задача.
Поэтому начал с того чтобы сделать эту награду более гладкой: добавил расстояние до следующей награды, и замеряю его. Не помогло.
Сделал чтобы машинка всегда стартовала с некоторым небольшим случайным смещением и направлением, чтобы сделать итог более гладким. Сделал чтобы таких запусков было несклько в одной оценке нейронки. Не помогло.
Сделал визуальный редактор трасс - первая анимация. На нём сделал кучу трасс с гладкими поворотами, резкими поворотами, движением по прямой, несколько поворотов, и ещё отразил всё зеркально. Не помогло.
Поменял алгоритм оптимизации на очень крутой CMA-ES, оставлял долго работать. Не помогло.
Менял туда-сюда десяток параметров награды, размеров сети, управления. Не помогло.
Даже функцию активации поменял! Не помогло.
И ведь если погуглить как люди обучают машинки ездить, то всё у них так просто получается, они берут и ездят сразу.Почему он, а не я! Что я делаю не так? Не может быть же так что я настолько туп, что у меня ничего не получается. Начал подсматривать, у них вообще за десяток поколений всё сходилось.
И только в этот момент до меня дошло, что я всё делал правильно, за исключением, что моя задача слишком сложна. Нейронка не может из неё научиться по такому малому числу трасс и вообще. Ну разве, если что сделать 100500 очень разнообразных трасс. Или сделать чтобы нейронка сначала научилась не проходить трассы, а управлять своим телом, хммм. И тут вспоминается данное видео про двойной маятник, там у автора тоже обучение никак не шло, и он решил усложнять задачу постепенно.
Я подумал что последнее что я не твикал - это сложность управления. Ведь у меня такая сложная физика, дрифты там, повороты, инерция (!). Может быть нейронка просто никак не может выучить как этим пользоваться? Минимизировал физику до абсурда: просто дал нейронке возможность разворачивать угол и двигаться вперёд. Никакой инерции и колёс.
И о чудо, обучение пошло!!!! На второй картинке можно видеть дебажный вывод который я использовал, чтобы понять сколько трасс пройдено. И она прошла ВСЕ! Посмотрите как эта она ездит по трассе. Не знаю почему, но напоминает мышку (крадёться). Два дня писал код по 14 часов и НАКОНЕЦ-ТО, ОНО РАБОТАЕТ!!!
Теперь я знаю что надо делать - надо постепенно увеличивать сложность. Сделаю чтобы в физике были отключаемые элементы, и потихоньку, через параметры буду их включать.
#машинки
В прошлом посте можно видеть что были зелёные круги - они означают награду, при их пересечении даётся +1. И вот с помощью эволюции пытался максимизировать это число. Была идея что оно само сможет, лёгкая же задача.
Поэтому начал с того чтобы сделать эту награду более гладкой: добавил расстояние до следующей награды, и замеряю его. Не помогло.
Сделал чтобы машинка всегда стартовала с некоторым небольшим случайным смещением и направлением, чтобы сделать итог более гладким. Сделал чтобы таких запусков было несклько в одной оценке нейронки. Не помогло.
Сделал визуальный редактор трасс - первая анимация. На нём сделал кучу трасс с гладкими поворотами, резкими поворотами, движением по прямой, несколько поворотов, и ещё отразил всё зеркально. Не помогло.
Поменял алгоритм оптимизации на очень крутой CMA-ES, оставлял долго работать. Не помогло.
Менял туда-сюда десяток параметров награды, размеров сети, управления. Не помогло.
Даже функцию активации поменял! Не помогло.
И ведь если погуглить как люди обучают машинки ездить, то всё у них так просто получается, они берут и ездят сразу.
И только в этот момент до меня дошло, что я всё делал правильно, за исключением, что моя задача слишком сложна. Нейронка не может из неё научиться по такому малому числу трасс и вообще. Ну разве, если что сделать 100500 очень разнообразных трасс. Или сделать чтобы нейронка сначала научилась не проходить трассы, а управлять своим телом, хммм. И тут вспоминается данное видео про двойной маятник, там у автора тоже обучение никак не шло, и он решил усложнять задачу постепенно.
Я подумал что последнее что я не твикал - это сложность управления. Ведь у меня такая сложная физика, дрифты там, повороты, инерция (!). Может быть нейронка просто никак не может выучить как этим пользоваться? Минимизировал физику до абсурда: просто дал нейронке возможность разворачивать угол и двигаться вперёд. Никакой инерции и колёс.
И о чудо, обучение пошло!!!! На второй картинке можно видеть дебажный вывод который я использовал, чтобы понять сколько трасс пройдено. И она прошла ВСЕ! Посмотрите как эта она ездит по трассе. Не знаю почему, но напоминает мышку (крадёться). Два дня писал код по 14 часов и НАКОНЕЦ-ТО, ОНО РАБОТАЕТ!!!
Теперь я знаю что надо делать - надо постепенно увеличивать сложность. Сделаю чтобы в физике были отключаемые элементы, и потихоньку, через параметры буду их включать.
#машинки
tgoop.com/optozorax_dev/707
Create:
Last Update:
Last Update:
Про симуляцию эволюции - я думал что это приключение на 20 минут, что самым сложным была физика, но оказалось нет. Я написал модуль для нейросети, сделал эволюцию, запускаю её и... Нифига, оно не обучается. Дай бог делает один поворот и всё.
В прошлом посте можно видеть что были зелёные круги - они означают награду, при их пересечении даётся +1. И вот с помощью эволюции пытался максимизировать это число. Была идея что оно само сможет, лёгкая же задача.
Поэтому начал с того чтобы сделать эту награду более гладкой: добавил расстояние до следующей награды, и замеряю его. Не помогло.
Сделал чтобы машинка всегда стартовала с некоторым небольшим случайным смещением и направлением, чтобы сделать итог более гладким. Сделал чтобы таких запусков было несклько в одной оценке нейронки. Не помогло.
Сделал визуальный редактор трасс - первая анимация. На нём сделал кучу трасс с гладкими поворотами, резкими поворотами, движением по прямой, несколько поворотов, и ещё отразил всё зеркально. Не помогло.
Поменял алгоритм оптимизации на очень крутой CMA-ES, оставлял долго работать. Не помогло.
Менял туда-сюда десяток параметров награды, размеров сети, управления. Не помогло.
Даже функцию активации поменял! Не помогло.
И ведь если погуглить как люди обучают машинки ездить, то всё у них так просто получается, они берут и ездят сразу.Почему он, а не я! Что я делаю не так? Не может быть же так что я настолько туп, что у меня ничего не получается. Начал подсматривать, у них вообще за десяток поколений всё сходилось.
И только в этот момент до меня дошло, что я всё делал правильно, за исключением, что моя задача слишком сложна. Нейронка не может из неё научиться по такому малому числу трасс и вообще. Ну разве, если что сделать 100500 очень разнообразных трасс. Или сделать чтобы нейронка сначала научилась не проходить трассы, а управлять своим телом, хммм. И тут вспоминается данное видео про двойной маятник, там у автора тоже обучение никак не шло, и он решил усложнять задачу постепенно.
Я подумал что последнее что я не твикал - это сложность управления. Ведь у меня такая сложная физика, дрифты там, повороты, инерция (!). Может быть нейронка просто никак не может выучить как этим пользоваться? Минимизировал физику до абсурда: просто дал нейронке возможность разворачивать угол и двигаться вперёд. Никакой инерции и колёс.
И о чудо, обучение пошло!!!! На второй картинке можно видеть дебажный вывод который я использовал, чтобы понять сколько трасс пройдено. И она прошла ВСЕ! Посмотрите как эта она ездит по трассе. Не знаю почему, но напоминает мышку (крадёться). Два дня писал код по 14 часов и НАКОНЕЦ-ТО, ОНО РАБОТАЕТ!!!
Теперь я знаю что надо делать - надо постепенно увеличивать сложность. Сделаю чтобы в физике были отключаемые элементы, и потихоньку, через параметры буду их включать.
#машинки
В прошлом посте можно видеть что были зелёные круги - они означают награду, при их пересечении даётся +1. И вот с помощью эволюции пытался максимизировать это число. Была идея что оно само сможет, лёгкая же задача.
Поэтому начал с того чтобы сделать эту награду более гладкой: добавил расстояние до следующей награды, и замеряю его. Не помогло.
Сделал чтобы машинка всегда стартовала с некоторым небольшим случайным смещением и направлением, чтобы сделать итог более гладким. Сделал чтобы таких запусков было несклько в одной оценке нейронки. Не помогло.
Сделал визуальный редактор трасс - первая анимация. На нём сделал кучу трасс с гладкими поворотами, резкими поворотами, движением по прямой, несколько поворотов, и ещё отразил всё зеркально. Не помогло.
Поменял алгоритм оптимизации на очень крутой CMA-ES, оставлял долго работать. Не помогло.
Менял туда-сюда десяток параметров награды, размеров сети, управления. Не помогло.
Даже функцию активации поменял! Не помогло.
И ведь если погуглить как люди обучают машинки ездить, то всё у них так просто получается, они берут и ездят сразу.
И только в этот момент до меня дошло, что я всё делал правильно, за исключением, что моя задача слишком сложна. Нейронка не может из неё научиться по такому малому числу трасс и вообще. Ну разве, если что сделать 100500 очень разнообразных трасс. Или сделать чтобы нейронка сначала научилась не проходить трассы, а управлять своим телом, хммм. И тут вспоминается данное видео про двойной маятник, там у автора тоже обучение никак не шло, и он решил усложнять задачу постепенно.
Я подумал что последнее что я не твикал - это сложность управления. Ведь у меня такая сложная физика, дрифты там, повороты, инерция (!). Может быть нейронка просто никак не может выучить как этим пользоваться? Минимизировал физику до абсурда: просто дал нейронке возможность разворачивать угол и двигаться вперёд. Никакой инерции и колёс.
И о чудо, обучение пошло!!!! На второй картинке можно видеть дебажный вывод который я использовал, чтобы понять сколько трасс пройдено. И она прошла ВСЕ! Посмотрите как эта она ездит по трассе. Не знаю почему, но напоминает мышку (крадёться). Два дня писал код по 14 часов и НАКОНЕЦ-ТО, ОНО РАБОТАЕТ!!!
Теперь я знаю что надо делать - надо постепенно увеличивать сложность. Сделаю чтобы в физике были отключаемые элементы, и потихоньку, через параметры буду их включать.
#машинки
BY dev optozorax
Share with your friend now:
tgoop.com/optozorax_dev/707