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

В этом сообщении блога описаны теоретические методы уменьшения размера модели. Уменьшение размера моделей глубокого обучения - активная область исследований. Эти методы действительно эффективны, но конкретный тип используемых моделей машинного обучения включает чрезвычайно глубокие и сложные архитектуры (Симонян и др. (2014), Хе и др. (2015), Сегеди и др. (2016) ). Как мы можем просто превратить глубокую модель в более легкую, не снижая резко ее характеристики? Более того, существуют ли специализированные архитектуры для создания световых моделей при достижении самых современных характеристик? Обратите внимание, что исследователи тестируют свои алгоритмы, используя разные наборы данных. Таким образом, указанные точности нельзя напрямую сравнивать per se.

Глубокое сжатие

Han et al. (2015) разработали метод под названием Глубокое сжатие для уменьшения размера модели глубокого обучения. Их эксперименты эмпирически показали, что глубокое сжатие не оказывает значительного влияния на характеристики модели, при этом уменьшая ее размер с 35 до 49 раз. Процесс состоит из 3 независимых и оригинальных шагов, выполняемых последовательно: отсечение сети, обученное квантование и метод Хаффмана. кодирование.

Удаление сети

Как инициировано в Han et al. (2015) , сокращение сети заключается в точной настройке весов предварительно обученной сети с сохранением только релевантных. После обучения сети стандартным методом небольшие веса (по абсолютной величине) ниже порогового значения удаляются. Первоначальная плотная сеть превращается в разреженную, сохраняя наиболее важные связи. Модель переобучается с фиксацией удаленных весов на 0. Процесс отсечения применяется снова до тех пор, пока остальные веса не будут иметь высокие значения. Han et al. (2015) экспериментировали с этим методом, уменьшив количество параметров в 9 раз и 13 раз для AlexNet ( Крижевский и др. (2012) ) и VGG16 ( Симонян и др. ( 2014) ) соответственно.

Обученное квантование

Как поясняется в конвейере Han et al. (2015) , метод квантования применяется к весам модели после ее отсечения, но эти два метода можно применять независимо. Кластеризация реализуется по 32-битным весам (числам с плавающей запятой), а центроиды каждого кластера сохраняются как числа с плавающей запятой в кодовой книге. Исходные веса заменяются 2-битными индексами единиц (целыми числами) кодовой книги, соответствующими центроиду их кластера. Таким образом, несколько весов имеют одинаковые значения. Это называется Распределение веса, потому что модель должна сохранять только общее значение нескольких весов за один раз и создавать ссылки для их использования. Подобно методу отсечения сети, квантование применяется как цикл путем повторного обучения сети и реализации обновлений градиента в кластерах, упомянутых выше. После обновлений центроиды сохраняются в 32-битном формате с плавающей запятой для сохранения точности. По данным Han et al. (2015) , метод квантования должен иметь возможность уменьшить количество весов в 18 раз.

Кодирование Хаффмана

На предыдущем шаге веса получают дискретное распределение из индексов центроидов. Код Хаффмана - хорошо известный метод сжатия данных без потерь. Он хранит дискретные значения по вхождению, и каждое значение связано с общим символом (числом, буквой,…). Чем выше частота символа, тем меньше битов памяти. Этот метод значительно снижает требования к хранилищу за счет использования индексов разреженной матрицы. Согласно экспериментам Han et al. (2015) , кодировка Хаффмана уменьшает размер глобальной модели от 8 раз до 18 раз, сохраняя при этом характеристики неизменными.

Методы весового квантования

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

Бинаризованные нейронные сети

Courbariaux et al. (2016) выпустили метод обучения бинаризованных нейронных сетей (BNN), заменяющий значения веса и активации двоичными значениями. Авторы бинаризовали их детерминированным образом, используя простую знаковую функцию. Они также подробно описали стохастический способ вычисления вероятностей жесткой сигмоидной функции для присвоения значений 1 и -1. Детерминированная бинаризация в основном используется, в то время как стохастическая иногда появляется для активации и только во время обучения.

