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

Что такое трансферное обучение?

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

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

Как правило, модель выбирается и обучается на наборе данных, который имеет некоторые сходства с целевым набором данных. Обычно чаще всего выбирают набор данных ImageNet [3]. Большинство современных сверточных нейронных сетей (CNN), таких как VGG, ResNets или DenseNets, предварительно обученные в ImageNet, по умолчанию доступны в средах машинного обучения, таких как Pytorch.

Другой подход к переносному обучению

Как мы используем наш OPU для выполнения трансферного обучения? Прежде всего, мы удаляем линейные слои в конце сети, чтобы извлечь сверточные функции, связанные с входными изображениями. Матрица характеристик будет иметь размер (n, m), где n - количество образцов изображения, а m количество сверточных элементов .

Конвейер OPU для выполнения передачи обучения для набора данных изображения следующий:

  • Мы передаем изображения через CNN, чтобы извлечь сверточные особенности.
  • Поскольку входные данные OPU должны быть двоичными, мы кодируем сверточные функции в соответствии с их знаком: +1, если положительный, 0, если отрицательный. Несмотря на то, что это может показаться очень потерянным, оно работает на удивление хорошо.
  • Матрица сверточных признаков размера (n, m) проходит через OPU для вычисления матрицы случайных признаков (n, k). Выбор k ›m проецирует данные в многомерное пространство, где они могут быть линейно разделимы. С другой стороны, выбирая k ‹m, мы уменьшаем общий размер модели и ускоряем обучение за счет точности теста.
  • Мы подбираем линейный классификатор, такой как логистическая регрессия или Ridge, для случайных характеристик обучающей выборки.

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

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

  • Подход OPU может дать сравнимую точность по сравнению со стандартной процедурой обратного распространения ошибки за меньшее время обучения, поскольку он не требует вычисления градиента или нескольких проходов по данным;
  • OPU требует меньше времени на выбор гиперпараметров для моделирования. Нет ни скорости обучения, ни импульса для настройки, ни какой-либо особой чувствительности к размеру пакета. Единственными гиперпараметрами являются количество проекций, параметр регуляризации для классификатора гребней и индекс последнего слоя в сети;
  • Мы можем обучаться арифметике с более низкой точностью, такой как float16 или int8, и по-прежнему получать высокую точность теста с меньшим временем обучения и потреблением памяти, поскольку у нас нет проблем нестабильности, связанных с градиентами.

Использование OPU и DenseNet-169 для классификации животных

В этом сообщении в блоге мы используем модель [4] DenseNet169, предварительно обученную на ImageNet. Мы выбрали эту модель из-за ее глубины: с OPU мы можем удалять части архитектуры и при этом добиваться конкурентоспособных результатов с точки зрения точности и времени обучения. На рисунке 3 показана архитектура модели.

Мы обучаем модель на наборе данных Animal-10, доступном по этой ссылке.

Он состоит из 24 209 изображений, принадлежащих 10 различным классам, которые мы разделили на случайную группу с соотношением 80:20 между образцами поезда и тестовыми изображениями (19 363 изображения поезда против 4846 тестовых изображений). Предварительный просмотр изображений представлен на рисунке 4.

На рис. 5 показана зависимость точности теста от размера модели. Модель, обученная с помощью OPU, более точна, чем базовая линия обратного распространения. Это становится более очевидным по мере удаления из архитектуры большего количества слоев. Дальнейшее обучение и настройка гиперпараметров с обратным распространением может повысить точность окончательного теста, но наш альтернативный подход имеет то преимущество, что он работает «из коробки».

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

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

Мы не наблюдаем большого выигрыша во времени обучения между float32 и float16, но это связано с используемой моделью графического процессора (NVIDIA P100). Другая модель, такая как NVIDIA V100 или RTX 2080 с лучшими возможностями половинной точности, будет почти вдвое быстрее при извлечении сверточных функций.

Тренировка с низкой точностью: фрукт низко висящий

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

Процесс обучения не меняется: единственное отличие состоит в том, что библиотека TensorRT преобразует все веса и активаций сети в int8. Это, в свою очередь, позволяет нам выполнять вычисления непосредственно с 8-битными целыми числами, которые часто в два-четыре раза быстрее, чем в float32, и сокращают пропускную способность памяти в четыре раза. Есть предостережение: модель графического процессора должна поддерживать вычисления в формате int8. Это не относится к графическому процессору NVIDIA P100, поэтому для этого мы перешли на RTX 2080. Мы также запускаем ту же симуляцию в float32 и float16, используя TensorRT на RTX, чтобы обеспечить честное сравнение.

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

Мы потеряли менее 1% в точности, но снизили потребление памяти в 4 раза по сравнению с моделью float32; довольно сытно!

Даже несмотря на то, что время вычисления сверток сокращается вдвое, общее время обучения существенно не уменьшается, поскольку в нем преобладает решение задачи Риджа.

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

Код, используемый для создания графиков в этом сообщении в блоге, общедоступен по следующей ссылке: https://github.com/lightonai/transfer-learning-opu.

Более подробную информацию о технологии OPU LightOn можно найти на www.lighton.ai. Хотите классифицировать марки автомобилей вместо животных? Попробуйте наш OPU! Удаленный доступ к OPU через LightOn Cloud может быть предоставлен по приглашению.

Библиография

[1] Баевский, Алексей и др. «Предварительное обучение сетей самовнимания, основанное на закрытии». Препринт arXiv arXiv: 1903.07785 (2019).

[2] Каррейра, Жоао и Эндрю Зиссерман. «Quo vadis, признание действия? новая модель и набор данных кинетики ». Материалы конференции IEEE по компьютерному зрению и распознаванию образов. 2017 г.

[3] Ольга Русаковская *, Цзя Дэн *, Хао Су, Джонатан Краузе, Санджив Сатиш, Шон Ма, Чжихенг Хуанг, Андрей Карпати, Адитья Хосла, Майкл Бернштейн, Александр К. Берг и Ли Фэй -Fei. (* = равный вклад) Крупномасштабный конкурс визуального распознавания ImageNet. Международный журнал компьютерного зрения, 2015 г.

[4] Хуанг Г. и др. «Плотно связанные сверточные сети. arXiv 2017. » Препринт arXiv arXiv: 1608.06993