Как визуализировать / понять, что делает нейронная сеть?

37

Нейронные сети часто рассматриваются как «черные ящики» из-за их сложной структуры. Это не идеально, так как часто полезно иметь интуитивное представление о том, как модель работает внутри. Каковы методы визуализации работы обученной нейронной сети? В качестве альтернативы, как мы можем извлечь легко усваиваемые описания сети (например, этот скрытый узел в основном работает с этими входами)?

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

rm999
источник
1
Вот хороший пример: playground.tensorflow.org
nobar

Ответы:

12

Нейронные сети иногда называют «приближениями дифференцируемых функций». Итак, что вы можете сделать, это дифференцировать любую единицу по отношению к любой другой единице, чтобы увидеть, каковы их отношения.

Вы также можете проверить, насколько чувствительна ошибка сети к конкретному входу.

Затем есть нечто, называемое «рецептивные поля», которое представляет собой просто визуализацию соединений, входящих в скрытое устройство. Это позволяет легко понять, например, какие конкретные единицы используются для данных изображения. Это может быть сделано и для более высоких уровней. См. Визуализация высокоуровневых возможностей глубокой сети .

bayerj
источник
13

Оцените важность функции, случайно увеличив каждое значение одной функции и записав, как ухудшается ваша общая функция пригодности.

Таким образом, если ваша первая функция постоянно оценивается и масштабируется до [ 0 , 1 ] , то вы можете добавить r a n d ( 0 , 1 ) - 0,5 к значению каждого примера обучения для первой функции. Затем посмотрите, насколько уменьшается ваш R 2 . Это фактически исключает функцию из ваших обучающих данных, но лучше справляется с перекрестными взаимодействиями, чем буквальное удаление функции.x1,i[0,1]rand(0,1)0.5R2

Затем оцените свои функции по ухудшению фитнес-функции и сделайте симпатичную гистограмму. По крайней мере, некоторые из наиболее важных функций должны пройти проверку, учитывая ваше знание проблемной области. И это также позволяет вам приятно удивиться информативным функциям, которые вы, возможно, не ожидали.

Этот тип проверки важности функций работает для всех моделей черного ящика, включая нейронные сети и большие ансамбли CART. По моему опыту, важность функций - это первый шаг к пониманию того, что на самом деле делает модель.

someben
источник
1
Спасибо за ответ; это на самом деле то, что я сделал, и я считаю это очень полезным. Хотя в этом вопросе я больше ищу что-то, что выглядит внутри сети, а не как черный ящик.
rm999
2

Вот графическая интуиция для определенного вида нейронных сетей. В конце этого поста есть ссылка на код R, который показывает визуализацию для конкретной проблемы. Вот как это выглядит:

enter image description here

Димитрий Васильевич Мастеров
источник
1

Осенью 2011 года я прошел бесплатный онлайн-курс по машинному обучению в Standford, который проводил Эндрю Нг, и мы визуализировали нейронную сеть, которая была детектором лица. Результатом было общее лицо. Я хочу упомянуть это для полноты, но вы не упомянули такого рода приложения, поэтому я не собираюсь выкапывать детали. :)

Эндрю
источник
Университет Стэнфорд. Я могу найти курс Эндрю Нг в Интернете. Я слышал, как Дик Дево выступил с лекцией по нейронным сетям, утверждая, что часть нейронов как бы скрывает то, что на самом деле происходит. это просто еще один тип нелинейного классификатора, и если вместо того, чтобы смотреть на него с точки зрения диаграммы, их лучше понять, написав, что они делают алгебраически. Я надеюсь, что я помню это право.
Майкл Р. Черник
De Veaux и Ungar, краткое введение в нейронные сети 1997: «Нейронные сети, кажется, повсюду в наши дни, и, по крайней мере, в своей рекламе способны делать все, что может делать статистика, без всякой суеты и беспокойства о необходимости делать что-либо, кроме купить часть программного обеспечения. "
Денис
0

Нижеприведенный метод взят по этой ссылке , посетите сайт для более подробной информации.

Начните со случайного изображения, т. Е. Произвольно предоставьте значения для пикселей. «Затем мы делаем прямой проход, используя это изображение x в качестве входного сигнала для сети, чтобы вычислить активацию a_i (x), вызванную x в каком-то нейроне i где-то в середине сети. Затем мы выполняем обратный проход (выполняя backprop) вычислить градиент a_i (x) относительно более ранних активаций в сети. В конце обратного прохода у нас остается градиент ∂a_i (x) / ∂x , или как изменить цвет каждого пикселя на увеличить активацию нейрона I. Мы делаем именно это, добавляя небольшую долю αα этого градиента к изображению:

x ← x + α⋅∂a_i (x) / ∂x

Мы продолжаем делать это неоднократно, пока у нас не будет изображения x ', которое вызывает высокую активацию рассматриваемого нейрона. "

LKB
источник