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.