Każda przykładowa sieć neuronowa do rozpoznawania obrazów, o której czytałem, wytwarza prostą odpowiedź „tak” lub „nie”. Jeden węzeł wyjściowy odpowiada „Tak, to jest ludzka twarz”, a drugi odpowiada „Nie, to nie jest ludzka twarz”.
Rozumiem, że jest to prawdopodobne ze względu na prostotę wyjaśnienia, ale zastanawiam się, w jaki sposób można zaprogramować taką sieć neuronową, aby uzyskać bardziej konkretny wynik. Załóżmy na przykład, że klasyfikowałem zwierzęta. Zamiast słowa „Zwierzę” lub „Nie zwierzę”, chciałbym uzyskać odpowiedzi takie jak „Pies”, „Ryba”, „Ptak”, „Wąż” itp., A jeden końcowy węzeł wyjściowy to „Nie zwierzę / nie rozpoznaj tego ”.
Jestem pewien, że to musi być możliwe, ale mam problem ze zrozumieniem, w jaki sposób. Wydaje się, że jest to spowodowane algorytmem szkoleniowym wstecznego propagowania błędu, gdy trenujesz jeden węzeł wyjściowy (tj. „To jest pies”) i zmieniane są wagi neuronów, a następnie idealny stan dla innego węzła wyjściowego, który poprzednio wyszkoleni (tzn. „To jest ptak”) zaczną się odchylać i odwrotnie. Zatem przeszkolenie sieci w rozpoznawaniu jednej kategorii spowodowałoby sabotaż każdego szkolenia przeprowadzonego dla innej kategorii, ograniczając nas w ten sposób do prostego projektu „Tak” lub „Nie”.
Czy to uniemożliwia takie rozpoznawanie? A może źle rozumiem algorytm? Jedyne dwie rzeczy, o których mogę myśleć, to:
Albo możemy wyszkolić jedną sieć neuronową dla każdej rzeczy, którą chcemy sklasyfikować, i w jakiś sposób wykorzystać je do zbudowania większej super-sieci (na przykład sieć dla „psa”, sieć dla „ptaka” itp. dodać razem, aby utworzyć super-sieć dla „zwierząt”); lub,
Stwórz absurdalnie skomplikowaną metodologię treningu, która wymagałaby niewiarygodnie zaawansowanej matematyki i w jakiś sposób wytworzyłaby idealny stan masy neuronu dla wszystkich możliwych wyników (innymi słowy
insert math magic here
).
(Uwaga dodatkowa 1: W szczególności patrzę na wielowarstwowe perceptrony jako rodzaj sieci neuronowej).
(Uwaga dodatkowa 2: Dla pierwszego wypunktowanego „możliwego rozwiązania” posiadanie każdej konkretnej sieci neuronowej i iterowanie przez nią aż do otrzymania odpowiedzi „Tak” nie jest wystarczająco dobre. Wiem, że można to zrobić dość łatwo, ale jest to proste funkcjonalne programowanie, a nie uczenie maszynowe. Chcę wiedzieć, czy możliwe jest posiadanie jednej sieci neuronowej do zasilania informacjami i otrzymywania odpowiedniej odpowiedzi).