Градиенты вычисляются со значениями с плавающей запятой, поскольку алгоритм стохастического градиентного спуска (SGD) чувствителен к небольшим изменениям. Хотя производная знаковой функции почти везде равна нулю, они используют оценку ее частной производной. Он основан на фиктивной переменной, отменяющей высокие значения веса или активации, когда функция не дифференцируема. Во время прямого прохода веса скрытых слоев отображаются в пространство [-1, 1] и квантуются с помощью функции знака.

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

Обученное троичное квантование

Zhu et al. (2017) предлагает метод под названием Тренированное троичное квантование (TTQ), снижающий точность веса без значительного снижения точности. Этот метод преобразует веса в троичные значения, каждое из которых хранится в 2-х битах. Веса квантуются в три значения, характерные для каждого уровня: ноль для отмены бесполезных соединений, положительное значение и отрицательное значение.

Авторов вдохновила работа Li et al. (2016) . Веса полной точности масштабируются в [-1, 1] пробел. Затем веса квантуются до трех значений (1, -1 и 0) с использованием порога, общего для всех уровней. Наконец, для каждого слоя двоичные значения (1 и -1) обучаются независимо с точностью с плавающей запятой с использованием градиентного спуска. Значения хранятся в кодовой книге, как было введено Han et al. (2015) с индексами, полученными при обновлении весов полной точности. Во время тестирования начальные веса полной точности заменяются изученными значениями троичных весов, округленными для сохранения в 2-х битах.

Согласно реализациям авторов, ResNets с методом TTQ достигли лучших характеристик, чем полностью прецизионные. Этот метод, кажется, улучшает обобщение более глубоких моделей, избегая переобучения из-за большого количества параметров. Они также обучили настроенный AlexNet² с методом TTQ с использованием набора данных 2012 ImageNet. Получены результаты чуть лучше, чем при реализации с полной точностью, а размер модели уменьшен в 16 раз. Окончательная модель имеет небольшой вес, что сокращает время и затраты энергии на вывод.

Конкретные модельные архитектуры

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

SqueezeNet

Иандола и др. (2016) были вдохновлены Szegedy et al. (2014) и их начальный модуль в модели GoogLeNet, подробно описанный в моем предыдущем сообщении в блоге . Они разработали новый блок под названием Пожарный модуль w.r.t. три стратегии. Сверточные слои используют фильтры 1x1 вместо нескольких фильтров 3x3, чтобы уменьшить количество параметров в 9 раз для каждого слоя. Модуль Fire использует меньше фильтров, чем классическая архитектура, вызывая меньшее количество входных каналов для каждого слоя и, следовательно, меньше параметров. Понижение частоты дискретизации с использованием слоев пула применяется в сети в последнее время (близко к выходным данным), чтобы повысить точность без жадности в количестве используемых параметров. Формально модуль Fire представляет собой сверточный слой сжатия, за которым следует сверточный слой расширения. Слой сжатия содержит сверточные слои с фильтрами 1x1 с одним и тем же входом и производящими суммированные выходные данные. Таким же образом расширенный слой содержит сверточные слои с фильтрами 1x1 и 3x3. В модуле Fire количество фильтров в слое сжатия должно быть меньше общего количества фильтров в слое расширения.

Модель SqueezeNet имеет особую архитектуру, в которой используются сверточные слои, уровни объединения и модули Fire. Сверточный слой принимает изображение в качестве входных данных, за которым следуют 10 модулей Fire и последний сверточный слой перед слоем softmax. В своих экспериментах авторы достигли тех же показателей, что и модель AlexNet (240 МБ) (Крижевский и др. (2012)) над задачей ImageNet³, при этом уменьшив количество параметров в 50 раз (Модель 4,8 МБ). После применения глубокого сжатия Han et al. (2015) , как описано выше, они также получили те же характеристики, что и AlexNet, с в 510 раз меньшими параметрами» (модель 0,47 МБ).

