Обзор алгоритмов сжатия и ускорения модели CNN

машинное обучение алгоритм

предисловие

С тех пор, как AlexNet одним махом выиграл соревнование по классификации изображений ILSVRC 2012 ImageNet, увлечение сверточной нейронной сетью (CNN) охватило всю область компьютерного зрения. Модель CNN быстро заменила традиционные ручные функции и классификаторы, не только предоставив сквозной метод обработки, но и значительно обновив точность каждой задачи конкурса изображений и даже превзойдя человеческий глаз. задача). В то время как модели CNN продолжают раздвигать границы точности для задач компьютерного зрения, их глубина и размер растут в геометрической прогрессии.

Таблица 1. Сравнение размеров, количества расчетов и количества параметров нескольких классических моделей

Model

Model Size(MB)

Million

Mult-Adds

Million

Parameters

AlexNet[1]

>200

720

60

VGG16[2]

>500

15300

138

GoogleNet[3]

~50

1550

6.8

Inception-v3[4]

90-100

5000

23.2

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

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

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

В этом документе в основном обсуждаются следующие репрезентативные статьи и методы, включая SqueezeNet.[5]、 Глубокое сжатие[6], XNorNet[7], Дистилляция[8], Мобайлнет[9]и ShuffleNet[10], также можно грубо классифицировать в соответствии с приведенными выше методами:

Таблица 2 Несколько классических методов сжатия и сравнения

Method

Compression  Approach

Speed  Consideration

SqueezeNet

architecture

No

Deep Compression

weights

No

XNorNet

weights

Yes

Distilling

architecture

No

MobileNet

architecture

Yes

ShuffleNet

architecture

Yes

   

1. Сожмите сеть

1.1 Дизайн-мышление

SqueezeNet представляет собой миниатюрную структуру модели сети, предложенную в статье 2016 года «SqueezeNet: точность на уровне AlexNet с параметрами в 50 раз меньше и размером модели

Основная идея SqueezeNet заключается в использовании наименьшего количества параметров при сохранении точности.

И это конечная цель всех методов сжатия моделей.

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

Стратегия 1. Замените ядро ​​свертки 3x3 ядром свертки 1x1.

Эту стратегию легко понять, потому что параметры ядра свертки 1x1 составляют 1/9 параметров ядра свертки 3x3.Это изменение теоретически может уменьшить размер модели в 9 раз.

Стратегия 2. Уменьшить количество входных каналов, вводимых в ядро ​​свертки 3x3.

Мы знаем, что для сверточного слоя с ядром свертки 3x3 число всех сверточных параметров слоя (независимо от смещения) равно:

В формуле N — количество ядер свертки, то есть количество выходных каналов, а C — количество входных каналов.

Следовательно, чтобы обеспечить снижение параметров сети, необходимо уменьшить не только количество ядер свертки 3х3, но и количество входных каналов, вводимых в ядро ​​свертки 3х3, то есть количество С в формуле .

Стратегия 3. Поместите даунсэмплинг в слоях за сетью, насколько это возможно.

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

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

1.2 Сетевая архитектура

Основываясь на трех вышеуказанных стратегиях, автор предлагает структуру сетевого блока, аналогичную начальной, называемую пожарным модулем. Огненный модуль содержит сверточный слой сжатия (содержит только ядро ​​свертки 1x1) и слой свертки расширения (содержит ядро ​​свертки 1x1 и 3x3). Среди них слой сжатия опирается на идею начала и использует ядро ​​свертки 1x1 для уменьшения количества входных каналов, вводимых в ядро ​​свертки 3x3 в слое расширения. Как показано на рисунке 1.

Рисунок 1. Принципиальная схема структуры пожарного модуля[5]

Среди них количество ядер свертки 1x1 в слое сжатия определяется как s1x1 Аналогично, количество ядер свертки 1x1 в слое расширения равно e1x1, а количество ядер свертки 3x3 равно e3x3. Пусть s1x1

· Чтобы гарантировать, что ядро ​​свертки 1x1 и ядро ​​свертки 3x3 имеют одинаковый выходной размер, ядро ​​свертки 3x3 использует 1-пиксельное заполнение нулями и шаг.

· Слой сжатия и слой расширения используют RELU в качестве функции активации.

· Используйте отсев 50 % после пожара9

· Из-за огромного количества параметров в полносвязном слое мы используем идею NIN[11] для удаления полносвязного слоя и использования вместо него глобального среднего пула. 

1.3 Экспериментальные результаты

Таблица 3 Сравнительные экспериментальные результаты различных методов сжатия на ImageNet [5]

