Dogłębne uczenie się: skąd mam wiedzieć, które zmienne są ważne?

20

Jeśli chodzi o żargon sieci neuronowej (y = waga * x + odchylenie), skąd mam wiedzieć, które zmienne są ważniejsze od innych?

Mam sieć neuronową z 10 wejściami, 1 ukrytą warstwą z 20 węzłami i 1 warstwą wyjściową, która ma 1 węzeł. Nie jestem pewien, jak się dowiedzieć, które zmienne wejściowe mają większy wpływ niż inne zmienne. Myślę, że jeśli dane wejściowe są ważne, to będą miały wysoce ważone połączenie z pierwszą warstwą, ale waga może być dodatnia lub ujemna. Mogę więc wziąć bezwzględną wartość wag wejściowych i zsumować je. Ważniejsze dane wejściowe miałyby wyższe kwoty.

Na przykład, jeśli długość włosów jest jednym z danych wejściowych, to powinna mieć 1 połączenie z każdym węzłem w następnej warstwie, a więc 20 połączeń (a zatem 20 ciężarów). Czy mogę po prostu wziąć wartość bezwzględną każdej masy i zsumować je?

użytkownik1367204
źródło
3
Z pewnością możesz to zrobić, ale nie jest jasne, co to naprawdę oznacza oprócz „sumy wszystkich wag dla tej zmiennej dla wszystkich połączeń”. Nazywanie tego „ważnością” jest całkowicie arbitralne.
Matthew Drury,
1
Chcę tylko KAŻDEJ informacji, która sugerowałaby, że zmienna jest ważna, i myślę, że może to być dobry sposób.
user1367204

Odpowiedzi:

16

To, co opisujesz, jest rzeczywiście jednym standardowym sposobem kwantyfikacji znaczenia danych wejściowych sieci neuronowej. Należy jednak pamiętać, że aby to zadziałało, zmienne wejściowe muszą być w jakiś sposób znormalizowane. W przeciwnym razie wagi odpowiadające zmiennym wejściowym, które zwykle mają większe wartości, będą proporcjonalnie mniejsze. Istnieją różne schematy normalizacji, takie jak na przykład odejmowanie średniej zmiennej i dzielenie przez jej odchylenie standardowe. Jeśli zmienne nie zostały znormalizowane w pierwszej kolejności, można dokonać korekty samych wag w obliczeniach ważności, takich jak pomnożenie przez odchylenie standardowe zmiennej.

Ii=σij=1nhidden|wij|.

Tutaj jest standardowym odchyleniem tego wejścia, jest tym znaczeniem wejścia, jest wagą łączącą ty sygnał wejściowy z tym ukrytym węzłem w pierwszej warstwie, a to liczba ukrytych węzłów w pierwszej warstwie.σiiIiiwijijnhidden

Inną techniką jest użycie pochodnej mapowania sieci neuronowej w odniesieniu do danych wejściowych, uśrednionych względem danych wejściowych.

Ii=σi|dydxi|

Tutaj jest tym wejściem, jest wyjściem, a wartość oczekiwana jest brana w odniesieniu do wektora wejść .xiiyx

Sam Marinelli
źródło
Czy to zadziałałoby, gdybym używał połączeń między wejściami a pierwszą ukrytą warstwą (zamiast używać wszystkich ukrytych warstw)?
user1367204
Powinieneś używać tylko pierwszej ukrytej warstwy. Po jednej warstwie pozostałe wagi nie są przywiązane do jednego wejścia bardziej niż do drugiego. Zredagowałem nieco odpowiedź, aby to wyjaśnić.
Sam Marinelli,
Przypomniałem sobie inne podejście i dodałem je do odpowiedzi.
Sam Marinelli,
11

Nieco brutalna siła, ale skuteczne rozwiązanie:

Spróbuj „upuścić” wejście, używając stałej dla jednej z funkcji wprowadzania. Następnie wytrenuj sieć dla każdego z możliwych przypadków i zobacz, jak spada Twoja dokładność. Ważne dane wejściowe zapewnią największą korzyść ogólnej dokładności.

Rhadar
źródło
To z pewnością możliwość.
SmallChess
6
Istnieje jednak pułapka: nawet jeśli cecha jest niezwykle ważna, jeśli istnieje inna cecha wysoce skorelowana z pierwszą, żadna z nich nie zostanie uznana za ważną na podstawie kryteriów (brak pierwszej kompensowany jest obecnością tej drugiej, choć mniej pouczający, ale w ten sposób ważniejsze będą bardziej „unikalne” funkcje)
Firebug
Nazywa się to czasem testem ablacyjnym (a dokładniej mikro-ablacyjnym)
Veltzer Doron,
7

105

W przypadku sieci płytkich, to daje przykład zdefiniować znaczenie zmiennej.

W naprawdę głębokiej sieci ludzie nie mówią zbyt wiele o zmiennym znaczeniu. Ponieważ dane wejściowe są funkcjami poziomu pierwotnego, takimi jak piksele na obrazie.

Haitao Du
źródło
Zredagowałem swój komentarz, aby odzwierciedlić, co miałem na myśli. Chciałem powiedzieć 20 węzłów w pierwszej warstwie, a nie 5 węzłów. Świetny udział i dzięki za rozróżnienie płytkich / głębokich sieci.
user1367204
9
@ hxd1011 nie jest pedantycznym pruderem, ale głęboka oznacza więcej warstw, a nie tysiące ukrytych jednostek :).
Rafael
3

To, co znalazłem na ten temat, jest szczegółowo wymienione na tej stronie, a dokładniej można na to spojrzeć . Jeśli mówisz tylko o modelach liniowych, musisz znormalizować wagi, aby umożliwić ich interpretację, ale nawet to może wprowadzać w błąd bardziej na ten temat na wspomnianym linku. Niektórzy próbowali tworzyć złożone funkcje wag, aby interpretować ważność danych wejściowych (Garsona, Gedeona i Milne'a), ale nawet to może być mylące, możesz dowiedzieć się więcej na ten temat po przewinięciu pierwszego linku, o którym wspomniałem. Ogólnie radziłbym, aby zinterpretować wyniki z odrobiną soli.

zgodziłby się z odpowiedzią @ rhadar, ale chciałby dodać, że zamiast używać ciągłej próby, użyj wartości średniej dla tego wejścia i nie zapomnij o ponownym przeszkoleniu sieci.

PS: przepraszam, nie mogę opublikować więcej linków lub komentarzy tutaj nie ma dobrej reputacji.

Vaibhav Arora
źródło
1

Biorąc pod uwagę, że masz:

  1. Zadanie klasyfikacyjne
  2. Wyszkolony model
  3. Znormalizowane funkcje (od 0 do 1)

Czy ktoś próbował:

  1. Zerowanie stronniczości
  2. Przekaż za każdym razem, gdy zawiera jeden gorący wektor, w którym wszystkie funkcje są równe zero, z wyjątkiem jednego.
  3. Sprawdź dane wyjściowe.

W takim przypadku myślę, że wyjście będzie liczbą oznaczającą „ważność” cechy, ponieważ wyjście to reprezentuje również wyjście ścieżki tego 1 sygnału w sieci.

To tak, jakby zapalić tylko jedną żarówkę w labiryncie i zmierzyć światło wychodzące na wyjściu.

Δημητρης Παππάς
źródło
Nie sądzę, żeby to bardzo pomogło. To, co chciałbyś ocenić, to w jakim stopniu zmiana tego wejścia wpłynie na wynik (sama lub w połączeniu z innymi funkcjami)
elachell,