MobileNet V1

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

Архитектура MobileNets основана на разделимой по глубине свертке, аналогичной факторизованной свертке. Во-первых, классическая свертка с фильтром фиксированного размера (например, 3x3) применяется ко всем входным данным, создавая одинаковое количество карт признаков, это свертка по глубине. Затем для каждой карты функций используются свертки с фильтрами 1x1, это точечная свертка. Факторизация исходных сверток с помощью фильтров 1x1 резко сокращает количество параметров.

Первый уровень модели MobileNet - это классический сверточный слой, принимающий изображение в качестве входных данных. Затем 13 разделимых по глубине сверток (по 2 слоя) следуют друг за другом. Средний слой объединения связывает карты функций и полностью связанный слой с softmax для вычисления прогнозов. В целом MobileNet имеет 28 слоев, каждый из которых сопровождается пакетной нормализацией и нелинейностью ReLU, за исключением полностью связанного.

Мобильные сети имеют переменную скорость и точность в зависимости от двух гиперпараметров. Множитель ширины - это значение от 0 до 1, делающее каждый слой более тонким за счет уменьшения количества входных и выходных каналов. Множитель разрешения - это целое число, соответствующее размеру входного изображения и внутренних представлений, чтобы уменьшить вычислительные затраты. Модель MobileNet с самыми высокими значениями множителей ширины и разрешения имеет 4,2 миллиона параметров и Howard et al. (2017) опубликовали топ-1 с результатом 70,6% по результатам конкурса ImageNet. При множителе ширины 0,25 [⁵] и множителе фиксированного разрешения, равном 1, максимальная точность составляет 50,6% при 0,5 миллиона параметров и модели в 14 раз быстрее, чем предыдущая. Если множитель ширины фиксирован, а множитель разрешения уменьшен, количество параметров не меняется, но модели работают быстрее, что немного снижает точность. Можно найти компромисс между этими двумя гиперпараметрами для разных приложений и их ожиданий.

SEP-Net

Ли и др. (2017) сосредоточили свою работу на обеих сторонах: метод сжатия модели и блочная архитектура для небольших CNN.

Они предлагают новый подход, называемый бинаризацией паттернов, чтобы преобразовать в двоичную форму определенные веса вместо того, чтобы квантовать или преобразовывать в двоичную форму все из них. Бинаризованы только фильтры kxk (k>1) сверточных слоев, используемые для извлечения узоров. Обратите внимание, что фильтры 1x1 используются для преобразования данных, и они должны хранить информацию в максимально возможном объеме. Таким образом, метод заключается в следующем: они обучают свою модель обычным способом, затем они бинаризует сверточные фильтры kxk и, наконец, они точно настраивают модель с двоичными значениями для фильтров kxk и с плавающей запятой для фильтров 1x1, используя тот же набор данных.

Чтобы разработать новый блок для небольших CNN, авторы разработали остаточный блок по шаблону (PRB). Он состоит из сверточного слоя с фильтрами 1x1 и сверточного слоя с фильтрами 3x3, выполняемыми параллельно. Карты характеристик, созданные двумя слоями, суммируются. Кроме того, они используют групповую свертку, разделяя входные карты признаков сверточных признаков на N (N=4 в их реализации). Свёртки применяются к каждой из этой подгруппы входных данных. Этот метод уменьшает количество параметров в N раз.

Модуль SEP-Net состоит из сверточного слоя с фильтрами 1x1, за которым следуют два PRB, и последний сверточный слой с фильтрами 1x1. Первый уровень - это уровень уменьшения размеров, а последний - уровень восстановления размеров. Таким образом, создается остаточная связь между входом блока и выходом последнего слоя. Модель SEP-Net чередует модуль SEP-Net и сверточный слой для подачи на полностью связанный слой softmax для классификации.