В приведенной выше таблице показано, что по сравнению с традиционным методом сжатия SqueezeNet может достичь максимальной степени сжатия без потери точности (или даже с небольшим улучшением), сжимая исходный AlexNet с 240 МБ до 4,8 МБ, а в сочетании с глубоким сжатием он может достигать 0,47 МБ, что полностью удовлетворяет потребности развертывания мобильных терминалов и передачи в сетях с низкой пропускной способностью.

Кроме того, автор также позаимствовал идею ResNet, изменил исходную структуру сети, добавил обходные ветки и повысил точность классификации примерно на 3%.

1.4 Соображения по скорости

Хотя основной целью статьи является уменьшение размера модели, нет никаких сомнений в том, что SqueezeNet использует большое количество ядер свертки 1x1 и 3x3 в структуре сети для повышения скорости. прямой расчет слоя, использование ядра свертки 1x1 позволяет избежать дополнительных операций im2col и напрямую использовать gemm для выполнения операций ускорения матрицы, поэтому это оказывает определенное влияние на оптимизацию скорости. Однако эффект от этого ускорения по-прежнему ограничен, кроме того, SqueezeNet использует 9 огневых модулей и два сверточных слоя, поэтому по-прежнему требуется большое количество обычных операций свертки, что также является узким местом, влияющим на дальнейшее повышение скорости.

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

Глубокое сжатие взято из статьи С. Хана 2016 ICLR «Глубокое сжатие: сжатие глубоких нейронных сетей с обрезкой, обученным квантованием и кодированием Хаффмана». Эта статья получила награду за лучшую статью ICLR 2016, а также является важной вехой.Она возглавляет новую волну направления исследований миниатюризации и ускорения моделей CNN, что привело к большому количеству отличных работ и статей в этой области в прошлом. два года. .

2.1 Алгоритм процесса

В отличие от предыдущего SqueezeNet «Школы сжатия архитектуры», Deep Compression принадлежит к «Школе сжатия веса». Эти две статьи принадлежат команде S.Han, поэтому комбинация двух методов, комбинация двух мечей может достичь максимального эффекта сжатия. Этот экспериментальный результат также подтверждается приведенной выше таблицей.

Поток алгоритма глубокого сжатия состоит из трех шагов, как показано на рисунке 2:

Рис. 2 Конвейер глубокого сжатия[6]

1) Обрезка (весовая обрезка)

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

Рисунок 3 представляет собой распределение параметров в сверточном слое LeNet conv1, обученном на MNIST. Видно, что большая часть весов сосредоточена около 0, а вклад в сеть невелик. Малые веса установлены равными 0, так что эти веса не активируются, чтобы сосредоточиться на обучении оставшихся ненулевых весов и, наконец, достичь цели сжатия размера при обеспечении точности сети.

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

Рис. 3. Распределение веса слоя LeNet conv1

2) Квантование (весовое квантование)

Квантование весов здесь основано на кластеризации весов, которая дискретизирует непрерывно распределенные веса, тем самым уменьшая количество весов, которые необходимо сохранить.

· Инициализировать центр кластера, и эксперименты показывают, что линейная инициализация является лучшей;

· Используйте алгоритм k-средних для кластеризации и разделите веса на разные кластеры;

· В прямом расчете каждый вес представлен своим центром кластера;

· При обратном вычислении подсчитывайте градиенты в каждом кластере и передайте их обратно.

Рис. 4. Процесс вычисления прямого и обратного квантования веса[6]        

3) Huffmanencoding (кодирование Хаффмана)

Кодирование Хаффмана использует кодирование с переменной длиной для уменьшения средней длины кодирования и дальнейшего сжатия размера модели.

2.2 Хранение моделей

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

· Для отсеченной модели, так как большое количество параметров в каждом слое равно 0, вам нужно только хранить ненулевые значения и их индексы в будущем.В этой статье для хранения используется CSR (Compressed Sparse Row) , На этом шаге можно достичь коэффициента сжатия 9x~13x.

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

· Наконец, кодирование Хаффмана переменной длины используется для приведенной выше сжатой модели для достижения коэффициента сжатия примерно 1x.

2.3 Экспериментальные результаты

Таблица 4 Коэффициенты сжатия различных сетей, использующих глубокое сжатие[6]

С помощью SqueezeNet+Deep Compression исходный 240M AlexNet может быть сжат до 0,47M, достигая коэффициента сжатия около 510x.

2.4 Соображения скорости

Видно, что основной дизайн Deep Compression заключается в сжатии размера сетевого хранилища, но в прямом направлении, если модель хранилища считывается в расширение, это не дает большего улучшения скорости. Поэтому Сонг Х. и др. разработали набор аппаратных средств прямого ускорения EIE на базе FPGA специально для модели со сжатием.[12], вы можете изучить его, если вам интересно.

три,XNorNet

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

Основные вклады этой статьи заключаются в следующем:

