Altifigence Academy

6 / 24 · Теория

Масштаб и нулевая точка

При sx=0.25,zx=128 каковы код дополнения и действительное значение q=132? Какой код bias представляет 0.75 при sw=0.5?

Код действительного нуля

Аффинное квантование использует положительный масштаб s и целочисленную нулевую точку z. Наша целочисленная спецификация округляет x/s к ближайшему целому, выбирает чётное целое при точной половине, добавляет z, затем насыщает до диапазона хранения. Деквантование интерпретирует код приблизительно как s(q−z). Отображение действительных значений на целочисленную сетку обычно теряет информацию.

q=clip⁡(roundEven⁡(x/s)+z,qmin,qmax)q=\operatorname{clip}(\operatorname{roundEven}(x/s)+z,q_{min},q_{max})

Для входа uint8 с s=0.25,z=128 действительный ноль — код 128. Коды 130 и 126 представляют 0.5 и −0.5. Сырой код дополнения ноль вместо этого представлял бы −32. Буфер сырых кодов должен вставлять z для дополнения. Буфер уже центрированных кодов вставляет целочисленный ноль. Отметьте точку преобразования в тракте данных.

Разобранное скалярное произведение

Центрируйте входные коды [130,126] вычитанием 128, получая [2,−2]. Веса [3,−2] используют масштаб 0.5 и нулевую точку ноль. Накапливайте 2×3+(−2)×(−2)=10. Действительный масштаб аккумулятора — 0.25×0.5=0.125, поэтому действительный результат — 1.25. С выходным масштабом 0.25 и нулевой точкой 128 он становится кодом 133. Ненулевые нулевые точки весов тоже вычитаются до умножения.

Квантование на тензор разделяет один масштаб. Квантование весов на канал требует отдельных для каналов bias и выходного преобразования. Если два выходных канала имеют масштабы весов 0.5 и 0.25, код аккумулятора десять представляет 1.25 и 0.625 соответственно. Гибкость программы не устанавливает аппаратную поддержку любого варианта.

Квантование 0.625 с масштабом 0.25 даёт половину 2.5, округляющуюся до двух и кода 130. Деквантование даёт 0.5, ошибку −0.125. Вход 0.375 также отображается в этот код. Ошибка сетки квантования отличается от ошибки насыщения: ограничение входа вне диапазона может превышать половину шага масштаба. Сравните целочисленные правила с ONNX QuantizeLinear. Упражнения намеренно реализуют только малое подмножество int8/uint8.

Попробуйте сами

При sx=0.25,zx=128 каковы код дополнения и действительное значение q=132? Какой код bias представляет 0.75 при sw=0.5?

Прочитать объяснение

Сырое дополнение — код 128, q=132 представляет один. Масштаб аккумулятора — 0.125, поэтому код bias равен 0.75/0.125=6.

Выбор действует в этом браузере. Его можно изменить внизу страницы.