6 / 24 · Теория
Масштаб и нулевая точка
При sx=0.25,zx=128 каковы код дополнения и действительное значение q=132? Какой код bias представляет 0.75 при sw=0.5?
Уроки доступны бесплатно. Запишитесь, чтобы сохранять прогресс.
Код действительного нуля
Аффинное квантование использует положительный масштаб s и целочисленную нулевую точку z. Наша целочисленная спецификация округляет x/s к ближайшему целому, выбирает чётное целое при точной половине, добавляет z, затем насыщает до диапазона хранения. Деквантование интерпретирует код приблизительно как s(q−z). Отображение действительных значений на целочисленную сетку обычно теряет информацию.
Для входа 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.