NEAT - нейроэволюционный алгоритм
Теги: machine-learning genetic pip python evol
Оригинальный алгоритм описан тут
NEAT предназначен для уменьшения размерности пространства поиска параметров посредством развития структуры нейросети в проуессе эволюции. Базовый алгоритм использует прямое кодирование генома, поэтому вычислительно затратен и не годится для построения больших сетей.
Основное преимущество метода - построеная сеть не нуждается в обучении обратным распространением ошибки, что уменьшает вычислительные затраты. Кроме того, эволюционно развиваемая топология сети позволяет построить структуру сч высокой емкостю информации. Нет необходимости в построении однородных слоев (как это делается в классических нейронных сетях), состоящих из нейронов с функциями активации одного типа. Значительно сокращается число параметров сети, что ведет к ее крайне высокой эффективности.
Недостаток - вычислительная сложность поиска оптимальной топологии.
Оригинальная статья, посвященная алгоритму
Следующий шаг в развитии NEAT - топология на основе гиперкуба. Алгоритм HyperNEAT строится на базе схемы косвенного кодирования генома (CPPN). HyperNEAT сохраняет паттерн связи сети-фенотипа в виде четырехмерного гиперкуба, где каждая точка кодирует связь между двумя узлами сети. Это позволяет компактно хранить множество паттернов, а кроме того использовать их повторно. Такой метод может использовать разные функции активации для своих скрытых узлов и выражать различные геометрические закономерности наблюдаемых данных. Сам гиперкуб (который принято назывть субстратом) может иметь предварительно выбранную геометрию, что улучшает скорость и эффективность обучения.
С HyperNEAT стало возможным строить очень большие сети. К недостатку метода можно отнести необходимость выбора начальной структуры субстрата инженером, что в целом задача нетривиальная и усложняет процесс успешного обучения.
Алгоритм es-HyperNEAT ведет развивает идею дальше. Используется развиваемый субстрат - вместо задания начального положения узлов в субстрате инженером. алгоритм оценивает плотность распределения информации в субстрате в процессе обучения. В участках с плотностью, превышщающей пороговую и размещаются узлы. Такой подход открывает дорогу к самообучаемым сетям, способным находить оптимальную топологию в процессе эволюции без точной инициализвации субстрата.
Библиотеки
- NEAT-python
- PyTorch-NEAT
- TensorFlow-NEAT
- MultiNEAT - к сожалению документация проекта на сайте не доступна
- deep-neuroevolution
- Pure Python Library for ES-HyperNEAT. Contains implementations of HyperNEAT and ES-HyperNEAT
Коллекция, состоящая из оригинального алгоритма NEAT и большинства его имплементаций (включая multineat и все остальное семейство), известных к настоящему моменту: Find the Right Version of NEAT for Your Needs
Еще про эволюционные методы:
- [deap]
- [deap-docs]
- [evolution-methods]
- Neuroevolution of augmenting topologies wiki
- HyperNEAT wiki