---
title: "Learned Step Size Quantization"
title_ru: "Квантизация с обучаемым шагом (LSQ)"
authors: [Esser, McKinstry, Bablani, Appuswamy, Modha]
year: 2020
venue: "ICLR"
venue_tier: "A*"
doi: "1902.08153"
tags: [quantization, qat, int8, differentiable, learned_stepsize]
relevance_to_smartrep: 3
direction: "🅲"
---

# LSQ: Квантизация с обучаемым шагом

## TL;DR (≤3 предложения)

LSQ делает шаг квантизации $s$ дифференцируемым параметром и обучает его совместно с весами через straight-through estimator для STE-градиента. Это позволяет модели самостоятельно находить оптимальный масштаб квантизации для каждого слоя, достигая уровня FP32 при INT4. Основополагающий QAT метод, от которого отталкиваются все последующие подходы к квантизации для edge deployment.

## Проблема

Классическая квантизация использует фиксированный шаг $s$ (например, $s = \frac{\max|W|}{2^{b-1}}$). Оптимальный $s$ варьируется по слоям и активациям — ручная настройка неэффективна, автоматическая фиксированная — неоптимальна. Нужно обучать $s$ вместе с весами.

## Гипотеза / вклад

- **Дифференцируемый $s$:** $\frac{\partial \mathcal{L}}{\partial s}$ вычисляется через STE для округления.
- **Per-channel / per-tensor:** $s$ может быть отдельным для каждого канала.
- **Нормировка градиента:** $\frac{\partial \mathcal{L}}{\partial s}$ нормируется на число квантизируемых элементов — стабилизирует обучение.

## Метод

Квантизатор:

$$\hat{v} = s \cdot \text{clip}\left(\lfloor v/s \rceil,\, -2^{b-1},\, 2^{b-1} - 1\right)$$

Градиент через STE ($\frac{\partial \lfloor \cdot \rceil}{\partial x} = 1$):

$$\frac{\partial \hat{v}}{\partial s} = \text{clip}\left(\lfloor v/s \rceil,\, -2^{b-1},\, 2^{b-1}-1\right) - v/s + 1_{[\text{clip active}]}$$

Нормировка: делится на $\sqrt{n \cdot q_{pos}}$ где $n$ — число элементов.

## Датасеты

| Модель | Датасет | Метрика | FP32 | INT8 LSQ | INT4 LSQ |
|---|---|---|---|---|---|
| ResNet-50 | ImageNet | Top-1 | 76.9% | 76.7% | 75.8% |
| MobileNetV2 | ImageNet | Top-1 | 71.9% | 71.9% | 67.5% |

## Сравнение с SOTA

INT8: точность почти идентична FP32. INT4: первый метод, приближающийся к FP32 на мобильных backbone'ах. Остаётся SOTA baseline для QAT.

## Ограничения / слабости

- QAT требует full retraining (или fine-tuning) — дорого по времени.
- INT4 для активаций нестабилен — обычно используют W4A8 (веса 4-бит, активации 8-бит).
- Не тестировался для temporal models (video transformers).
- SE-блоки плохо квантизируются даже с LSQ из-за sigmoid.

## Релевантность SmartRep

- **INT8 deployment 🅲:** LSQ — стандартный метод для QAT backbone'ов SmartRep. MobileOne-S0 + LSQ INT8 = <1ms с потерей <0.5% точности.
- **Skeleton temporal encoder:** применение LSQ к 1D temporal conv / GRU для квантизации AQA head — прямое.
- **Знание для написания методологии:** LSQ обязателен в разделе "методы квантизации" публикации SmartRep.

## Gap для нас

LSQ не применялся к temporal skeleton models. **Ниша SmartRep:** LSQ-QAT для skeleton AQA pipeline (pose estimator + temporal encoder + AQA head) в INT8 с сохранением AUROC anomaly detection ≥95% от FP32 baseline — систематический benchmark не проводился.

## Код / данные

- Repo: github.com/IntelLabs/distiller (LSQ реализация), timm (интегрировано)
- Pretrained: нет

## Цитата (BibTeX)

```bibtex
@inproceedings{esser2020learned,
  title={Learned Step Size Quantization},
  author={Esser, Steven K and McKinstry, Jeffrey L and Bablani, Deepika and Appuswamy, Rathinakumar and Modha, Dharmendra S},
  booktitle={International Conference on Learning Representations},
  year={2020}
}
```
