W większości przykładów sieci neuronowych, które do tej pory widziałem, sieć jest używana do klasyfikacji, a węzły są transformowane funkcją sigmoidalną. Chciałbym jednak użyć sieci neuronowej do wyprowadzenia ciągłej wartości rzeczywistej (realistycznie wyjście zwykle byłoby w zakresie od -5 do +5).
Moje pytania to:
1. Should I still scale the input features using feature scaling? What range?
2. What transformation function should I use in place of the sigmoid?
Chcę początkowo wdrożyć PyBrain, który opisuje te typy warstw .
Więc myślę, że powinienem mieć 3 warstwy na początek (warstwę wejściową, ukrytą i wyjściową), które są warstwami liniowymi? Czy to rozsądny sposób? Lub alternatywnie czy mogę „rozciągnąć” funkcję sigmoidalną w zakresie od -5 do 5?
regression
neural-networks
Użytkownik
źródło
źródło
Odpowiedzi:
1 . Czy powinienem nadal skalować funkcje wejściowe za pomocą skalowania funkcji? Jaki zakres?
Skalowanie niczego nie pogarsza. Przeczytaj tę odpowiedź z sieci neuronowej Sarle FAQ: Temat: Czy powinienem normalizować / standaryzować / przeskalowywać dane? .
2 . Jakiej funkcji transformacji należy użyć zamiast sigmoidu?
Możesz użyć logistycznej sigmoid lub tanh jako funkcji aktywacji. To nie ma znaczenia Nie musisz zmieniać algorytmu uczenia się. Musisz po prostu przeskalować wyniki swojego treningu do zakresu funkcji aktywacji warstwy wyjściowej ( lub ), a kiedy ćwiczysz swoją sieć, musisz skalować wyniki swojej sieć do . Naprawdę nie musisz nic zmieniać.[ - 1 , 1 ] [ - 5 , 5 ][ 0 , 1 ] [ - 1 , 1 ] [ - 5 , 5 ]
źródło
Zastrzeżenie: przedstawione podejście nie jest wykonalne dla ciągłych wartości, ale uważam, że ma pewien wpływ na podejmowanie decyzji w projekcie Smarty77 porusza dobrą sprawę o wykorzystaniu przeskalowanej funkcji sigmoidalnej. Zasadniczo funkcja sigmoidalna generuje prawdopodobieństwo, które opisuje wskaźnik powodzenia próbkowania (tj. 95 ze 100 zdjęć z tymi funkcjami jest z powodzeniem „psich”). Ostateczny opisany wynik jest binarny, a szkolenie z użyciem „binarnej entropii krzyżowej” opisuje proces oddzielania diametralnie przeciwnych wyników, co z natury zniechęca do uzyskania wyników w średnim zakresie. Kontinuum danych wyjściowych służy jedynie skalowaniu na podstawie liczby próbek (tzn. Wynik 0,9761 oznacza, że 9761 na 10000 próbek wykazujących te lub podobne triaty to „pies”), ale każdy wynik sam w sobie musi być nadal uważany za binarny, a nie arbitralny. W związku z tym nie należy go mylić i stosować jako liczb rzeczywistych i może nie mieć tutaj zastosowania. Chociaż nie jestem pewien wykorzystania sieci, normalizowałbym sam wektor wyjściowy wrt. Można to zrobić za pomocą softmax. Będzie to również wymagało 11 wyjść liniowych (pojemników) z sieci (po jednym dla każdego wyjścia od -5 do +5), po jednym dla każdej klasy. Zapewni to wartość pewności dla każdego „bin” będącego poprawną odpowiedzią. Tę architekturę można by wyszkolić przy użyciu kodowania „na gorąco”, przy czym cyfra 1 wskazuje prawidłowy przedział. Wynik można interpretować na różne sposoby, na przykład chciwą strategię lub probabilistyczne próbkowanie. Aby jednak przekształcić go w zmienną ciągłą, pewność każdego indeksu można wykorzystać jako wagę do umieszczenia znacznika na linii liczbowej (podobnie do zachowania jednostki sigmoidalnej), ale uwypukla to również podstawowy problem: jeśli sieć jest dość pewna, wynik wynosi -2 lub +3, ale absolutnie pewne, że to nic innego, czy +1 jest realnym wynikiem? Dziękuję za uwagę. Powodzenia w twoim projekcie.
źródło