Как можно визуализировать особенности, извлеченные в скрытых слоях нейронной сети?

56
5
1
Лучший ответ
59

Чтобы визуализировать функции, как показано на рисунке, вам нужно передать входное изображение в сеть и для каждого фильтра захватить выходные данные.

Вот пример использования Keras Jupyter Notebook Viewer. Автор фиксирует выходные данные одного слоя, затем проходит через все фильтры в этом слое и принимает выходные элементы.

ответил(а) 2020-06-07T16:03:32+03:00 3 месяца, 3 недели назад
59

Я ответил на подобный вопрос здесь

TL; DR

Для понимания: - CS231n сверточные нейронные сети для визуального распознавания

Библиотеки для анализа: -

Keras: - raghakot / keras-vis Tensorflow: - chrisranderson / beholder Caffe: - yosinski / deep-visualization-toolbox

ответил(а) 2020-06-07T16:03:32+03:00 3 месяца, 3 недели назад
53

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

Но лучшим способом является сопоставление этих объектов с исходным пространством ввода (например, с исходным пространством изображения). Это может быть сделано деконволюционными сетями. Деконволюционные сети используются для создания пространственных выводов.

В этой статье описывается метод для этого типа визуализации: «Визуализация и понимание конвективных сетей» Мэтью Цейлер https://arxiv.org/pdf/1311.2901.pdf

ответил(а) 2020-06-07T16:03:32+03:00 3 месяца, 3 недели назад
44

Может быть, это может вам помочь: yosinski / deep-visualization-toolbox

Потрясающий проект для визуализации всех тех скрытых вещей, которые происходят внутри DNN.

ответил(а) 2020-06-07T16:03:32+03:00 3 месяца, 3 недели назад
43

Мандер и Вахид уже покрыли это. Добавив еще один способ визуализации справа в браузере для простых 1D и 2D моделей игрушек, используя Convnet.js - блог машинного обучения Андрея Карпати. Классифицируйте данные 1D игрушек, Классифицируйте данные 2D игрушек. Его сайт позволяет нам изменять код для моделей прямо в браузере и визуализировать вывод каждого слоя.

Одна вещь, которая на первый взгляд кажется загадкой на двумерных изображениях лиц, о которых идет речь, состоит в том, как маленькие кусочки на первом изображении могут складываться со вторым (или, что эквивалентно, полное лицо из перевернутых / перевернутых частей). на втором рисунке). Ответ на этот вопрос показан в простой 1D модели игрушки ниже. По существу, взвешенная сумма в узлах собирает части вместе, как описано ниже - как сложение частей головоломки с помощью операций переворачивания, масштабирования, сдвига и т. Д.

Основная часть работы выполняется во взвешенной сумме w x + b, где происходит обучение. Нелинейность, например, в случае ReLU в приведенных ниже моделях, предлагает ключ и необходимое ограничение линий.

Например, чтобы визуализировать, как игрушечная модель с тремя показанными слоями может использоваться для аппроксимации изогнутой линии ниже -

Вывод из первого уровня узлов ниже с использованием 1D модели выше - красные линии являются выходами первого уровня. Черная кривая - это та, которую мы пытаемся подогнать. Первый слой просто выводит обрезанные линии (отсечение, выполненное нелинейностью ReLU - возможно, было сигмоидом / tanh) - это аналог первого рассматриваемого двумерного изображения.

Вывод из второго слоя ниже - теперь он становится богаче - больше не обрезает строки. Это аналог второго изображения в вопросе - появляются формы.

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

Окончательное взвешенное сложение всех суммирует красные кривые выше, дает кривую ниже, соответствующую всем этим точкам (это просто потому, что «w» в взвешенной сумме wx + b в каждом слое (до применения нелинейности), масштабируется / переворачивает / поворачивает кривые / линии и b смещает кривые вверх / вниз - все, что делает нелинейность (ReLu), это генерирует обрезанные кривые)

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

Модель по умолчанию на странице имеет два скрытых слоя (один Relu и другой сигмоид). Мы можем изменить код, чтобы сделать оба слоя, например, ReLU и добавить любое количество слоев, просто вырезав и вставив один из этих слоев. Тогда мы можем убедить себя, записав уравнения линий в последнем слое, и подтвердить с помощью Wolfram, что они действительно суммируют то, что мы видим. Например, приведенное ниже уравнение является одним из таких примеров, построенных из весов, исследованных в окне отладки в Chrome для игрушечной модели. график max (0, (-. 57) x + 4,45) * 1,11 -5,399 + max (0, (-. 28) x + 2,19) * (. 54) -5,399 + max (0, (- 1,09) x + 1,53) * (- 1,09) - 5,399 Прямой график вышеуказанного уравнения в Wolfram. Функция активации в этом уравнении: ReLu - max (0, x)

Три слоя были использованы только для иллюстрации прогрессивного богатства кривых при переходе от каждого слоя к следующему

На практике один слой может закрепить эту кривую достаточным количеством узлов.

Эти картинки были адаптированы из ответов на пару смежных вопросов. Что такое машинное обучение с точки зрения непрофессионала?

Как может глубокая нейронная сеть с активациями ReLU в ее скрытых слоях приближаться к какой-либо функции?

ответил(а) 2020-06-07T16:03:32+03:00 3 месяца, 3 недели назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема