Как я должен кодировать структуру нейронной сети в геном?

14

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

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

Mithical
источник

Ответы:

12

Раздел 4.2 «Основы метаэвристики» содержит обширную информацию об альтернативных способах кодирования графовых структур с помощью генетических алгоритмов.

Что касается развития ANN, лично я не был бы склонен реализовывать такие вещи «с нуля»:

Область нейроэволюции существует уже некоторое время, и внедрение некоторых методов, таких как Neuroevolution of Augmenting Topologies ( NEAT ), теперь включает результаты большого практического опыта.

По вышеуказанной ссылке:

Мы также разработали расширение NEAT под названием HyperNEAT, которое может развивать нейронные сети с миллионами соединений и использовать геометрические закономерности в области задач. Страница HyperNEAT содержит ссылки на публикации и общее объяснение подхода.

NietzscheanAI
источник
Это «Основы метаэвристики» выглядит очень интересно! Это то, что на самом деле входит в план развития M-автоматов, поскольку чистая MCTS никогда не бывает оптимальной в M-играх. Из метаэвристической вики : «В информатике и математической оптимизации метаэвристика - это процедура или эвристика более высокого уровня, предназначенная для поиска, генерации или выбора эвристики (алгоритм частичного поиска), которая может обеспечить достаточно хорошее решение проблемы оптимизации, особенно с неполной или несовершенной информацией или ограниченными вычислительными возможностями. "
DukeZhou
4

Использование эволюционных алгоритмов для развития нейронных сетей называется нейроэволюцией .

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

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

NEAT кодирует геном нейронной сети непосредственно в виде структуры графа. Мутации могут воздействовать на структуру сети, добавляя новые ссылки (соединяя два ранее не подключенных узла) или новые узлы (разделяя существующее соединение), или могут воздействовать только на изменение весов, связанных с ребрами в графах (так называемые мутации). веса). Чтобы дать вам представление о порядке размеров ANN, с которыми работает этот конкретный алгоритм, он, вероятно, будет бороться с более чем 100 или 200 узлами.

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

В верхней ссылке есть несколько обзоров, если вы хотите увидеть более разнообразные методы.

Джоэл Леман
источник