Набор инструментов визуализации функций с открытым исходным кодом для нейронных сетей в PyTorch

Настройка сцены

В моем последнем посте я сделал обзор визуализации функций как области исследования и представил FlashTorch - набор инструментов визуализации функций с открытым исходным кодом для нейронных сетей, построенных в PyTorch.

Пакет доступен для установки через pip. Загляните в репозиторий GitHub за исходным кодом. Вы также можете поиграть с ним в этом блокноте, размещенном в Google Colab, без необходимости устанавливать что-либо!

Визуализация функций с помощью FlashTorch

Ранее я показал вам, как использовать FlashTorch для визуализации того, что сверточные нейронные сети (CNN) воспринимают во входных изображениях. Я сделал это, создав карты значимости из AlexNet, который был предварительно обучен задаче классификации ImageNet. Я выбрал три класса из задачи (большая серая сова, павлин и тукан) и использовал изображения этих классов, чтобы проверить, чему AlexNet научился больше всего фокусироваться на изображениях при идентификации этих объектов.

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

Что нейронная сеть воспринимает ?

Почему ведет себя именно так?

Как мы можем объяснить свои решения / прогнозы?

Я создал FlashTorch, чтобы было проще отвечать на подобные вопросы. И эти вопросы не только для тех случаев, когда у вас есть хорошо работающие сети!

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

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

Передача наклонения

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

Трансферное обучение часто используется в задачах компьютерного зрения и обработки естественного языка, поскольку оно помогает нам экономить вычислительные / временные ресурсы, используя преимущества предыдущего обучения.

Например, сеть, обученная в ImageNet (1000 классов), может быть использована в качестве идентификатора собаки без особого дополнительного обучения. Или встраивание слов, обученное на большом корпусе текста (например, Word2Vec от Google), может быть введено в другую глубокую нейронную сеть для извлечения векторного представления слов из нового корпуса.

ImageNet → классификатор цветов

Чтобы проверить возможности трансферного обучения, я решил превратить DenseNet, предварительно обученный на задаче ImageNet, в цветочный классификатор с помощью 102 Category Flower Dataset.

Оказывается, модель без дополнительного обучения работает очень плохо - колоссальная точность теста 0,1%! Если вы уже посчитали… Я лучше сам угадываю наугад.

Интуитивно это, возможно, имеет смысл. В исходный набор данных ImageNet включено лишь несколько классов цветов, поэтому нетрудно представить, что запрос модели на определение 102 видов цветов - это толчок.

Интуиция - это хорошо, но я хочу конкретизировать, прежде чем переходить к тренировкам.

Давайте воспользуемся FlashTorch для создания карт значимости и визуализации того, что сеть (не) видит. Мы собираемся использовать это изображение наперстянки в качестве примера.

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

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

Теперь, когда мы понимаем, почему сеть работает плохо, я чувствую, что готов ее обучить. В конце концов, после проб и ошибок обученная модель смогла достичь точности теста 98,7%.

Что здорово! … Но можем ли мы объяснить почему?

Что сеть видит сейчас, чего не было раньше?

Совсем другое дело, правда?

Сеть научилась обращать меньше внимания на форму цветка и уделять больше внимания этому пятнистому узору :)

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

Шаг вперед (не в сторону!) От точности

С помощью методов визуализации функций мы не только можем лучше понять, что нейронные сети воспринимают об объектах, но и лучше подготовлены к:

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

Воспользуйтесь FlashTorch сегодня!

Если у вас есть проекты, которые используют CNN в PyTorch, FlashTorch может помочь вам сделать ваши проекты более интерпретируемыми и объяснимыми.

Пожалуйста, дайте мне знать, что вы думаете, если воспользуетесь им! Буду очень признателен за конструктивные комментарии, отзывы и предложения 🙏

Спасибо, удачного кодирования!