Для детерминированного проблемного пространства мне нужно найти нейронную сеть с оптимальной структурой узлов и связей. Я хочу использовать генетический алгоритм для моделирования многих нейронных сетей, чтобы найти наилучшую структуру сети для проблемной области.
Я никогда раньше не использовал генетические алгоритмы для такой задачи. Каковы практические соображения? В частности, как я должен кодировать структуру нейронной сети в геном?
Использование эволюционных алгоритмов для развития нейронных сетей называется нейроэволюцией .
Некоторые алгоритмы нейроэволюции оптимизируют только веса нейронной сети с фиксированной топологией. Это звучит не так, как вы хотите. Другие алгоритмы нейроэволюции оптимизируют как вес, так и топологию нейронной сети. Подобные алгоритмы кажутся более подходящими для ваших целей, и их иногда называют TWEANN (топология и нейронные сети с эволюцией веса).
Один популярный алгоритм называется NEAT , и, вероятно, это хорошее место для начала, хотя бы потому, что существует множество реализаций, одна из которых, надеюсь, написана на вашем любимом языке. Это, по крайней мере, даст вам основу для работы.
NEAT кодирует геном нейронной сети непосредственно в виде структуры графа. Мутации могут воздействовать на структуру сети, добавляя новые ссылки (соединяя два ранее не подключенных узла) или новые узлы (разделяя существующее соединение), или могут воздействовать только на изменение весов, связанных с ребрами в графах (так называемые мутации). веса). Чтобы дать вам представление о порядке размеров ANN, с которыми работает этот конкретный алгоритм, он, вероятно, будет бороться с более чем 100 или 200 узлами.
Существуют более масштабируемые TWEANN, но они более сложны и предполагают, какие структуры они генерируют, что не всегда может быть продуктивным на практике. Например, другой способ кодирования структуры нейронной сети - это произведение начального шаблона, который многократно расширяется грамматикой (например, L-системой). Вы можете намного легче исследовать более крупные структуры, но поскольку они генерируются грамматикой, они будут иметь характерное самоповторяющееся чувство. HyperNEAT является популярным расширением NEAT, которое делает предположения другого рода (что модели весов могут быть легко выражены как функция геометрии) и может масштабироваться до ANN с миллионами соединений, когда это предположение хорошо соответствует конкретной области.
В верхней ссылке есть несколько обзоров, если вы хотите увидеть более разнообразные методы.
источник