· Предложил BWN (Binary-Weight-Network) и XNOR-Network.Первый только бинаризирует сетевые параметры, обеспечивая 32-кратное сжатие хранилища и 2-кратное повышение скорости, а второй выполняет как сетевой ввод, так и параметры.Бинаризация, при этом достигается 32-кратное сжатие хранилища , с 58-кратным улучшением скорости;

· Предложен новый алгоритм бинаризации весов;

· Первая работа по представлению бинарных сетевых результатов для крупномасштабных наборов данных, таких как ImageNet;

· Предварительное обучение не требуется, возможно обучение с нуля.

3.1 BWN

Чтобы обучить бинаризованную сеть веса,

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

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

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

3.2 XNOR-Net

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

в формуле

Аналогично, существует оптимальное решение следующего вида

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

Типичный сверточный блок в XNOR-Net показан на рисунке 6. В отличие от традиционного блока порядок каждого модуля был скорректирован. Чтобы уменьшить потерю точности, вызванную бинаризацией, входные данные сначала подвергаются обработке нормализации BN, а слой BinActiv используется для бинаризации входных данных, за которыми следует бинаризованная операция свертки и, наконец, объединение.

Рисунок 5 Процесс обучения BWN[7]

Рисунок 6. Сравнение традиционного блока свертки и блока свертки XNOR-Net.[7]          

3.3 Экспериментальные результаты

Таблица 5 Сравнение результатов бинарной сети и AlexNet на ImageNet[7]

По сравнению с ALexNet, сеть BWN может достичь в основном такой же или даже немного большей точности, а XNOR-Net также имеет бинарную обработку входных данных, и производительность немного снижается.

Четыре,Distilling

Алгоритм дистилляции — это алгоритм обучения, аналогичный сетевой миграции, предложенный Хинтоном и др. в статье «Дистилляция знаний в нейронной сети».

4.1 Основная идея

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

Среди них целевая функция обучения малой модели (дистиллированной модели) состоит из двух частей.

1) Перекрёстная энтропия (кросс-энтропия) вывода softmax большой модели (громоздкой модели) называется soft target. Среди них вычисление softmax добавляет температуру гиперпараметра T для управления выходом, и формула расчета становится

Чем выше температура T, тем умереннее выходное распределение, меньше вероятность zi/T и больше энтропия.Однако, если T слишком велико, неопределенность, вызванная большой энтропией, будет увеличиваться, и неразличимость будет вырос.

Что касается того, почему для расчета потерь используется мягкая цель, автор считает, что в задаче классификации основная истина представляет собой детерминированный однократный вектор. С точки зрения классификации рукописных чисел, для числа 3 вероятность того, что его метка равна 3, равна 1, но вероятность других значений равна 0, а для мягкой цели она может представлять вероятность того, что метка равна 3, если число написано как 5, вы также можете указать определенную вероятность того, что метка равна 5, чтобы предоставить больше информации, например

 

номер

0

1

2

3

4

5

6

7

8

9

истинностное значение

0

0

0

1

0

0

0

0

0

0

мягкая цель

0

0

0

0.95

0

0.048

0.002

0

0

0

2) Перекрестная энтропия (T=1) с истинной истиной

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

4.2 Экспериментальные результаты

Автор приводит сравнение экспериментальных результатов по распознаванию речи, как показано в следующей таблице. Таблица 6. Сравнение точности модели дистилляции и исходной модели.[8]

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

4.3 Вопросы скорости

Первоначальное предложение Distilling не было направлено на ускорение сети, и конечная эффективность вычислений по-прежнему зависит от масштаба расчета модели дистилляции.Компромисс между масштабом и поддержанием производительности — направление, достойное исследования.

пять,MobileNet

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

5.1 Сверточное разложение

MobileNet опирается на идею факторизованной свертки и делит обычную операцию свертки на две части:

·       Depthwise Convolution

Каждый фильтр ядра свертки выполняет операции свертки только для определенного входного канала, как показано на рисунке ниже, где M — количество входных каналов, DKразмер ядра свертки:

Рис. 7. Свертка по глубине[9]

Вычислительная сложность свертки по глубине равна DK DKMDF DF, где DF— размер карты объектов, выводимой сверточным слоем.

·       Pointwise Convolution

Многоканальный вывод слоя свертки по глубине объединяется с использованием ядра свертки 1x1, как показано на следующем рисунке, где N — количество выходных каналов:

Рис. 8. Точечная свертка[9]

Вычислительная сложность точечной свертки равна MND.F DF

Вышеупомянутые два шага вместе называются разделимой по глубине сверткой.

Вычислительная сложность стандартной операции свертки равна DK DKMNDF DF

