Jak powinienem zakodować strukturę sieci neuronowej w genomie?

14

Aby uzyskać deterministyczną przestrzeń problemową, muszę znaleźć sieć neuronową o optymalnej strukturze węzła i łącza. Chcę użyć algorytmu genetycznego do symulacji wielu sieci neuronowych, aby znaleźć najlepszą strukturę sieci dla problematycznej dziedziny.

Nigdy wcześniej nie używałem algorytmów genetycznych do takich zadań. Jakie są praktyczne względy? W szczególności, jak powinienem zakodować strukturę sieci neuronowej w genomie?

Mityczny
źródło

Odpowiedzi:

12

Sekcja 4.2 „Podstawy metaheurystyki” zawiera wiele informacji na temat alternatywnych sposobów kodowania struktur grafów za pomocą algorytmów genetycznych.

W szczególności w odniesieniu do rozwijających się ANN, osobiście nie byłbym skłonny do wdrażania tego rodzaju „od zera”:

Dziedzina neuroewolucji istnieje już od jakiegoś czasu, a wdrożenie niektórych metod, takich jak neuroewolucja rozszerzających topologii ( NEAT ), obejmuje teraz wyniki wielu praktycznych doświadczeń.

Zgodnie z powyższym linkiem:

Opracowaliśmy także rozszerzenie do NEAT o nazwie HyperNEAT, które może ewoluować sieci neuronowe z milionami połączeń i wykorzystywać geometryczne prawidłowości w dziedzinie zadań. Strona HyperNEAT zawiera linki do publikacji i ogólne wyjaśnienie tego podejścia.

NietzscheanAI
źródło
To „Essentials of Metaheuristics” wygląda bardzo interesująco! Jest to coś, co faktycznie znajduje się w mapie drogowej dla automatów M, ponieważ czysty MCTS nigdy nie jest optymalny w grach M. Z metaheurystycznej wiki : „W informatyce i optymalizacji matematycznej metaheurystyka to procedura wyższego poziomu lub heurystyka przeznaczona do wyszukiwania, generowania lub wybierania heurystyki (algorytmu częściowego wyszukiwania), która może zapewnić wystarczająco dobre rozwiązanie problemu optymalizacji, zwłaszcza z niepełnymi lub niedokładnymi informacjami lub ograniczoną zdolnością obliczeniową. ”
DukeZhou
4

Wykorzystanie algorytmów ewolucyjnych do ewolucji sieci neuronowych nazywa się neuroewolucją .

Niektóre algorytmy neuroewolucji optymalizują tylko masy sieci neuronowej o stałej topologii. To nie brzmi jak chcesz. Inne algorytmy neuroewolucji optymalizują zarówno wagi, jak i topologię sieci neuronowej. Tego rodzaju algorytmy wydają się bardziej odpowiednie dla twoich celów i są czasami nazywane TWEANN (topologią i sieciami neuronowymi zmieniającymi wagę).

Jeden popularny algorytm nazywa się NEAT i prawdopodobnie jest dobrym miejscem do rozpoczęcia, choćby dlatego, że istnieje wiele implementacji, z których jedna, mam nadzieję, jest napisana w twoim ulubionym języku. To przynajmniej dałoby podstawę do pracy.

NEAT koduje genom sieci neuronowej bezpośrednio jako strukturę grafu. Mutacje mogą działać na strukturze sieci, dodając nowe łącza (łącząc dwa węzły, które wcześniej nie były połączone) lub nowe węzły (dzieląc istniejące połączenie), lub mogą działać tylko po zmianie wag związanych z krawędziami na wykresach (zwanych mutacjami ciężary). Aby dać ci wyobrażenie o rzędzie wielkości ANN, z którymi współpracuje ten konkretny algorytm, prawdopodobnie walczyłby z więcej niż 100 lub 200 węzłami.

Istnieją bardziej skalowalne TWEANN, ale są one bardziej złożone i przyjmują założenia dotyczące rodzajów generowanych przez nie struktur, które nie zawsze mogą być produktywne w praktyce. Na przykład innym sposobem kodowania struktury sieci neuronowej jest iloczyn wzorca początkowego, który jest wielokrotnie rozszerzany przez gramatykę (np. System L). O wiele łatwiej możesz eksplorować większe struktury, ale ponieważ są one generowane przez gramatykę, będą miały charakterystyczny, powtarzalny charakter. HyperNEAT jest popularnym rozszerzeniem NEAT, które przyjmuje inne założenia (że wzory ciężarów mogą być łatwo wyrażone jako funkcja geometrii) i może być skalowane do ANN z milionami połączeń, gdy to założenie dobrze pasuje do konkretnej dziedziny.

Istnieje kilka artykułów ankietowych połączonych w górnym linku, jeśli chcesz zaobserwować większą różnorodność technik.

Joel Lehman
źródło