Преимущество сверточного слоя в глубоком обучении

при работе с изображениями

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

Во время сверточного наслоения есть несколько часто используемых приемов

Прежде чем мы продолжим, определенно стоит рассмотреть два метода, которые являются обычными для сверточных слоев Padding и Strides.

Заполнение:

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

Шаги:

Часто при запуске сверточного слоя требуется вывод с меньшим размером, чем ввод. Это обычное дело в сверточных нейронных сетях, где размер пространственных измерений уменьшается при увеличении количества каналов. Одним из способов достижения этого является использование уровня объединения (например, взяв среднее / максимальное значение каждой сетки 2 × 2, чтобы уменьшить каждое пространственное измерение вдвое). Еще один способ сделать это - использовать шаг:

Идея шага состоит в том, чтобы пропустить некоторые слайды ядра. Шаг 1 означает, что нужно выбрать слайды на пиксель друг от друга, поэтому в основном каждый слайд действует как стандартная свертка. Шаг 2 означает выбор слайдов на 2 пикселя друг от друга, пропуск всех остальных слайдов в процессе, уменьшение примерно в 2 раза, шаг 3 означает пропуск каждых 2 слайдов, уменьшение примерно в 3 раза и т. Д.

после применения сверточного слоя мы используем функцию ReLU.

Преимущества функции ReLU:

1. Ввести нелинейность

2. Ускоряет обучение, быстрее вычисляет

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

Есть некоторые преимущества pooling:

  1. Уменьшение размеров и вычислений
  2. Уменьшение переобучения за счет меньшего количества параметров
  3. Сделайте модель толерантной к вариациям и искажениям.

Таким образом, свертка и объединение дает определение инвариантного местоположения

Затем продолжаем этот процесс.

Эта модель дает примерно 75% точности классификации изображений из набора данных CIFAR10. Итак, давайте сделаем что-нибудь, чтобы повысить точность этой модели

We can do many other things to improve the accuracy of our convolutional model :

1. ResNets (остаточная сеть)

2. Регуляризация

3. Расширение данных

Прежде чем объяснять все эти темы, позвольте мне прояснить, что после применения всех вещей в нашей модели классификации изображений мы можем достичь точности более 90% менее чем за 5 минут с использованием одного графического процессора, вы можете применить эту модель при классификации изображений из Набор данных CIFAR10. В трех вышеупомянутых темах мы собираемся сделать следующее:

  • Нормализация данных
  • Увеличение данных
  • Остаточные соединения
  • Пакетная нормализация
  • Планирование скорости обучения
  • Снижение веса
  • Отсечение градиента
  • Оптимизатор адама

Теперь давайте объясним одно за другим:

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

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

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

2. Рандомизированные дополнения данных: Мы будем применять случайно выбранные преобразования при загрузке изображений из обучающего набора данных. В частности, мы дополним каждое изображение на 4 пикселя, а затем возьмем случайную обрезку размером 32 x 32 пикселя, а затем перевернем изображение по горизонтали с вероятностью 50%. Поскольку преобразование будет применяться случайным образом и динамически каждый раз при загрузке определенного изображения, модель видит немного разные изображения в каждую эпоху обучения, что позволяет лучше обобщать.

после этого мы делаем

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

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

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

6. Снижение веса: Мы также используем снижение веса, которое является еще одним методом регуляризации, который предотвращает увеличение веса за счет добавления дополнительного члена к функции потерь. Подробнее:

7. Отсечение градиента: Помимо весов слоев и выходных данных, также полезно ограничить значения градиентов небольшим диапазоном, чтобы предотвратить нежелательные изменения параметров из-за больших значений градиента. Этот простой, но эффективный прием называется градиентной обрезкой. Подробнее:

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

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

Резюме:

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

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

  • Нормализация данных: Мы нормализовали тензоры изображения путем вычитания среднего значения и деления на стандартное отклонение пикселей по каждому каналу. Нормализация данных предотвращает непропорциональное влияние значений пикселей из любого канала на потери и градиенты. Узнать больше
  • Увеличение данных: Мы применили случайные преобразования при загрузке изображений из набора обучающих данных. В частности, мы дополним каждое изображение на 4 пикселя, а затем возьмем случайную обрезку размером 32 x 32 пикселя, а затем перевернем изображение по горизонтали с вероятностью 50%. Узнать больше
  • Остаточные связи: Одним из ключевых изменений нашей модели CNN стало добавление остаточного блока, который добавляет исходный входной сигнал обратно к выходной карте характеристик, полученной путем передачи входных данных через один или несколько сверточные слои. Мы использовали архитектуру ResNet9 Подробнее.
  • Пакетная нормализация: После каждого сверточного слоя мы добавили слой пакетной нормализации, который нормализует выходные данные предыдущего слоя. Это в чем-то похоже на нормализацию данных, за исключением того, что она применяется к выходным данным слоя, а среднее значение и стандартное отклонение являются изученными параметрами. Узнать больше
  • Планирование скорости обучения: Вместо использования фиксированной скорости обучения мы будем использовать планировщик скорости обучения, который будет изменять скорость обучения после каждого пакета обучения. Существует множество стратегий для изменения скорости обучения во время обучения, и мы использовали Политику скорости обучения за один цикл. Узнать больше
  • Распад веса: Мы добавили в оптимизатор снижение веса - еще один метод регуляризации, который предотвращает увеличение веса за счет добавления дополнительного члена к функции потерь. Узнать больше

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

  • Оптимизатор Адама: Вместо SGD (стохастический градиентный спуск) мы использовали оптимизатор Адама, который использует такие методы, как импульс и адаптивная скорость обучения для более быстрого обучения. Есть много других оптимизаторов, из которых можно выбирать и с которыми можно экспериментировать. Узнать больше

Будущая работа:

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

Вы должны реализовать модель свертки в своем блокноте jupyter и провести эксперименты с гиперпараметрами, такими как num_epochs, скорость обучения и функция оптимизатора.

Обсуждаемые выше методы улучшат производительность нашей сверточной модели примерно с 75% до 90%.

Для вашей помощи я делюсь справочной записной книжкой.

Ссылки:

  1. Справочная записная книжка для запуска проекта в сверточной сети

2. Руководства по Jovian.ai

3. Отдельное видео о PyTorch

Если вам это понравилось, и вы нашли что-то интересное, вы можете мне один раз хлопнуть в ладоши и поделиться этим со своими друзьями.

Спасибо за чтение и удачи.