Анализ чувствительности в глубоких нейронных сетях


14

После вопроса, на который уже дан ответ ( Извлечение важности веса из одноуровневой сети прямой связи ), я ищу вывод об актуальности входных данных в нейронных сетях.

Рассматривая глубокую сеть, где восстановление важности ввода путем перехода назад через слои от интересующего выходного узла может быть трудным или длительным, мне было интересно, существует ли какая-то теоретическая основа для выполнения анализа чувствительности для нейронной сети, в основном слегка меняющая введите и рассмотрите, как изменяется интересующий узел.

Есть ли канонический способ выполнения какого-либо анализа чувствительности в нейронных сетях?

Я действительно приветствовал бы некоторый код Python, чтобы сделать это, если есть

Ответы:


12

yRmy=f(x)xRdf

Jij(x)=xjfi(x)

fxΔjiΔJij(x)

Jij(x)ijxfв общем случае нелинейно, это понятие чувствительности зависит от входных данных; в одних регионах он может быть большим, а в других - близким к нулю. Если вам нужна какая-то сводная мера того, насколько сильно выходы зависят от входных данных, вам придется агрегировать по нескольким входным значениям. Например, вы можете взять абсолютное значение якобиана, усредненное по всем входным данным в обучающем наборе (которое действует как суррогат для ожидаемого значения по отношению к базовому распределению входных данных). Конечно, такого рода резюме в конечном итоге отбрасывает информацию, поэтому в некоторых обстоятельствах может вводить в заблуждение.

Вы можете использовать правило цепочки, чтобы получить выражение для якобиана, подобно тому, как вы получили бы градиент функции потерь по параметрам для использования с backprop. Вы также можете вычислить его, используя автоматическое дифференцирование, используя такие библиотеки, как Theano, TensorFlow и т. Д. Нет особых оснований для выполнения конечного дифференцирования (т. Е. Фактически имитировать возмущение и измерять изменение в выходных данных), если только функция, которую реализует ваша сеть, не является недифференцируемой ( в этом случае якобиан не существует).

Несколько предостережений: если входные данные имеют разные единицы / шкалы, отличные друг от друга, чувствительность также будет иметь разные единицы / шкалы, и их нельзя сравнивать напрямую. Стандартизация / масштабирование входных данных является одним из возможных решений. Также важно помнить, что этот тип анализа говорит нам о самой модели, но не обязательно о базовом распределении, которое генерировало данные. Например, если два входа коррелируют, модель может в конечном итоге использовать первый, но не второй. В этом случае мы обнаружили бы, что чувствительность высока для первого входа и низкая для второго, но не следует делать вывод, что первый вход по своей природе более важен для прогнозирования выхода в целом.

Эта статья должна представлять интерес.


отличный ответ и отличная статья! если кто - то заинтересован в реализации этого метода, вы можете найти хорошую реализацию якобиан расчета здесь: medium.com/unit8-machine-learning-publication/...
pcko1
Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.