Часть IV • Резюме и заключительное слово
модели (и еще более снижающий степень безошибочности). Например, размер
версии MobileNetV2 с
width
= 0,25 составляет лишь четверть от размера полной
модели (3,5 Мбайт). Но даже это может оказаться неприемлемым для вебсайтов
с высокой посещаемостью, чувствительных к увеличению размеров страниц и вре
мени загрузки.
Можно ли еще больше сократить размер подобных моделей? К счастью, да.
Что приводит нас ко второму из упомянутых подходов, а именно, не зависящей от
модели оптимизации размеров. Методики из этой категории более универсальны
в том смысле, что не требуют изменений архитектуры модели, а потому применимы
к широкому спектру существующих глубоких нейронных сетей. Мы сосредоточим
свое внимание главным образом на методике
квантования весовых коэффициентов
модели после обучения
(posttraining weight quantization). Идея ее проста: сохранение,
после обучения модели ее весовых коэффициентов в виде чисел с более низкой чис
ловой точностью. Те из читателей, кому интересна математическая сторона, могут
найти всю информацию в инфобоксе 12.1.
ИНФОБОКС 12.1. Математические нюансы квантования весовых
коэффициентов модели после обучения
Весовые параметры нейронной сети во время обучения хранятся в виде 32битных
чисел с плавающей точкой (float32). И не только в TensorFlow.js, но и в других фрейм
ворках глубокого обучения, например TensorFlow и PyTorch. Такое относительно
ресурсоемкое представление обычно допустимо, поскольку обучение модели в боль
шинстве случаев происходит в среде с неограниченными ресурсами (например, в сре
де прикладной части рабочей станции с достаточно большим объемом оперативной
памяти, быстрыми CPU и GPU с поддержкой CUDA). Однако опыт показывает, что
во многих сценариях выполнения вывода можно снизить точность весовых коэффи
циентов без существенного снижения безошибочности. Для снижения точности пред
ставления все значения типа float32 преобразуются в 8 или 16битные целочисленные
значения, отражающие дискретизированное местоположение конкретного значения
в диапазоне всех значений того же весового коэффициента. Данный процесс называ
ется
квантованием
(quantization).
В TensorFlow.js квантование весовых коэффициентов производится по отдельности.
Например, если нейронная сеть состоит из четырех весовых величин (например, весов
и смещений двух плотных слоев), каждый из весовых коэффициентов подвергается
квантованию как одно целое. Уравнение, которое описывает квантование весового
коэффициента, выглядит следующим образом:
quantize(
w
) = floor((
w
–
w
min
) /
w
scale
×
2
B
).
(12.1)
В этом уравнении B — количество битов, выделяемое для хранения результата кван
тования (в настоящее время TensorFlow.js поддерживает варианты 8 и 16);
w
min
— ми
нимальное значение параметров веса;
w
scale
— диапазон значений параметров (разница
между минимумом и максимумом). Уравнение корректно, конечно, только если
w
scale
Do'stlaringiz bilan baham: |