11 / 24 · Теория
Соединение ReLU и максимального пулинга
При нулевой точке выхода uint8 100 примените ReLU и максимальный пулинг 2×2 к [98,103;101,97].
Уроки доступны бесплатно. Запишитесь, чтобы сохранять прогресс.
Включите ступени постобработки
Инференс может продолжаться после свёртки. ReLU выбирает большее из каждого действительного значения и нуля. Максимальный пулинг выбирает наибольшее значение пространственного окна. Один действует поэлементно; другой меняет пространственный размер и требует другого условия завершения. Наш путь повторно квантует, применяет ReLU, затем максимальный пулинг 2×2 без дополнения с шагом два. Округление вниз отбрасывает неполную последнюю строку или столбец.
Для сырого квантованного выхода действительный ноль — нулевая точка zy. Положительный масштаб сохраняет порядок, поэтому ReLU использует max(q,zy). Сравнение кодов uint8 с буквальным нулём при zy=128 ошибочно сохранило бы отрицательные действительные значения.
Разобранная цепочка
Аккумуляторы [−2,4;6,−8] с множителем 0.5 и нулевой точкой ноль становятся [−1,2;3,−4]. ReLU даёт [0,2;3,0], пулинг выбирает три. Пространственное уменьшение частоты отсчётов и числовое масштабирование — разные идеи. Максимальный пулинг выбирает существующий код и потому сохраняет масштаб в этом упражнении.
При нулевой точке 128 коды [126,132;134,120] становятся [128,132;134,128] после ReLU и дают код 134 при пулинге. Эталон остаётся действительным нулём даже при изменении хранения. Усредняющий пулинг вводил бы деление и округление, поэтому не взаимозаменяем с реализацией.
Отрицательное окно до ReLU [−8,−5;−3,−6] имеет максимум −3. Неверная вставка нуля на дополненной границе позволяет несуществующему отсчёту выиграть. Реализация с дополнением должна исключать позицию или использовать заданное минимальное значение. Наша исполняемая функция пулинга не поддерживает дополнение.
Объединение ступеней может сократить промежуточный трафик памяти, но сохраняйте наблюдаемые значения для верификации. Сравнивайте аккумуляторы, повторно квантованные коды, активированные значения и выход пулинга отдельно. Вход 4×4 даёт четыре значения пулинга; 3×3 — одно по заявленному правилу округления вниз. Документируйте правило неполных окон в тестах. См. первичные определения в ONNX Relu и ONNX MaxPool.
Попробуйте сами
При нулевой точке выхода uint8 100 примените ReLU и максимальный пулинг 2×2 к [98,103;101,97].
Прочитать объяснение
ReLU ограничивает снизу кодом 100, давая [100,103;101,100]. Максимальный пулинг выбирает 103 и сохраняет выходной масштаб.