Niedawno przeczytałem naprawdę ciekawy wpis na blogu Google Research Blog o sieci neuronowej. Zasadniczo wykorzystują te sieci neuronowe do rozwiązywania różnych problemów, takich jak rozpoznawanie obrazów. Używają algorytmów genetycznych do „ewolucji” ciężarów aksonów.
Więc w zasadzie mój pomysł jest następujący. Gdybym miał napisać program, który rozpoznaje liczby, nie wiedziałbym, jak zacząć (mógłbym mieć jakiś niejasny pomysł, ale mam na myśli to, że nie jest to trywialne ani łatwe.) Ale używając sieci neuronowej nie muszę. Tworząc odpowiedni kontekst, aby sieć neuronowa mogła się rozwijać, moja sieć neuronowa „znajdzie właściwy algorytm”. Na dole cytowałem naprawdę interesującą część artykułu, w której wyjaśniają, w jaki sposób każda warstwa ma inną rolę w procesie rozpoznawania obrazu.
Jednym z wyzwań sieci neuronowych jest zrozumienie, co dokładnie dzieje się na każdej warstwie. Wiemy, że po treningu każda warstwa stopniowo wyodrębnia funkcje obrazu na wyższym i wyższym poziomie, aż ostatnia warstwa zasadniczo podejmie decyzję o tym, co pokazuje obraz. Na przykład pierwsza warstwa może szukać krawędzi lub narożników. Warstwy pośrednie interpretują podstawowe funkcje w poszukiwaniu ogólnych kształtów lub komponentów, takich jak drzwi lub skrzydło. Kilka ostatnich warstw składa je w kompletne interpretacje - neurony te aktywują się w odpowiedzi na bardzo złożone rzeczy, takie jak całe budynki lub drzewa.
Zasadniczo moje pytanie brzmi: czy nie moglibyśmy użyć algorytmów genetycznych + sieci neuronowych w celu rozwiązania każdego problemu NP? Po prostu tworzymy właściwy kontekst ewolucyjny i pozostawiamy „naturze” znalezienie rozwiązania.
Incepcjonizm: coraz głębiej w sieci neuronowe
EDYCJA: Wiem, że możemy użyć Brute-Force lub znaleźć nieefektywne rozwiązanie w wielu przypadkach. Dlatego staram się podkreślić rozwijające się sztuczne sieci neuronowe. Jak powiedziałem w komentarzu: Mając wystarczającą ilość czasu i odpowiedni wskaźnik mutacji, możemy znaleźć optymalne rozwiązanie (a przynajmniej tak myślę).