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

В этой статье будет рассмотрена основная интуиция, стоящая за этими алгоритмами, с использованием набора основных функций Python и построением с нуля.

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

Базовой единицей анализа будет хромосома, более причудливое слово для любой структуры данных, которая кодирует возможное решение рассматриваемой проблемы. Хромосома может быть строкой, массивом, списком и т. д. У человека также есть показатель пригодности; это число, которое показывает, насколько хорошим решением проблемы является этот человек.

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

В этом примере ген будет представлен битом. У каждого человека будет набор генов, которые будут целочисленными значениями.

Популяция представляет собой совокупность особей. Мы будем рассматривать популяцию как список структур данных, используемых для выполнения операций скрещивания и мутации.

Кроссовер, или скрещивание двух родителей для производства ребенка, будет операцией случайного выбора генов от обоих родителей.

Операция мутации — это случайное изменение в хромосоме ребенка, которое будет просто случайным образом инвертировать один из битов или генов.

Общий генетический алгоритм более прост, чем обратное распространение, основанное на градиентном спуске, используемом в глубоких нейронных сетях.

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

Давайте начнем сценарий завода, где набор датчиков установлен на производственной линии. Значение одного из всех девяти датчиков укажет на оптимальную работу завода. Следовательно, в этом случае мы будем использовать генетический алгоритм, чтобы найти все свое пространство из всех жизнеспособных популяций.

Начнем с создания двух хромосом и записи функции кроссовера. Фитнес-функция самая высокая для всех. Операция мутации будет случайным образом инвертировать гены или биты в зависимости от предоставленной скорости мутации.

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

Выход колеблется между значениями и никогда не сходится к 1 из-за случайного выбора. Тем не менее, мы по-прежнему являемся одним из важнейших компонентов родительского отбора, который заставляет работать случайность, чтобы соединиться с окончательным решением.

Давайте напишем функцию для сортировки пригодности в популяции и выбора родителя для кроссовера. Я просто выберу двух наиболее приспособленных родителей из популяции во время каждого цикла или итерации и добавлю ребенка в текущую популяцию.

Теперь запустите обучающий цикл на 50 итераций, и на этот раз алгоритм сойдется к лучшему решению в популяции.

В целом приведенный выше пример может показаться немного надуманным, однако он просто иллюстрирует процесс обучения генетических алгоритмов. Хромосома, описанная в примере, может быть расширена для более сложных структур данных и приложений, а также для функции пригодности. Для более продвинутых вариантов использования можно использовать фреймворки генетических вычислений, такие как DEAP для python.