Квантованные БМ сети: упрощаем типы данных

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

Биполярные морфологические (БМ) сети — нейронные сети от Smart Engines практически без умножения. Мы уже показали, что они успешно справляются с задачами классификации изображений и поиска объектов на изображениях. Однако для достижения высокой вычислительной и энергоэффективности важно не только максимально упростить используемые операции, но и взять максимально простой и компактный тип данных, то есть отквантовать нейронную сеть. Так что насчет квантования БМ сетей?

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

  • БМ нейроны заменяют классические в сверточных слоях, другие слои не меняются,

  • внутри БМ слоя используем только сложение и максимум,

  • на входе и выходе БМ слоя есть сложные функции — логарифм и экспонента, но не страшно, так как мы применяем их только к активации — вектору данных, который передается между слоями.

Рис. 1. Схема БМ слоя нейронной сети.
Рис. 1. Схема БМ слоя нейронной сети.

Схема квантования БМ слоя

Обычное линейное квантование входного вектора X к n-битам устроено так:

X = s_x X_q,

гдеX_q(i) \in [-2^{n - 1}, 2^{n-1} -1], s_x— вещественный коэффициент масштаба. 

У БМ слоя 2 матрицы весов и 1 вектор смещения. Будем квантовать их линейно, но со своими коэффициентамиs_v^+, s_v иs_b, гдеn — разрядность весов (такая же как и у входа слоя), аn_e — разрядность смещения.

Затем нам нужно выполнить операцию\log дляX^+_q = \max(X_q, 0) иX^-_q = \max(-X_q, 0). Для этого мы используем предварительно вычисленную таблицу:

Y_q = \text{LUT}_{\log}(X_q, s_x, s_v) = \left[\log(s_x X^q) / s_v \right] 

где[\cdot] обозначает округление до ближайшего целого числа, аY_q — выходной вектор.

Такая таблица содержит2^n записей и хранитn_{l}-битные целые значения. Таким образом, ее размер составляетn_l \cdot 2^n, что составляет всего 512 байт даже дляn_l = 16 иn = 8. Обратите внимание, что параметрыs_x иs_v определяются на этапе обучения и не изменяются во время работы сети.

Поскольку мы используем разные масштабные коэффициенты для весовV^+ иV^-, мы используем 2 таблицы поиска и получаем 4 логарифмированных вектора — по одному на каждый вычислительный путь.

Следующий шаг — суммированиеY^{\pm \pm}_q иV^{\pm}_q, от которых мы берем максимумы и получаемZ^{\pm\pm}_q. Эту операцию можно выполнить напрямую с целыми значениями, поскольку сигнал и веса имеют одинаковый коэффициент масштаба. 

Дальше мы вычисляем экспоненту с помощью таблицы:

\text{LUT}_{\exp}(z_q, s_v, s_b) = \left[\exp(s_v z^q) / s_b \right]

Эта таблица используетn_l+1-битные целочисленные значения в качестве входных данных и выводитn_e-битные значения, чтобы дальше можно было складывать их без масштабирования. Так как после обучения модели мы знаем параметрыs_v иs_b, то можем подсчитать всю таблицу заранее. Ее размер составляетn_e \cdot 2^{k+1} бит и нам нужно 2 таких таблицы для вычисления\exp для всех 4 вычислительных путей БМ нейрона.

Наконец, мы выполняем суммирование результатов\exp и добавление смещения. Затем результат квантуется обратно кn битам для дальнейшей обработки сетью. Например, дальше можно применить кусочно-линейную активацию\sigma(\cdot). Предлагаемая схема квантования проиллюстрирована на Рис. 2.

Ее параметры:

  • n — разрядность входного вектора и весов;

  • n_l — разрядность выхода таблицы логарифма;

  • n_e— разрядность выхода таблицы экспоненты и смещения.

Мы решили рассмотреть квантовании сn = 8, поскольку 8-битное квантование для классических сетей работает практически без потерь с точки зрения качества распознавания. Однакоn_l = n_e = 8 не обеспечивают достаточно точных вычислений из-за нелинейного роста диапазона после операций\log и\exp. Собственно поэтому мы сделали их отдельными параметрами, которые подбираются экспериментально. При этом они не обязательно должны быть кратными 8, так как аппаратной реализации мы не ограничены по разрядности, как на центральных процессорах или видеокартах.

Рис. 2. Предложенная схема квантования БМ слоя.
Рис. 2. Предложенная схема квантования БМ слоя.

Наилучшие параметры квантования для входного или выходного вектораXопределяются:

F(s) = ||X - s \left [X / s \right ]||_2 \to \min ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~(1)

для всех репрезентативных значенийX.

Отметим, что в общем случаеF не является выпуклой, что сильно усложняет поиск экстремума. Поэтому мы использовали простое приближенное решение. Мы вычислили гистограмму значенийX на обучающей выборке, а затем просто посчитали функциюF(s) для набора равноудаленных точекs_0, ..., s_K, из которых и выбрали минимум.

Для весов и смещений все проще — они уже известны для обученной сети и поэтому нет необходимости приближать распределение гистограммой. Пример распределения весов сверточного БМ слоя показан на Рис. 3.

Рис. 3. Пример распределения весов БМ сверточного слоя a), b).
Рис. 3. Пример распределения весов БМ сверточного слоя a)V^+, b)V^-.

Резюме: полученный алгоритм квантования

