Результат перемножения действительной матрицы R на X, можно представить эквивалентно как комплексное матричное умножение с некоторыми матрицами U и W вида:
y = U x + W x* (x* - комплексно сопряженное число)Далее в качестве квантизационной сетки берут корни 4-й степени из единицы {±1, ±𝑖}, и представляют веса в виде произведения скейла (float-а) и корня. Итого имеем 2 бита на подряд идущих числа - то есть 1 бит на параметр.
Для улучшения качества за счет битности делают residual квантизацию - квантизуют остаток и прибавляют к квантизованной части.
🧪 Эксперименты
Метод валидируют на Llama-2-7b. Обучают на подмножестве RedPajama размером в 30B токенов.
Выдают довольно неплохие метрики, несколько лучше, чем бинарная квантизация и на уровне QuIP# без дообучения. 2-битная residual квантизация дает метрики лучше, чем AQLM и QuIP#. Однако нет сравнения с PV-Tuning, который является естественным бейзлайном (причем требующим даже меньшего числа токенов).
В Ablation показывают, что WSD (Warmup-Stable-Decay) расписание помогает.
💡 Выводы
Результат неплохой, но на самом деле комплексная формулировка здесь избыточна, и то, что сделано по существу есть векторная квантизация в 2-мерное пространство с 2-битным кодбуком. Теоретически оно может работать быстро, но кернелов и замеров скорости нет. Да и бюджет в 30B достаточно солидный и на порядок дороже PTQ процедур.