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).
Odpowiedź Anaximandera jest całkiem dobra. Pomyślałem, że skomentuję tę część twojego pytania:
Cóż, myślę, że twoje założenie jest tutaj błędne; jeśli dobrze rozumiem, masz NN z jednym wyjściem na kategorię, którą próbujesz sklasyfikować. Idealnie byłoby, gdyby działały one prawie niezależnie, aby klasyfikacja „pies” i „ptak” nie strzelała jednocześnie. Tak naprawdę podczas treningu to, co się wydarzy, to to, że kiedy trenujesz NN z wynikiem „psim”, propagacja wsteczna będzie próbowała upewnić się, że „ptak” i inne neurony wyjściowe nie wytwarzają fałszywych wyników pozytywnych. Więc teoretycznie będzie to działać dobrze, w przeciwieństwie do twojego komentarza; wzmocnienie negatywnego wyniku dla „ptaka” jest prawidłowe.
Twoim problemem będzie jednak skalowalność tego podejścia. W miarę dodawania kolejnych kategorii do sieci szkolenie stanie się bardziej złożone przynajmniej w sposób liniowy (ale prawdopodobnie znacznie gorszy). Z tego powodu wiele osób stosuje podejście polegające na szkoleniu poszczególnych NN dla każdej kategorii; dzięki temu wszystko jest proste i stosunkowo skalowalne. Meta-poziom ich łączenia należy do Ciebie. Możesz po prostu przejść przez wszystkie NN i zobaczyć, które produkują dodatnie wyniki, możesz stworzyć heurystyczne NN na średnim poziomie, które próbują zawęzić dla ciebie rodzaj zwierzęcia, lub możesz nawet mieć gigantyczną NN, która łączy poszczególne NN jako neurony . Zasadniczo próbuję powiedzieć, że posiadasz wcześniejszą wiedzę na temat struktury problemu - poszczególne klasyfikacje najprawdopodobniej różnią się od siebie;
EDYCJA: Aby odpowiedzieć na pytanie tytułowe, NN mogą oczywiście dostarczyć więcej niż tak / nie odpowiedzi. W modelach „standardowych” każdy neuron wyjściowy zwykle odpala tak / nie (chociaż zachowanie to można by zmienić, gdybyś miał taką skłonność), reprezentując jeden bit informacji; ale tak jak w przypadku komputera, bity można łączyć, aby uzyskać szereg dyskretnych wartości, które można interpretować w dowolny sposób. Dość wizualnym przykładem danych niebinarnych jest mapa samoorganizująca się , która zazwyczaj ma wyjście 2D.
źródło
Krótka i niezbyt sztywna odpowiedź: tak, każdy NN może dostarczyć więcej informacji niż tylko
yes
, lubno
. Wynika to z progu. Jeśli wagi są wyższe niż pewien próg, odpowiedź jest jedną z klas klasyfikacyjnych, jeśli jest niższa, odpowiedzią jest druga klasa klasyfikacyjna. Gruntownie:Wyjście neuronu jest w przedziale [0..1] (lub [-1,1] zależy) i nie chcesz uzyskać odpowiedzi, czy wyjście jest niższe czy wyższe niż próg, ale wyjście (wyjście można łatwo przekonwertować na interwał 0..1, co oznacza%)
źródło