Эксперимент по оценке изменения визуализации функций нейронной сети по мере ее адаптации к новой задаче.

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

В этой статье мы рассмотрим, как мы можем визуализировать то, что нейронная сеть учится обнаруживать, и как эти изученные артефакты меняются по мере того, как мы настраиваем сеть для выполнения новой задачи. Кроме того, этот проект предоставляет pytorch реализацию визуализации функций на основе библиотеки tensorflow lucid.

Прежде чем мы начнем, вы можете найти код этого проекта здесь, на Github.

Что такое точная настройка?

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

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

В этом проекте мы исследуем изменения во внутреннем представлении предварительно обученной сети входного изображения, когда сеть настраивается на Stanford Dogs Dataset [3]. Этот набор данных содержит ~ 20 000 изображений собак 120 пород. Благодаря стандартному подходу к тонкой настройке и равномерному разделению на тестовые поезда для этого нового набора данных была достигнута оценка точности классификации 80%.

Что такое визуализация функций?

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

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

Общая схема визуализации функций представлена ​​на Рисунке 2 ниже. Визуализация функций использует градиентный подъем, чтобы максимизировать значение активации целевого компонента в сети. Входное изображение начинается со случайной инициализации всех пикселей. По мере повторения алгоритма изображение начинает больше напоминать особенности, которые компонент научился обнаруживать.

Также обратите внимание, как целевой компонент может поступать из любой точки сети. В частности, в этом проекте мы визуализировали среднее значение каждой карты функций в последних четырех слоях узких мест ResNet-50.

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

Этот метод полезен для получения представления о том, что различные компоненты сети научились обнаруживать. На рисунке 3 ниже показаны визуализации функций из трех разных каналов в предварительно обученной модели ImageNet ResNet-50. Обратите внимание на то, что элементы более сложны для более глубоких слоев модели. Например, на левом изображении единственная визуализированная особенность - это какая-то текстура, похожая на мех. Однако справа мы можем видеть запутанные изображения голов собаки и змеи. Это говорит о том, что этот конкретный канал в сети научился обнаруживать собак и змей на входном изображении.

Чтобы узнать больше о визуализации функций и ее конкретной реализации в этом проекте, см. Эту отличную статью Distill [5].

Сравнение визуализаций функций

Теперь, когда мы обсудили основные идеи, давайте посмотрим, как мы можем визуализировать изменения в нейронной сети. Напомним, следует рассмотреть две сети:

  • базовая сеть, предварительно обученная на ImageNet.
  • Сеть собак, которая является базовой сетью, настроенной на основе набора данных о собаках.

Во время точной настройки только четыре компонента в архитектуре были допущены к обучению (исключая полностью связанный уровень):

  • Слой 3, узкое место5
  • Слой 4, узкое место 0
  • Слой 4, узкое место 1
  • Слой 4, узкое место 2

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

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

Автоматизация сравнения изображений

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

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

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

Особенности: ImageNet → Собаки

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

На рис. 5 мы можем увидеть три самых разных и наиболее похожих канала на уровне 3-узкое место5 между базовой сетью и собачьей сетью. В самых разных каналах шероховатая текстура отчетливо проявляется в визуализации объектов собачьей сети в каналах 667 и 675. Хотя есть также заметные изменения в канале 963, новые функции там визуально не интерпретируются как «собачьи». ». Неудивительно, что в трех наиболее похожих каналах практически нет заметных изменений, поскольку одни и те же шаблоны повторяются в каждой паре изображений.

Переходя к следующему уровню на рис. 6, немного сложнее расшифровать изменения в трех самых разных визуализациях функций. Визуализация канала 503 в сети собак, кажется, содержит несколько собачьих черт, разбросанных по изображению, включая глаза, носы и рты. Канал 1904 интересен тем, что визуализация почти похожа на растение, что может быть побочным продуктом набора данных, поскольку многие изображения собак сделаны на открытом воздухе.

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

На следующем слое на рис. 7, визуализации в трех самых разных каналах начинают представлять более полные изображения собак. Например, на каналах 700 и 899 черты лица напоминают головы мопсов и бернских горных собак соответственно. Интересно, что наиболее похожие каналы снова содержат текстуру, напоминающую символы.

На рисунке 8 ниже показаны три самых разных и наиболее похожих канала на последнем уровне. Каналы 707 и 442 в топ-3 самых разных каналов снова демонстрируют более полные особенности собак, такие как головы, в визуализациях.

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

Характеризуя различия между слоями

