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

Как структурирована эта статья

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

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

Нейронный черный ящик

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

К сожалению, напрямую интерпретировать эти полностью связанные слои невозможно. Можно визуализировать активации свертки, но сложнее понять, что происходит в плотных слоях.

Снижение размерности и T-SNE

В полносвязных слоях обычно много сотен нейронов. Например. архитектура VGG16 содержит 4096 нейронов после сверток. Эти 4096 значений можно рассматривать как упомянутые выше особенности. Если бы только был способ визуализировать эти числа!

Снижение размерности - это способ уменьшить высокоразмерные объекты до более низких измерений, пытаясь сохранить характеристики данных. Например. похожие изображения будут ближе друг к другу, а разнородные - далеко.

Введите T-SNE.

Я не буду вдаваться в математические подробности, но T-SNE - один из таких методов уменьшения размерности. Он пытается сохранить структуру данных большого размера, а также уменьшить размеры. Для визуализации этих размеров мы уменьшим размеры до 3, чтобы их можно было отобразить на трехмерном графике. Прочитать про T-SNE можно здесь.

Вот пример T-SNE. Обратите внимание, что в этом случае пиксели использовались напрямую как функции, т.е. нейронная сеть не использовалась.

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

Визуализация естественных изображений с помощью сверточной нейронной сети

MNIST - тривиальная задача в 2017 году. Как мы можем сделать то же самое для более «реальных» изображений? Ответ - сверточные нейронные сети (CNN). Мы возьмем несколько тысяч изображений и передадим их через сверточную сеть InceptionV3. Мы будем извлекать выходные данные непосредственно перед плотными слоями сети и использовать их в качестве наших измерений для визуализации.

Инструменты визуализации

К счастью для нас, есть отличный инструмент, входящий в состав Tensorboard. Вы можете поиграть с ним на сайте jector.tensorflow.org , а исходный код найти здесь .

Это предназначено для использования в качестве Tensorboard, но, на мой взгляд, tenorboard слишком громоздко, и, если вы уже не используете Tensorflow, использовать его слишком сложно.

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

Я написал несколько оболочек для экспорта данных из модели. Детали проекта будут включены в конце статьи.

Пример использования - Визуализация архивных фотографий

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

Таким образом, я решил использовать InceptionV3 в качестве экстрактора признаков для извлечения 2048 векторов длины, которые являются представлением изображения.

Затем я построил эти особенности с помощью T-SNE.

Вы можете сами поиграть с визуализацией здесь

Заключение

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

Если потребуется, я могу подробно остановиться на технических деталях T-SNE в одном из будущих постов блога.

Ресурсы

  • Мой проект ссылка, если вы хотите выполнить эти визуализации на своих данных.
  • Демо с использованием моих собственных данных, если вы просто хотите поэкспериментировать.