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?


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=σi∑j=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


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.


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.


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.


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.


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,
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.