Любой, кто имеет значительный опыт работы с нейронными сетями, хорошо осведомлен о сложности выбора правильных гиперпараметров для решаемой задачи, а также о большом количестве времени, которое может потребоваться сети для изучения функций. Но не все из этих людей экспериментировали с мощным решением - генетическими алгоритмами (GA).

Для непосвященных генетические алгоритмы вдохновлены теорией естественного отбора Чарльза Дарвина и отражают идею выживания наиболее приспособленных людей. Они имитируют биологические принципы, чтобы найти лучших людей. Следовательно, ГА традиционно используются для поиска лучших решений проблем оптимизации или поиска.

В процессе ГА наиболее приспособленные особи отбираются из популяции с использованием функции приспособленности, и их потомки производятся. Эти потомки наследуют хорошие перекрестные характеристики от своих родителей и лучше (то есть более приспособлены), чем они, поэтому имеют больше шансов на выживание. Потомство - это следующее поколение, из которого снова отбираются наиболее приспособленные особи, и процесс продолжается. В конце концов, выживают сильнейшие.

Наряду с этими основными этапами в каждом поколении происходит мутация (случайное изменение характеристик) для поддержания разнообразия и случайности.

Эта концепция применяется к задачам поиска, потому что, учитывая набор решений проблемы, ГА может определить лучшее из них. Теперь, если бы мы заменили совокупность людей разными гиперпараметрами для данной нейронной сети, мы могли бы узнать лучшие гиперпараметры для данной задачи.

Подробнее об основах ГА здесь.

Итак, если бы нужно было применить GA к нейронным сетям, шаги были бы такими:

  1. Создавайте несколько нейронных сетей с их собственными гиперпараметрами как отдельные лица популяции и обучайте их.
  2. Найдите две хорошо работающие сети на основе их стоимости (наименее затратные - наиболее приспособленные) и создайте дочерний элемент с некоторыми характеристиками из первой сети и некоторыми из второй сети.
  3. Произвольно изменяйте некоторые характеристики.
  4. Выполните шаги 2–3 для всего населения и создайте сети нового поколения.

Эта последовательность, в конце концов, даст сеть лучше, чем в предыдущих поколениях.

Вы можете спросить, если ГА действительно являются ключом к получению оптимальных гиперпараметров, то почему они не используются широко? Загвоздка - огромная вычислительная мощность и время, необходимое для запуска GA с нейронными сетями. Настолько, что в основном крупные компании могут себе это позволить.

Тем не менее, в настоящее время осуществляется ряд проектов по глубоким нейронным сетям, связанным с ГА.

Интересная область применения - беспилотные автомобили. NeuroEvolution on Autonomous Car Pathing - крутой проект, который пытается научить машину ехать по кругу. В этом случае функция фитнеса рассматривает сети, которые минимизировали время круга. Это было сделано путем присвоения оценок сетям на основе миллисекунд, которые потребовались либо для сбоя, либо для прохождения круга. Со временем модель учится перемещаться по кругу, причем автомобиль делает первый поворот к 20-му поколению и завершает круг к 35-му поколению. Следующие поколения значительно сокращают время круга. Другой подобный проект Йохана Элиассона отлично подходит для понимания работы GA.

Исследовательская статья в Journal of Electrical and Computer Engineering (Hindawi), Эксперимент по использованию генетических алгоритмов для выбора топологии в глубоком обучении,

сосредоточился на производительности генетических алгоритмов с нейронными сетями на наборах данных MNIST и CIFAR-10 с использованием Caffe. В статье четко подчеркивается, что GA обеспечивают лучшую точность, чем другие алгоритмы поиска, применяемые к набору решений.

PyBrain - это модульная библиотека машинного обучения для Python, которая предоставляет алгоритмы для нейронных сетей, обучение без учителя, обучение с подкреплением и эволюционные алгоритмы, такие как GA. Он использует концепцию оптимизации черного ящика. Однако документации по PyBrain не так много, но есть надежда, что это упростит объединение GA с глубоким обучением в будущем.

Между тем, любопытным я предлагаю использовать Intel Distribution for Python для ускорения обработки. Это может помочь в многопоточности, а также ускорить работу других ключевых библиотек, таких как NumPy, SciPy и scikit-learn.

Вот еще несколько ссылок, которые помогут вам начать работу:

Https://towardsdatascience.com/artificial-neural-networks-optimization-using-genetic-algorithm-with-python-1fe8ed17733e

Https://github.com/harvitronix/neural-network-genetic-algorithm

Https://github.com/aqibsaeed/Genetic-Algorithm-RNN

Использованная литература:





Https://www.nature.com/articles/srep37616

Http://mitchvollebregt.com/neuroevolution-on-autonomous-car-pathing/

Https://www.youtube.com/watch?v=wL7tSgUpy8w

Https://www.hindawi.com/journals/jece/2019/3217542/

Http://pybrain.org/

Https://software.intel.com/en-us/distribution-for-python

Https://towardsdatascience.com/artificial-neural-networks-optimization-using-genetic-algorithm-with-python-1fe8ed17733e

Https://github.com/harvitronix/neural-network-genetic-algorithm

Https://github.com/aqibsaeed/Genetic-Algorithm-RNN