Технологии

Что такое обучение с учётом квантования

Что такое обучение с учётом квантования

Обучение с учётом квантования — это подход, при котором модель заранее обучают работать с пониженной точностью чисел, например int8 или int4. За счёт этого после сжатия она обычно теряет меньше качества, чем при квантовании уже готовой модели без дополнительного обучения.

Метод применяют там, где нужно уменьшить размер модели, снизить расход памяти и ускорить вывод. Чаще всего его сравнивают с посттренировочным квантованием: оба подхода уменьшают точность представления весов, но делают это на разных этапах жизненного цикла модели.

Содержание статьи

Что такое квантование в машинном обучении

Квантование — это перевод весов и иногда активаций модели из более точного числового формата в менее точный. Обычно речь идёт о переходе от 32-битных или 16-битных чисел с плавающей точкой к 8-битным или 4-битным представлениям.

Смысл в том, чтобы сократить объём памяти и упростить вычисления. Чем меньше бит требуется для хранения параметров, тем компактнее модель и тем дешевле её запускать на сервере, телефоне или встраиваемом устройстве.

Полностью без потерь это не проходит. При уменьшении точности возникает ошибка квантования: близкие по значению числа начинают округляться к одним и тем же уровням. Задача инженера — уменьшить этот эффект так, чтобы модель после сжатия вела себя как можно ближе к исходной версии.

Чем обучение с учётом квантования отличается от посттренировочного квантования

Главное различие в моменте, когда модель сталкивается с пониженной точностью. При посттренировочном квантовании готовую модель сжимают после обучения, а при обучении с учётом квантования влияние низкой точности закладывают прямо в процесс обучения или дообучения.

Посттренировочное квантование проще по процессу. Есть уже обученная модель, к ней применяют схему квантования, затем проверяют, насколько изменились метрики. Дополнительное обучение либо не требуется, либо сводится к минимуму.

Обучение с учётом квантования сложнее и дороже по вычислениям. Зато модель успевает подстроить параметры под будущие ограничения точности. Именно поэтому такой подход часто даёт более стабильный результат после перехода к int8 или int4.

Критерий Посттренировочное квантование Обучение с учётом квантования
Когда применяется После обучения модели Во время обучения или дообучения
Нужны ли данные для обучения Обычно меньше Нужны данные для обучения или тонкой настройки
Вычислительная стоимость Ниже Выше
Потеря качества после квантования Может быть заметнее Часто меньше
Гибкость настройки Ограничена Выше

Как работает обучение с учётом квантования

Суть метода в том, что во время обучения модель ведёт себя так, будто её веса и активации уже будут использоваться в низкой точности. При этом сами обновления параметров обычно сохраняются в формате с плавающей точкой, чтобы обучение оставалось стабильным.

В вычислительный граф добавляют операции, которые имитируют квантование. Их часто называют ложным квантованием или fake quantization. Они не всегда физически переводят все значения в int8 на каждом шаге, но воспроизводят эффект округления и ограничения диапазона.

Из-за этого модель на прямом проходе сразу сталкивается с теми искажениями, которые появятся после реального квантования при выводе. Она видит будущую среду работы заранее, а не после завершения обучения.

Дальше начинается самое важное. Во время обратного прохода нужно вычислить градиенты, но обычная операция квантования плохо подходит для этого: она не является гладкой и неудобна для стандартного дифференцирования. Поэтому на практике используют специальное приближение, которое позволяет пропускать градиенты через шаг квантования.

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

Зачем в этом процессе нужен straight-through estimator

Straight-through estimator, или STE, — это практический способ передать градиент через операцию квантования, хотя сама она почти везде недифференцируема. Без такого приближения обучение квантованной модели быстро упрётся в проблему обновления весов.

Идея проста: на прямом проходе модель получает эффект округления и ограничения диапазона, а на обратном проходе шаг квантования временно рассматривают почти как тождественное преобразование. Это не делает квантование гладким в математическом смысле, но позволяет алгоритму оптимизации продолжать работу.

Поэтому QAT часто объясняют так: модель обучается с шумом низкой точности, но градиенты проходят по упрощённому пути. Без этого обучение либо становилось бы нестабильным, либо переставало бы давать полезные обновления параметров.

Как выглядит квантование на уровне идеи

Квантование заменяет непрерывный диапазон значений набором дискретных уровней. Значение сначала масштабируется, затем округляется, а после приводится к допустимому диапазону.

Если говорить без лишней математики, процесс обычно включает три действия:

  • выбор шага квантования;
  • ограничение значений снизу и сверху;
  • округление к ближайшему допустимому уровню.

Чем грубее сетка уровней, тем сильнее сжатие и тем выше риск потери точности. Поэтому переход с float32 на int8 обычно переносится легче, чем более агрессивные схемы вроде int4.

Из каких шагов состоит обучение с учётом квантования

Процесс QAT обычно включает имитацию квантования во время обучения, расчёт градиентов с приближением, повторное применение схемы квантования к параметрам и проверку качества уже сжатой модели. Порядок реализации зависит от фреймворка, но логика в целом одинакова.

Имитация пониженной точности во время обучения

На каждом шаге обучения модель считает так, будто веса и активации уже будут использоваться в низкой точности. Это позволяет заранее увидеть, какие искажения внесёт будущая оптимизация.

Прямой и обратный проходы при этом обычно выполняются с использованием вычислений в формате с плавающей точкой. Иначе накопление ошибок в градиентах могло бы слишком сильно ухудшить сходимость.

