В основе Kimi 3 лежит новый механизм под названием delta attention, который не хранит постоянно растущий KV-кеш. Именно поэтому модель может работать с контекстом в миллион токенов без взрывного роста потребления памяти.
Но прежде чем разбираться в delta attention, нужно понять, как работает обычный attention.
По сути, это поиск по таблице. Каждый токен хранит:
- key — что-то вроде адреса;
- value — содержимое по этому адресу.
Чтобы сформировать выход, токен отправляет
query, сравнивает его со всеми ключами в последовательности и получает смесь значений, ключи которых подошли лучше всего. Именно это показано в верхней части схемы.
Обычный attention хранит каждую такую пару key-value в виде списка — по одной записи на токен. Этот список и называется KV-кешем.
Он растёт вместе с длиной последовательности, поэтому каждому новому токену приходится просматривать весь кеш, чтобы сформировать результат. Если удвоить длину контекста, удвоятся и объём хранения, и количество операций поиска. Отсюда берутся квадратичная стоимость и быстро растущее потребление памяти.
Delta attention сохраняет сам механизм поиска, но избавляется от списка.
Вся история сжимается в одну матрицу фиксированного размера, которая продолжает работать как таблица поиска. Передаёте ей ключ — она возвращает значение, которое прошлый контекст связал с этим ключом.
Неважно, тысяча токенов в контексте или миллион - размер матрицы остаётся прежним.
Самая сложная часть это запись новых данных.
Нельзя просто добавить новую пару в матрицу фиксированного размера (новые записи начнут накладываться на старые и смешиваться с ними). Delta rule решает эту проблему в два шага для каждого токена. Они показаны в нижней части схемы.
→
Сначала чтение, затем запись.Матрице передаётся ключ нового токена, после чего проверяется, какое значение память уже возвращает по этому адресу — то есть её текущая оценка.
→
Записывается не само значение, а разница.Текущая оценка сравнивается со значением, которое нужно сохранить. В матрицу записывается только расхождение между ними. Это расхождение и называется delta. Оно корректирует старую ассоциацию, а не накладывает поверх неё новую.
Матрица также позволяет старым записям постепенно затухать. Благодаря этому память фиксированного размера может продолжать поглощать длинную последовательность, не переполняясь.
Именно в этом заключается разница, показанная на схеме.
Обычный attention запоминает всё, сохраняя каждую запись, и платит за это квадратичной стоимостью повторного сканирования.
Delta attention запоминает, постоянно перезаписывая одну матрицу, и работает с линейной стоимостью.
Но компромисс здесь реальный.
Сжатая матрица не может хранить каждый токен абсолютно точно, поэтому восстановление конкретного токена становится приблизительным. Именно поэтому в реальных моделях обычно комбинируют оба подхода: несколько слоёв full attention оставляют для точного поиска, а остальные работают в линейном режиме.
Вся разница сводится к одному глаголу:
Обычный attention добавляет. Delta attention корректирует.
Подробнее:
https://kimi.com/blog/kimi-k3