Ли и др. (2017) подчеркнули актуальность бинаризации паттернов, сократив количество параметров модели GoogLeNet почти в 2 раза. По сравнению с задачей ImageNet в 2012 году точность первого уровня снизилась только на 3%. Модель SEP-Net имеет максимальную точность 65,8%, близкую к уменьшенной GoogLeNet для модели 5,2 МБ с 1,3 млн параметров. Согласно их реализации, модель SqueezeNet (1,2 миллиона параметров, 4,8 МБ) имеет точность 60,4%, а MobileNet (1,3 миллиона параметров, 5,2 МБ) имеет точность 63,7%, что сделало SEP-Net государственной ультрасовременные небольшие CNN.

MobileNet V2

Sandler et al. (2018) недавно выпустили новую версию модели MobileNet, представленную Howard et al. (2017) . В своем новом архитектурном блоке они также использовали разделимые по глубине свертки (подробно описанные выше) с фильтрами 3x3. Между блоками свертки вставляются линейные преобразования. Это соответствует сверткам 1x1 по глубине входа без функции активации. Они назвали это линейным узким местом, чтобы предотвратить нелинейные преобразования, портящие информацию. Этот тип слоев уменьшает глубину входных карт объектов. Другой тип слоя, называемый сверткой расширения, используется для увеличения глубины карт функций от линейного узкого места. В этом слое соотношение глубин на входе и выходе называется степенью расширения.

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

MobileNetV2 состоит из полностью подключенного уровня, за которым следуют 19 инвертированных остаточных блоков с фиксированной степенью расширения. Множители ширины и разрешения исходной модели MobileNet также управляют соответственно количеством карт функций и разрешением входных данных в новой архитектуре.

Эта модель была обучена на разных наборах данных для решения нескольких задач. Он достиг лучших характеристик, чем MobileNetV1 в наборе данных ImageNet 2012 года для классификации изображений с меньшим количеством параметров. Sandler et al. (2018) также использовали модель SSDLite для обнаружения объектов , заменив свертки разделяемыми свертками. По словам авторов, они объединили модели SSDLite и MobileNetV2 и обучили их с помощью набора данных COCO. Они достигли лучших характеристик, чем модель YOLOv2 для обнаружения объектов в реальном времени, при уменьшении количества параметров в 10 раз. Таким же образом они адаптировали существующую модель для сегментации изображений, объединили ее с MobileNetV2 и обучили их на наборе данных PASCAL VOC 2012 года. Они показали худшую производительность, чем эталонная модель, но сократили количество параметров почти в 30 раз, что позволяет встраивать их в мобильные устройства.

Заключение

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

Если вы хотите внедрить глубокое обучение на мобильных устройствах, я думаю, вам следует взглянуть на свои проблемы, касающиеся веса приложения, производительности моделей, бизнес-ограничений и т. Д. И принять решение. В Zyl, например, нам нужно было быстро выпустить функцию интеллектуального поиска на iOS, сохранив при этом вес приложения ниже 150 МБ. Наша проблема заключалась в том, что встроенная модель увеличивала вес приложения на 300 МБ, но, к счастью, мы нашли секретный соус для поддержания высокой точности. Вы должны сбалансировать все ограничения вашей компании / проекта, чтобы найти правильный метод.

¹: Хотя, мы могли бы подумать о дальнейшем обучении модели для каждого человека.

²: Первый и последний слои сохраняют веса полной точности, тогда как остальные имеют троичные параметры.

³: Iandola et al. (2016) опубликовали рейтинг топ-1 в 57,5%.

⁴: Окончательная модель объемом 0,47 МБ имеет около 0,4 миллиона параметров.

⁵: количество функциональных карт делится в 4 раза.

⁶: ​​Рассматриваемый MobileNet V2 для сегментации изображений достиг показателя mIOU 75,32% для модели 2,11 МБ, в то время как тест ResNet-101 имеет показатель mIOU 82,70% для модели 58,16 МБ. Обратите внимание, что характеристики MobileNet V2 представлены лучше, но для более тяжелых моделей.