Глава 12. Тестирование, оптимизация и развертывание моделей
489
не равен 0. В частном случае, когда w
scale
равен 0 — то есть когда значения всех параме
тров веса совпадают — quantize(
w
) возвращает 0 для всех
w
.
Два вспомогательных значения,
w
min
и
w
scale
, сохраняются вместе с квантованным весовым
коэффициентом для возможности восстановления весов (процесс деквантования) во
время загрузки модели. Описывающее деквантование уравнение выглядит так:
dequantize(
v
) =
v
/ 2
B
×
w
scale
+
w
min
.
(12.2)
Это уравнение справедливо вне зависимости от того, равен ли
w
scale
нулю.
Процесс квантования весовых коэффициентов модели после обучения позволяет
существенно уменьшить размер модели: 16битное квантование снижает размер
модели примерно на 50 %, а 8битное — на 75 %. Эти значения — приближенные
по двум причинам. Вопервых, некоторая доля размера модели приходится на ее
топологию, описываемую в JSONфайле. Вовторых, как указано в инфобоксе выше,
квантование требует хранения двух дополнительных значений с плавающей точкой
(
w
min
и
w
scale
), помимо нового целочисленного значения (квантованных бит). Однако
занимаемое ими место обычно незначительно по сравнению с сокращением количе
ства битов, используемых для представления весовых параметров.
Квантование представляет собой преобразование с потерями. В результате сни
жения точности часть информации из исходных значений весов теряется. Что ана
логично снижению битовой глубины 24битного цветного изображения до 8битного
(подобного тем, которые можно было наблюдать на игровых приставках Nintendo
в 1980х), эффект которого хорошо заметен человеческому глазу. На рис. 12.2 при
ведено наглядное сравнение степени дискретизации, получающейся в результате
16 и 8битного квантования. Как и можно было ожидать, 8битное квантование
приводит к более «крупнозернистому» представлению исходных весовых коэффи
циентов. При 8битном квантовании на весь диапазон весовых параметров прихо
дится всего 256 значений, в отличие от 65 536 значений при 16битном квантовании.
В обоих случаях снижение точности по сравнению с 32битным представлением
с плавающей точкой — разительное.
Но играет ли какуюто роль на самом деле потеря точности весовых параме
тров? При развертывании нейронной сети важна только степень безошибочности
на контрольном наборе данных. Чтобы ответить на этот вопрос, мы скомпилируем
несколько моделей, охватывающих различные задачи, в примере quantization из
репозитория tfjsexamples. Для извлечения этого примера выполните:
git clone https://github.com/tensorflow/tfjs-examples.git
cd tfjs-examples/quantization
yarn
Этот пример содержит четыре сценария, каждый из которых включает свое со
четание набора данных и применяемой к нему модели. Первый сценарий связан
490
Do'stlaringiz bilan baham: |