Тематические исследования CNN

  • Как собрать компоненты CNN?
  • Учитесь на другом исходном коде / архитектуре CNN.
  • LeNet-5, AlexNet, VGG, ResNet, нейронная сеть Inception.
  • Идеи из одного приложения / архитектуры могут передаваться в другие области.

Классическая сеть

  • Letnet-5: полутоновое изображение чисел (32 x 32) - ›два времени фильтрации и объединения (4 слоя) → 2 слоя полностью связанных → soft max func → подписи. Цель распознавать числа.

  • AlexNet: почти то же самое, что и LeNet, расширяет больше слоев и параметров в масштабе миллионов.

  • VGG-16: все Conv и max-poll в сети имеют одинаковые настройки. Но сеть очень большая, больше, чем AlexNet. Интересно, что в то время как максимальное объединение уменьшает размер «тензора» данных, количество фильтров увеличивается в соответствии со шкалой 2.

Реснет

  • Исчезающая, взрывающаяся информация о градиенте? Как обучить очень глубокую нейронную сеть?
  • Остаточный блок. Как правило, ввод будет обрабатываться в рамках двух линейных преобразований с активацией Relu. Остаточная сеть копирует вход непосредственно во второй выход преобразования и передает сумму в окончательный Relu.

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

Почему ResNet работает?

  • Давайте подумаем о сценарии обучения: если W [l + 1] = 0 и b [l + 1] = 0, то выход a [l + 2] = a [l] и, таким образом, «g» является тождественной функцией. Напомним, что Relu отфильтровывает отрицательные значения a [l].
  • Тогда в худшем случае ничего не изучая или нулевых весов, сеть все еще может изучить функцию идентификации. Что мы знаем хотя бы одно решение для сети.
  • В «простой» сети, если W [l + 1] = 0 и b [l + 1] = 0, то a [l + 2] = 0. Конечно, когда вес исчезает, ничего значимого не возвращается. Мы не знаем «худшего» решения.
  • Тогда «остаток» означает изучение чего-то остаточного / добавленного преобразования фактического ввода, но полезного. «Обычная» сеть просто изучает последовательное преобразование ввода через слои.

Сеть в сети

  • 1 х 1 свертка. Технически, оператор 1x1 conv в матрицах - это усиление входных данных. НО, стоит, когда входными данными являются тензоры, например: изображение РБГ.
  • Фильтр теперь имеет размер 1x1x «глубина» в соответствии с 3-м измерением тензора данных. Взятие оператора conv (поэлементное умножение в 3-м измерении) → сумма → ReLu. То же самое работает в сети с 1 выходным узлом. Затем он возвращает число при применении свертки 1x1 на одном «желтом» слайде тензора данных. Несмотря на «глубину» тензора, на выходе получаются матрицы: Relu линейного преобразования путем свертки 1x1x «глубины» по тензорным слайдам.

  • Когда применяется много фильтров, выходная «глубина» - это количество фильтров. Это отклики тензора данных по каждой конфигурации свертки. Или отклики разных линейных преобразований. Это заставляет меня вспомнить о машинном обучении со случайной проекцией, которое использовалось 5 или 6 лет назад, это горячая тема. Или экстремальное машинное обучение :).
  • Разница с ›1 размером convo в том, что 1x1 сохраняет исходный размер 2 измерения. Затем уменьшается количество каналов, экономя время вычислений. Просто, но крепко :).

Начальная сеть

  • Сложно выбрать пул, конво или гиперпараметры?
  • Позвольте сделать все это с входными данными и сложить результаты вместе.

  • Вычислительная стоимость - проблема. Для 32 фильтров размером 5x5 в примере вход 28x28x192 → компьютер должен произвести вычисление 120 миллионов.
  • НО свертка 1x1 - наш друг. Let сначала уменьшает количество входных слоев или «глубину», а «начало» выполняет позже. Это «бутылочная» сеть.

  • Применяя 16 фильтров размером 1x1x192, чтобы уменьшить входной тензор до 28x28x16 и продолжить свертку 5x5….
  • Расчетное значение уменьшено со 120 миллионов до 2,4 м + 10,0 м = 12,4 м. Уменьшить примерно в 10 раз.
  • Резюме: сделайте их все + объедините
  • Начальный модуль

  • Я заметил, что когда размер фильтра свертки увеличивается, количество фильтров уменьшается. Может быть, больше «действий», чем копание «мелких» деталей.

  • Можно добавить какой-нибудь узел softmax посередине для выполнения задачи прогнозирования.
  • Это GoogLeNet

Использование реализации с открытым исходным кодом

  • Трудно воспроизвести только с публикацией статьи по глубокому обучению.
  • Проще поискать в Интернете автора реализации.
  • Google сети «ключевое слово + github»

Передача обучения

  • Многие открытые наборы данных, исходный код, предварительно обученная модель → могут использовать начальный вес → обучаться в новой области.
  • Например:

  • ЕСЛИ вы хотите обучить классификатор классифицирующим изображениям, содержащим «кошачьи» имена Тигра, Мисти и т. Д.
  • Какой самый быстрый способ обучить его на менее доступных данных о них?
  • Давайте использовать обученные веса для больших наборов данных, например ImageNet, в качестве входного веса и сетевой структуры для нашей цели. Есть 3 способа его использования:
  • 1. Используйте все обученные веса, «заморозьте» их (без переобучения), используйте выходные данные окончательного сетевого уровня, добавьте полностью связанный слой softmax и изучите его классификационные веса. Таким образом, мы используем расстояние от точки данных до другого «известного» класса в качестве функции для изучения.
  • 2. Практически так же, как и в первом способе, за исключением переобучения некоторых финальных слоев, используйте загруженные веса в качестве начальных точек.
  • 3. Переобучение всей сети с начальными загруженными весами. Конечно, это может произойти, если мы расширяем или модифицируем «структуру» кластера классов, а не находим ее структуру с самого начала.
  • Резюме: экономьте время и ресурсы, быстрее развивайтесь.

Увеличение данных

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

  • Изменение цвета

  • Реализуйте искажение данных во время обучения:

Состояние компьютерного зрения

  • Меньше данных = больше ручной инженерии / реальной работы человека по обработке данных / извлечению признаков / аннотированию данных / более сложным алгоритмам. Но трансферное обучение может помочь.
  • Больше данных = простые алгоритмы / учиться на данных / меньше инженерии.
  • Как получить более высокие оценки?
  • Объединение: обучайте алгоритмы независимо, усредняйте их результаты.
  • Мульти-кадрирование во время тестирования: запускайте классификаторы для разных культур тестового изображения и усредняйте результат.