Analiza wrażliwości w głębokich sieciach neuronowych

14

Po udzieleniu odpowiedzi na pytanie ( Wyodrębnianie znaczenia wagi z jednowarstwowej sieci feed-forward ) szukam wnioskowania na temat znaczenia danych wejściowych w sieciach neuronowych.

Biorąc pod uwagę głęboką sieć, w której rekonstrukcja znaczenia wejściowego poprzez przejście wstecz przez warstwy z interesującego węzła wyjściowego może być trudna lub czasochłonna, zastanawiałem się, czy istnieją jakieś ramy teoretyczne w przeprowadzaniu analizy wrażliwości dla sieci neuronowej, w zasadzie nieznacznie zmień wprowadź dane i zastanów się, jak zmienia się interesujący węzeł zewnętrzny.

Czy istnieje kanoniczny sposób przeprowadzania analizy wrażliwości w sieciach neuronowych?

Byłbym bardzo wdzięczny za ten kod Pythona, jeśli taki istnieje

Tommaso Guerrini
źródło

Odpowiedzi:

12

Sugerowana analiza wrażliwości odpowiada badaniu częściowych pochodnych danych wyjściowych w odniesieniu do danych wejściowych. Powiedz, że wektor wyjściowy jest określony przez , gdzie jest wektorem wejściowym, a jest funkcją realizowaną przez sieć. Jakobian wyjść WRT wejść jest:yRmy=f(x)xRdf

Jij(x)=xjfi(x)

Jakobian podaje lokalną szybkość zmian każdego wyjścia względem każdego wejścia, więc mówi nam, jak zachowa się w odpowiedzi na nieskończenie małe zakłócenia. Jeśli zaczniemy od wejścia i dodamy nieskończenie małą wartość do tego wejścia, spodziewamy się, że ty wynik wzrośnie o .fxΔjiΔJij(x)

Jeśli ma dużą wielkość, oznacza to, że wyjście jest wrażliwe na wejście w pobliżu . Ponieważ jest zasadniczo nieliniowe, to pojęcie wrażliwości zależy od danych wejściowych; w niektórych regionach może być duży, aw innych prawie zerowy. Jeśli chcesz jakąś podsumowującą miarę tego, jak mocno dane wyjściowe zależą od danych wejściowych, musisz zagregować wiele wartości wejściowych. Na przykład, możesz wziąć wartość bezwzględną jakobianu, uśrednioną dla wszystkich danych wejściowych w zestawie treningowym (który działa jako surogat dla wartości oczekiwanej względem podstawowego rozkładu danych wejściowych). Oczywiście tego rodzaju podsumowanie spowoduje odrzucenie informacji, więc w niektórych okolicznościach może być mylące.Jij(x)ijxf

Możesz użyć reguły łańcuchowej, aby uzyskać wyrażenie dla jakobianów, podobnie jak wyprowadzasz gradient funkcji straty wrt parametry do użycia z backprop. Można go również obliczyć za pomocą automatycznego różnicowania, używając biblioteki takiej jak Theano, TensorFlow itp. Nie ma zbyt wiele powodów, aby wykonywać różnicowanie skończone (tj. Symulować perturbację i mierzyć zmianę wyniku), chyba że funkcja, którą implementuje twoja sieć, nie jest rozróżnialna ( w takim przypadku jakobian nie istnieje).

Kilka zastrzeżeń: jeśli dane wejściowe mają różne jednostki / skale od siebie, wrażliwości będą miały również różne jednostki / skale i nie można ich bezpośrednio porównać. Standaryzacja / skalowanie danych wejściowych jest jednym z możliwych rozwiązań. Należy również pamiętać, że ten rodzaj analizy mówi nam o samym modelu, ale niekoniecznie o podstawowej dystrybucji, która wygenerowała dane. Na przykład, jeśli dwa dane wejściowe są skorelowane, model może skończyć się na pierwszym, ale nie drugim. W tym przypadku stwierdzilibyśmy, że czułość jest wysoka dla pierwszego wejścia i niska dla drugiego, ale nie należy wyciągać wniosku, że pierwsze wejście jest z natury ważniejsze dla ogólnego prognozowania wyjścia.

Ten artykuł powinien być interesujący.

user20160
źródło
świetna odpowiedź i świetny artykuł! jeśli ktoś jest zainteresowany wdrożeniem tej metody, możesz znaleźć fajną implementację obliczeń jakobińskich tutaj: medium.com/unit8-machine-learning-publication/…
pcko1