Следовательно, путем разложения стандартной свертки на два уровня операций свертки можно рассчитать теоретический коэффициент повышения эффективности вычислений:

Для сверточных ядер размером 3x3 свертка DePthwise Separable Convolution теоретически может повысить эффективность примерно в 8–9 раз.

5.2 Архитектура модели

Рисунок 9. Сравнение обычного модуля свертки и модуля свертки MobileNet[9]

Блок свертки MobileNet показан на рисунке выше, и за каждой операцией свертки следует операция BN и операция ReLU. В MobileNet, поскольку ядро ​​свертки 3x3 применяется только в глубинной свертке, 95% вычислений сосредоточено в свертке 1x1 в точечной свертке. Для caffe и других сред глубокого обучения, которые используют матричную операцию GEMM для реализации свертки, свертка 1x1 не требует операции im2col, поэтому библиотеку ускорения матричных операций можно напрямую использовать для быстрых вычислений, тем самым повышая эффективность вычислений.

5.3 Экспериментальные результаты

Таблица 7 Сравнение точности между MobileNet и основными крупными моделями в ImageNet[9]

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

шесть,ShuffleNet

ShuffleNet — это сетевая архитектура, предложенная Face++ в этом году для перспективного развертывания мобильных терминалов. ShuffleNet основан на групповой идее MobileNet, которая ограничивает операции свертки определенными входными каналами. Разница в том, что ShuffleNet разбрасывает входные группы, чтобы гарантировать, что рецептивное поле каждого ядра свертки может быть рассредоточено на вход разных групп, что увеличивает обучаемость модели.

6.1 Дизайн-мышление

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

6.2 Сетевая архитектура

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

Предложите модуль BottleNeck, аналогичный ResNet

Опираясь на идею обходной ветви ResNet, ShuffleNet также представляет аналогичные сетевые устройства. Разница в том, что в единице шага=2 вместо операции сложения используется операция concat, а вместо операции свертки 1x1stride=2 используется объединение средних значений, что эффективно сокращает количество вычислений и параметров. Структура ячейки показана на рисунке 10.

· Предлагается использовать свертку 1x1 для использования групповой операции для повышения производительности классификации.

Как упоминалось в MobileNet, на операцию свертки 1x1 приходится около 95% вычислений, поэтому автор также изменил 1x1 на групповую свертку, что значительно сокращает объем вычислений по сравнению с MobileNet.

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

Операция перемешивания ShuffleNet показана на рисунке 11.

Рисунок 10 Сетевой блок ShuffleNet[10]  

Рис. 11. Перемешивание между разными группами[10]

6.3 Экспериментальные результаты

Таблица 8 Сравнение точности между ShuffleNet и MobileNet на ImageNet [10]

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

6.4 Вопросы скорости

Автор проверил эффективность сети на платформе ARM.Принимая во внимание такие факторы, как чтение памяти и планирование потоков, автор обнаружил, что теоретическое 4-кратное увеличение скорости соответствует примерно 2,6-кратному при фактическом развертывании. Автор приводит сравнение скорости с оригинальным AlexNet, как показано в следующей таблице.

Таблица 9 Сравнение скорости между ShuffleNet и AlexNet на платформе ARM [10]

заключительные замечания

В последние годы, в дополнение к ускоренной работе многих моделей CNN, появляющихся в академических кругах, крупные компании в отрасли также запустили свои собственные мобильные передовые вычислительные платформы, такие как Tensorflow от Google, caffe2 от Facebook и CoreML от Apple, только что запущенный в этом году. Считается, что развертывание глубокого обучения на мобильном терминале не будет проблемой в будущем в сочетании с итеративной оптимизацией сетевой архитектуры и непрерывным развитием технологии аппаратного ускорения вычислений.

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

[1] ImageNet Classification with DeepConvolutional Neural Networks

[2] Very Deep ConvolutionalNetworks for Large-Scale Image Recognition

[3] Going Deeper with Convolutions

[4] Rethinking the InceptionArchitecture for Computer Vision

[5] SqueezeNet: AlexNet-level accuracy with50x fewer parameters and <0.5MB model size

[6] Deep Compression: Compressing DeepNeural Networks with Pruning, Trained Quantization and Huffman Coding

[7] Distilling the Knowledge in aNeural Network

[8] XNOR-Net: ImageNet ClassificationUsing Binary Convolutional Neural Networks

[9] MobileNets: EfficientConvolutional Neural Networks for Mobile Vision Applications

[10] ShuffleNet: An ExtremelyEfficient Convolutional Neural Network for Mobile Devices

[11] Network in Network

[12]EIE: Efficient Inference Engine on Compressed Deep Neural Network

Идентификатор WeChat: iPaibanНажмите и удерживайте левый QR-код, чтобы следовать