Altifigence Academy

7 / 24 · Теория

Разрядность аккумулятора, округление и насыщение

Достаточно ли восемнадцати знаковых бит для девяти произведений signed-int8 с нулевым bias?

Накоплению нужна своя разрядность

Восьмибитные операнды и восьмибитный выход не подразумевают восьмибитный аккумулятор. Знаковые восьмибитные коды имеют максимальный модуль 128. При нулевых точках ноль и L членах консервативная граница модуля суммы — L×128×128 плюс модуль bias. Выберите знаковую ширину, чей положительный максимум покрывает границу; знак занимает один бит.

Разобранный расчёт разрядности

При C=3 и ядре 3×3 L=27. Когда оба операнда −128, каждое произведение равно +16384, сумма — 442368. Девятнадцать знаковых бит достигают лишь 262143. Двадцать достигают 524287 и также покрывают допустимый модуль bias 1000, давая границу 443368. Меньшие доказанные диапазоны операндов могут снизить требуемую ширину, но несколько обычных входов не доказывают границу.

Беззнаковые коды с нулевой точкой ноль могут достигать 255, поэтому предположение 128 неверно. Сначала вычислите A=max(abs(qmin−zx),abs(qmax−zx)) и аналогичное B для весов. Используйте L×A×B+abs(b). Само центрирование может требовать больше бит, чем хранимый код.

Зафиксируйте порядок преобразования выхода

Множитель равен sx×sw/sy. При множителе 0.5 и выходной нулевой точке 128 аккумулятор девять становится половиной 4.5, округляется до чётного четыре и даёт 132. Аккумулятор одиннадцать округляет 5.5 до шести и даёт 134. Аккумулятор −3 округляет −1.5 до −2. Усечение, усечение к нулю и арифметический сдвиг вправо различаются для отрицательных значений. Упражнения используют специальную функцию ближайшего чётного вместо стандартного округления языка.

Для выхода int8 преобразованное 300 насыщается до 127, а −300 до −128. Отбрасывание старших бит циклически переполняло бы до несвязанных значений. Записывайте значения до ограничения и количество насыщений. Включите место ReLU и его представление нуля в спецификацию.

Проверяйте большие положительные и отрицательные суммы, точные половины, обе границы насыщения и большой bias. Намеренно противопоставьте широкий эталон недостаточному аккумулятору, выявляя переполнение. Наши исполняемые примеры находятся внутри точного целочисленного диапазона JavaScript; больший эталон должен также обосновать точность арифметики своей платформы.

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

Достаточно ли восемнадцати знаковых бит для девяти произведений signed-int8 с нулевым bias?

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

Положительная граница — 9×16384=147456, выше восемнадцатибитного максимума 131071. Девятнадцать знаковых бит достигают 262143.

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