Нейронные сети часто рассматриваются как «черные ящики» из-за их сложной структуры. Это не идеально, так как часто полезно иметь интуитивное представление о том, как модель работает внутри. Каковы методы визуализации работы обученной нейронной сети? В качестве альтернативы, как мы можем извлечь легко усваиваемые описания сети (например, этот скрытый узел в основном работает с этими входами)?
Меня в первую очередь интересуют двухуровневые сети с прямой связью, но я также хотел бы услышать решения для более глубоких сетей. Входные данные могут быть визуальными или невизуальными.
Ответы:
Нейронные сети иногда называют «приближениями дифференцируемых функций». Итак, что вы можете сделать, это дифференцировать любую единицу по отношению к любой другой единице, чтобы увидеть, каковы их отношения.
Вы также можете проверить, насколько чувствительна ошибка сети к конкретному входу.
Затем есть нечто, называемое «рецептивные поля», которое представляет собой просто визуализацию соединений, входящих в скрытое устройство. Это позволяет легко понять, например, какие конкретные единицы используются для данных изображения. Это может быть сделано и для более высоких уровней. См. Визуализация высокоуровневых возможностей глубокой сети .
источник
Оцените важность функции, случайно увеличив каждое значение одной функции и записав, как ухудшается ваша общая функция пригодности.
Таким образом, если ваша первая функция постоянно оценивается и масштабируется до [ 0 , 1 ] , то вы можете добавить r a n d ( 0 , 1 ) - 0,5 к значению каждого примера обучения для первой функции. Затем посмотрите, насколько уменьшается ваш R 2 . Это фактически исключает функцию из ваших обучающих данных, но лучше справляется с перекрестными взаимодействиями, чем буквальное удаление функции.x1,i [0,1] rand(0,1)−0.5 R2
Затем оцените свои функции по ухудшению фитнес-функции и сделайте симпатичную гистограмму. По крайней мере, некоторые из наиболее важных функций должны пройти проверку, учитывая ваше знание проблемной области. И это также позволяет вам приятно удивиться информативным функциям, которые вы, возможно, не ожидали.
Этот тип проверки важности функций работает для всех моделей черного ящика, включая нейронные сети и большие ансамбли CART. По моему опыту, важность функций - это первый шаг к пониманию того, что на самом деле делает модель.
источник
Вот графическая интуиция для определенного вида нейронных сетей. В конце этого поста есть ссылка на код R, который показывает визуализацию для конкретной проблемы. Вот как это выглядит:
источник
Осенью 2011 года я прошел бесплатный онлайн-курс по машинному обучению в Standford, который проводил Эндрю Нг, и мы визуализировали нейронную сеть, которая была детектором лица. Результатом было общее лицо. Я хочу упомянуть это для полноты, но вы не упомянули такого рода приложения, поэтому я не собираюсь выкапывать детали. :)
источник
Нижеприведенный метод взят по этой ссылке , посетите сайт для более подробной информации.
Начните со случайного изображения, т. Е. Произвольно предоставьте значения для пикселей. «Затем мы делаем прямой проход, используя это изображение x в качестве входного сигнала для сети, чтобы вычислить активацию a_i (x), вызванную x в каком-то нейроне i где-то в середине сети. Затем мы выполняем обратный проход (выполняя backprop) вычислить градиент a_i (x) относительно более ранних активаций в сети. В конце обратного прохода у нас остается градиент ∂a_i (x) / ∂x , или как изменить цвет каждого пикселя на увеличить активацию нейрона I. Мы делаем именно это, добавляя небольшую долю αα этого градиента к изображению:
x ← x + α⋅∂a_i (x) / ∂x
Мы продолжаем делать это неоднократно, пока у нас не будет изображения x ', которое вызывает высокую активацию рассматриваемого нейрона. "
источник