Обработаем все БМ слои последовательно от первого к последнему. Дляi^{го} БМ слоя:

  1. Определить параметры квантованияs_x(i), s_v^+(i), s_v^-(i) иs_b(i) путем приближенного решения (1) на равномерной сетке.

  2. Определить квантованные веса и смещения:

V^+_q(i) = \left[ {V^+(i) / s_v^+(i)}\right]

V^-_q(i) = \left[ {V^-(i) / s_v^-(i)}\right]

v^b_q(i) = \left[ {v^b(i) / s_b(i)}\right]

    3. Заморозить новый квантованный слой и дообучить оставшуюся часть сети.

Эксперименты

Теперь мы экспериментально определим необходимые параметры схемы квантования на базовых моделях типа LeNet, обученных на наборе данных MNIST. Их архитектуры показаны в Таблице 1. Начальная точность на тестовом наборе составила 98.29% для BM-CNN1 и 98.65% для BM-CNN2.

Мы использовали 10% обучающего набора данных для оценки параметров квантования. Количество ячеек гистограммы было установлено равным 1000. Количество точек сетки для каждого квантованного вектора или матрицыX было равно 1000 в диапазоне[0.7 s_{max}, 1.1 s_{max}], гдеs_{max} = 2 \max(|\max X|, |\min X|) / (2^n - 1). Этот коэффициент масштаба позволяет нам представлять все значения изX. Дообучение выполнялось с помощью оптимизатора Adam с параметрами по умолчанию.

Таблица 1. Архитектуры рассмотренных моделей.

Модель

Архитектура

Число параметров

BM-CNN1

conv1(3, 3, 16) — relu — conv2(3, 3, 32) — relu — conv3(3, 3, 32) — relu — fc (10) — softmax

28k

BM-CNN2

conv1(3, 3, 16) — relu — conv2(3, 3, 32) — relu — conv3(3, 3, 32) — relu — conv4(3, 3, 32) — relu — conv5(3, 3, 32) — relu —
fc (10) — softmax

65k

Определение разрядности логарифма

В нашем первом эксперименте мы исследовали точность классификации с различными разрядностями таблицы для вычисления логарифма (параметрn_l в схеме квантования).

Мы начали сn_l = n = 8 и увеличивали его до тех пор, пока не достигли оптимальной точности классификации. Битовая ширина\expn_e была установлена в 32, чтобы не влиять на результаты эксперимента. Результаты показаны в таблице 2.

Таблица 2. Точность классификации 8-битных BM-CNN с различной разрядностью логарифмаn_ l

Модель

Квант. слоев

n_l

Точность без дообучения, %

Точность с дообучением, %

BM-CNN1

1

8

98.0

98.2

9

98.0

98.3

10

98.0

98.1

2

8

52.0

98.1

9

97.6

98.3

10

97.6

98.3

3

8

52.3

98.2

9

95.2

98.2

10

95.2

98.2

BM-CNN2

1

8

98.2

98.4

9

98.2

98.7

10

98.2

98.5

2

8

46.1

98.6

9

77.1

98.5

10

77.1

98.6

3

8

68.6

98.7

9

92.7

98.7

10

92.7

98.6

4

8

72.6

98.7

9

91.6

98.6

10

91.6

98.6

5

8

90.8

97.9

9

90.1

98.6

10

90.1

98.7

Эти эксперименты показали, чтоn_l = 9 дает лучшую конечную точность, чемn_l = 8, но дальнейшее увеличение не дает большого выигрыша. Мы также видим, что квантование без дообучения приводит к существенному ухудшению точности, тогда как дообучение позволяет ее вернуть.

Определение разрядности экспоненты

Затем мы посмотрели, как на результат влияет разрядность экспоненты при фиксированном значенииn_l = 9. Точность для BM-CNN2 без дообучения показана на Рис. 4. Мы видим, что для маленьких разрядностей, она очень низкая и для достижения разумной точности необходимо довольно большоеn_e: не менее 17 бит.

Рис. 4 Точность квантованной модели BM-CNN2 с различными разрядностями экспоненты.
Рис. 4 Точность квантованной модели BM-CNN2 с различными разрядностями экспоненты.

Финальное качество после дообучения

Мы использовали схему квантования с наименьшими возможными разрядностями, то естьn = 8, n_l = 9 иn_e = 17.

Результирующее качество после дообучения составило 98.2% для BM-CNN1 и 98.6% для BM-CNN2, то есть оказалось не хуже, чем у неквантованных аналогов.

Заключение 

Итак, мы показали как квантовать БМ сети для основных задач классификации изображений. Квантованные слои BM используют целочисленные операции сложения/вычитания, беря максимум и выполняя поиск в предварительно вычисленных таблицах. Это означает, что они предоставляют возможности для простой и быстрой аппаратной реализации нейронных сетей на специализированных устройствах, таких как FPGA, ASIC и нейроморфные процессоры.

Поскольку квантованные БМ модели нацелены на энергоэффективные устройства, мы рассмотрели простые архитектуры семейства LeNet-5. Наши результаты показывают, что для успешного распознавания достаточно 8-битных весов, 7-битных логарифмов и 17-битных таблиц поиска экспоненты. Точность исходных сетей с 3 и 5 биполярными морфологическими сверточными слоями составила 98.3% и 98.7% и осталась неизменной для квантованных сетей после дообучения.

© Habrahabr.ru