Визуализировав изменение функций внутри целевых слоев, давайте теперь оценим степень изменения между слоями. Рисунок 9 представляет распределение косинусоидальных сходств внутри каждого из четырех целевых слоев в виде прямоугольных диаграмм. Помимо последнего слоя (layer4-bottleneck2), есть четкая тенденция к снижению в распределении косинусного сходства по мере того, как мы углубляемся в сеть. Это говорит о том, что в среднем существует больше различий между визуализацией признаков базовой сети и собачьей сети для более глубоких слоев (что согласуется с нашей предыдущей гипотезой).

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

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

Предполагая, что этот шаблон является общим для всех визуализаций в последнем слое, это может объяснить, почему среднее косинусное сходство для слоя 4-узкое место2 не ниже, чем для слоя 4-узкое место1. Как ни странно, более высокая сложность и богатство визуализаций функций в последнем слое может «заглушить» изменения, внесенные новыми функциями-собаками.

Вывод

В этом проекте мы визуализировали, как изменяются обнаруженные функции нейронной сети по мере того, как сеть настраивается на новую задачу. Мы настроили предварительно обученную модель ResNet-50 ImageNet для меньшего набора данных изображений пород собак. Как и ожидалось, в визуализациях тонко настроенной сети возникли новые собачьи черты, особенно на более глубоких уровнях. Согласно нашей метрике подобия, последний слой в сети нарушил этот шаблон, подчеркнув потенциальный недостаток или сложность использования визуализаций функций для оценки изменений в сети.

Учитывая это, давайте обсудим еще несколько нюансов, касающихся этого проекта:

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

Приложение

Stanford Car Dataset

В этом проекте также была выполнена вторая задача точной настройки. Как и прежде, базовой сетью был ResNet-50, предварительно обученный на ImageNet. Вторым набором данных был Stanford Cars Dataset [4], содержащий ~ 16 000 изображений автомобилей 196 различных моделей автомобилей. При стандартном подходе к тонкой настройке точность классификации этого нового набора данных составила 70%.

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

Удаление ошибочных визуализаций функций

Поскольку визуализация функций - это проблема оптимизации, и для каждого слоя использовалась только одна конфигурация, некоторые каналы не удалось оптимизировать, что привело к серым изображениям. Рисунок 11 показывает количество серых изображений в каждом слое (в слое 3-узкое место5 их не было).

Чтобы идентифицировать и удалить эти серые изображения, должна быть определена функция оценки. Первый шаг - создать версию каждого изображения в оттенках серого (это можно сделать с помощью библиотеки Python Pillow). Затем вычисляется квадрат ошибки между исходной версией изображения RGB и версией в оттенках серого. Визуализации серых элементов очень похожи на их версии в оттенках серого, что приводит к более низкой ошибке (Рисунок 12). Фактически, построение отсортированных ошибок выявило большой скачок между ошибочными, серыми визуализациями элементов и нормальными. Все, что остается, - это затем удалить визуализации функций, которые находятся слева от этого пика (рисунок 13).

Расстояние между матрицей граммов

Во время экспериментов с показателями сходства между визуализациями функций мера была определена на основе матрицы Грама. Матрица Грама введена в нейронном стиле передачи [1] и представляет собой метод, который фиксирует текстурную информацию в изображении. Расстояние между матрицами Грама затем определяется как квадрат ошибки между матрицами Грама первого и второго изображений при сравнении.

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

Однако, судя по визуальному осмотру, эта метрика не так эффективна, как косинусное подобие. Одна из причин заключается в том, что расстояние между матрицами Грама сильно различается на разных уровнях сети, что затрудняет их объединение в одну меру.

использованная литература

  1. Гэтис, Л., Эккер, А., и Бетге, М. (2016). «Нейроалгоритм художественного стиля». Журнал видения, 16 (12), 326. DOI: 10.1167 / 16.12.326
  2. Хе К., Чжан Х., Рен С. и Сун Дж. «Глубокое остаточное обучение для распознавания изображений». В CVPR, 2016 г.
  3. Хосла А., Джаядевапракаш Н., Яо Б. и Фей-Фей Л. «Новый набор данных для детальной категоризации изображений». Первый семинар по детальной визуальной категоризации (FGVC), Конференция IEEE по компьютерному зрению и распознаванию образов (CVPR), 2011 г.
  4. Краузе, Дж., Старк, М., Дэн Дж., Фей-Фей, Л. «Трехмерные представления объектов для детальной категоризации». 4-й семинар IEEE по 3D-представлению и распознаванию на ICCV 2013 (3dRR-13). Сидней, Австралия. 8 декабря 2013 г.
  5. Олах К., Мордвинцев А. и Шуберт Л. 2017. Визуализация функций. Дистиллировать. Https://distill.pub/2017/feature-visualization