Расчёт градиентов

Градиенты проходят через шаг квантования с приближением, а не в точной форме. Чаще всего для этого применяют STE.

Это даёт модели возможность продолжать обучение даже тогда, когда сама операция округления ломает обычное дифференцирование. На практике такой компромисс используется очень широко.

Повторное квантование параметров после обновления

После обновления весов их снова приводят к схеме квантования, с которой модель должна жить на выводе. Так обучение постоянно удерживается рядом с будущим режимом работы.

Сами параметры при этом часто остаются в полной точности как основная версия для оптимизатора. Иначе маленькие изменения могли бы просто теряться.

Настройка параметров самого квантования

В некоторых вариантах QAT во время обучения подбирают не только веса модели, но и параметры квантования: например, диапазоны отсечения или шаг масштабирования.

Такой подход даёт больше контроля над тем, какие значения сохраняются точнее, а какие сильнее сжимаются. В англоязычной литературе для этого часто упоминают методы PACT и LSQ.

Проверка качества после сжатия

Финальный этап — проверить уже квантованную модель на отложенных данных и сравнить её поведение с исходной версией. Если просадка выходит за допустимые рамки, обучение продолжают или меняют настройки квантования.

Смотрят не только на точность как таковую, но и на те метрики, которые важны для конкретной задачи. Для классификации это могут быть accuracy, precision, recall и F1, если они использовались в исходной оценке модели.

Почему QAT требует больше ресурсов

Обучение с учётом квантования обходится дороже, потому что к обычному процессу обучения добавляется имитация низкой точности, настройка схемы квантования и повторная проверка качества. По сути, модель приходится заново адаптировать к новым ограничениям.

Нужны вычислительные ресурсы. Нужны данные, близкие к тем, на которых модель будет применяться. Нужны время и контроль метрик.

По этой причине QAT выбирают не всегда. Если модель нужно быстро сжать и запустить, а небольшая просадка качества допустима, посттренировочного квантования может хватить. Если же поведение модели после сжатия критично, дополнительная стоимость обучения может быть оправданной.

Когда обучение с учётом квантования особенно полезно

QAT полезен там, где модель должна работать в ограниченной среде, но заметная потеря качества нежелательна. Это типичная ситуация для мобильных устройств, периферийных вычислений и некоторых систем компьютерного зрения.

На устройствах с ограниченной памятью и энергопотреблением квантование помогает запустить модель в более компактном виде. Если простое сжатие слишком сильно портит качество, обучение с учётом квантования помогает сократить эту просадку.

В задачах компьютерного зрения подход также используется для свёрточных нейросетей. Смысл тот же: подготовить модель к будущей работе в низкой точности ещё на этапе обучения, а не исправлять последствия после него.

Как QAT реализован в PyTorch и TensorFlow

И PyTorch, и TensorFlow поддерживают обучение с учётом квантования через имитацию квантования во время обучения. Оба фреймворка решают одну задачу, но делают это по-разному на уровне инструментов и сценариев развёртывания.

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

В TensorFlow такой сценарий связывают с Keras Model Optimization Toolkit. Модель оборачивается в специальную форму, которая добавляет fake quant узлы и позволяет дообучить сеть с учётом будущего квантования. Затем модель можно перевести в полностью квантованный формат для вывода, например через TFLite.

Фреймворк Общий подход Особенности
PyTorch Подготовка модели, конфигурация квантования, наблюдатели, имитация квантованных операций Более гибкая модульная настройка, несколько режимов работы
TensorFlow QAT через инструменты Keras, затем конвертация в квантованный формат Удобная связка с TFLite и сценариями для мобильных устройств

Какие ограничения и риски есть у этого подхода

QAT не является универсальным ответом для любой модели. Он уменьшает потерю качества после квантования, но требует времени, данных и аккуратной настройки.

Есть несколько практических ограничений:

  • дополнительная стоимость обучения;
  • необходимость доступа к данным для обучения или дообучения;
  • чувствительность к выбранной битности и схеме квантования;
  • более сложный цикл валидации по сравнению с простым квантованием готовой модели.

Особенно осторожно к этому подходят при очень низкой битности. Чем сильнее сжатие, тем труднее сохранить поведение исходной модели без заметных искажений.

Когда выбирать QAT, а когда достаточно обычного квантования

QAT выбирают, когда после сжатия нужно сохранить поведение модели как можно ближе к исходному. Если приоритетом является скорость внедрения и допустима некоторая просадка качества, чаще начинают с посттренировочного квантования.

Практическая логика обычно такая:

  1. Сначала проверяют, хватает ли посттренировочного квантования.
  2. Если качество падает слишком сильно, переходят к QAT.
  3. После этого сравнивают выгоду от сохранённых метрик с затратами на дообучение.

То есть выбор зависит не только от архитектуры модели, но и от ограничений по памяти, скорости вывода, доступности данных и стоимости повторного обучения.

Коротко: что нужно запомнить про обучение с учётом квантования

Обучение с учётом квантования — это способ подготовить модель к работе в низкой точности ещё во время обучения. Такой подход обычно даёт более аккуратный результат после сжатия, чем квантование уже готовой модели без дообучения.

Метод опирается на имитацию квантования в прямом проходе, приближённый расчёт градиентов и хранение основной версии весов в более точном формате. За это приходится платить вычислительными ресурсами, но в задачах с жёсткими ограничениями по памяти и задержке такой обмен часто оказывается оправданным.