Sparse Hash AI


Гео и язык канала: Россия, Русский
Категория: Технологии


AI обогатительная разработка ML месторождений. Осторожно, в канале ведутся подрывные работы!

Связанные каналы

Гео и язык канала
Россия, Русский
Категория
Технологии
Статистика
Фильтр публикаций




Recirculation
Рециркуляция
https://www.alphaxiv.org/abs/2608.17981

———

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

Скрытое состояние глубокого слоя из предыдущего шага добавляется к скрытому состоянию раннего слоя текущего шага.

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


p-Spin Glass Network Efficient Single-Batch Continual Learning
Сеть р-спинового стекла: Эффективное однопакетное непрерывное обучение
https://www.alphaxiv.org/abs/2608.14774


Not the Dimension, the Norm: What Matters in Gradient-Free Weight Perturbation of Language Models
https://www.alphaxiv.org/overview/2608.01624

Это исследование показало, что при адаптации больших языковых моделей без градиентов норма возмущения является единственным надежно влияющим фактором, а не размерность поиска или конкретная геометрия подпространства. Оно показало, что возмущение всего 12-16 скаляров может достичь производительности, сопоставимой с полноразмерным случайным поиском (в пределах 1,8 пункта точности), при этом оптимальные масштабы возмущения находятся в пределах постоянного окна для разных моделей и задач.

———

Уже существуют градиентные методы fine-tuning'а, где подстройка применяется к небольшому числу скаляров. В этой работе предложен безградиентный метод.

Результат подтверждает верность гипотезы Neural Thickets – идеи о том, что эффективные эксперты по задачам плотно расположены вокруг предварительно обученных весов.

Размерность поиска не является критической – четыре подобранных скаляра дают такое же качество как и 1100 скаляров.

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

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


Information Abundance Paradox: Long-Context Training Undermines Parametric Knowledge
Парадокс информационного изобилия: обучение с длинным контекстом подрывает параметрические знания
https://www.alphaxiv.org/abs/2608.12218

———

На большом контексте в виду избытка в нём релевантной информации у моделей развивается "контекстная зависимость" – оптимизатор смещает градиентное давление со слоёв FFN, связанных со знанием, в сторону слоёв внимания. Модель учится не понимать, а искать ответ в контексте.

Для задач понимания естественного языка производительность вначале улучшается с увеличением контекста, достигает пика, а затем неуклонно снижается.




🔥 Kilobyte Models: Neural Networks as a Seed and a Quantized Latent
Килобайтные модели: Нейронные сети как сид и квантованное латентное представление
https://www.alphaxiv.org/overview/2608.00860

Модели в килобайтах представляют собой метод сжатия нейронных сетей, который хранит целочисленное начальное значение (seed) и квантованный латентный вектор, позволяя генерировать веса сети по требованию. Этот подход достигает экстремального сокращения объема хранения, такого как 26-кратное сокращение для сверточных нейронных сетей (CNN) и 370-кратное сокращение для рекуррентных сетей с долгой краткосрочной памятью (LSTM), при этом сохраняя точность, сравнимую с полноразмерными моделями, и обеспечивая высокоэффективные адаптеры для тонкой настройки.

Вместо прямого сжатия весов обученной сети, методология фокусируется на хранении компактного "рецепта", который позволяет устройству развертывания регенерировать полные веса по требованию. Этот рецепт состоит из целочисленного начального значения (seed) и крошечного, агрессивно квантованного вектора. Эта структура уменьшает объем хранения нейронных сетей до нескольких килобайт — часто на порядки меньше, чем исходная модель — при сохранении конкурентоспособной точности в различных задачах.




Training-Free Hashing-Based Attention via Binary Principal Components
Внимание на основе хеширования без обучения через бинарные главные компоненты
https://www.alphaxiv.org/abs/2608.04405v1
https://github.com/yudaohai666/BPC

———

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


The Transformer Revolution, Part 1: Dynamic Processing through Output- Weight Interconnections
Революция Трансформеров, Часть 1: Динамическая обработка посредством взаимосвязей выходных весов
https://www.alphaxiv.org/overview/2608.03921

Исследователи предлагают новую интерпретацию вывода Трансформера, характеризуя его как Последовательно-уровневую Интерактивную Динамическую Параллельную Обработку (SIDPP), где зависящие от входных данных "связи выход-вес" динамически генерируют параметры преобразования. Это оспаривает точку зрения "стохастического попугая", демонстрируя, что динамические параметры, растущие с длиной запроса, значительно влияют на поведение модели и обеспечивают высокую чувствительность к запросам.

———

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

Трансформер – это растущая нейросеть; динамические веса – это матрицы ключей и значений. Для примера: в GPT-3 на контексте длиной примерно в 39 464 токена количество динамических параметров уже становится равным количеству статических параметров.

Трансформер — это система, которая "трансформирует концепции посредством концепций".

Трансформер не просто применяет выученные правила; он динамически конструирует новые, специфичные для запроса трансформации во время инференса.

* вроде очевидная вещь, вытекающая из архитектуры, что трансформер – это Data-driven, но я сам обратил на это внимание только год-полтора назад ), и вот другие люди это тоже заметили и статью написали )






Proof of Concept

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

Схема другая, работает как ассоциативная память ключ-значение:

1. Связываем пары ключ-значение и собираем их суперпозицию – операция записи в память: ∑ⱼkⱼ⊙vⱼ. Используем cumsum для причинности.

2. Умножаем суперпозицию на запрос qᵢ – операция чтения из памяти: qᵢ⊙∑ⱼkⱼ⊙vⱼ.
В данной схеме это вернёт суперпозицию всех значений от ключей, схожих с запросом.

* к ключам и запросам применяется RoPE.

———

Результат

Перплексия снизилась, догнав трансформер с softmax вниманием, но сходимость вернулась к классическому виду – обобщение отстаёт от заучивания.


Proof of Concept

Сделал проверку концепции суперпозиции концепций.

Заменил в небольшом трансформере в self-attention вычисление оценок внимания и softmax на суперпозицию (ака векторная память).

Для этого:

1. Собираем суперпозицию ключей: ∑ⱼkⱼ. Используем cumsum для причинности.

2, Умножаем суперпозицию на запрос qᵢ (произведение суперпозиций), это даёт суперпозицию всех связанных пар ключ-запрос: qᵢ⊙∑ⱼkⱼ

3. Проецируем через матрицу проекции значений: (qᵢ⊙∑ⱼkⱼ)Wv

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

* к ключам и запросам применяется RoPE.

———

Результат

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


Матричная ассоциативная память (линейное внимание) и векторная ассоциативная память

В линейном внимании в матрицу памяти S пара ключ-значение добавляется как внешнее произведение их векторов.

S = S + kᵀv

В векторную память пара ключ-значение добавляется как поэлементное произведение.

S = S + k⊙v

Чтение из линейного внимания – это матричное умножение ключа и состояния.

o = kS

Чтение из векторной памяти – это поэлементное произведение ключа и состояния.

o = k⊙S

import torch
import torch.nn.functional as F

D = 1024

# Векторы ключа и значения
k, v = F.normalize(torch.randn(2, D))

# Запись в матрицу памяти линейного внимания
S = torch.outer(k, v)

# Чтение из памяти по ключу
o = k @ S

# Смотрим что прочиталось
r = torch.dot(o, v)
print(r)
# 1.0

# Запись в векторную память пары ключ-значение как поэлементное произведение
S = k * v
S = F.normalize(S.unsqueeze(0)).squeeze(0)

# Читаем из векторной памяти по ключу
o = S * k
o = F.normalize(o.unsqueeze(0)).squeeze(0)

# Смотрим что прочиталось
r = torch.dot(o, v)
print(r)
# 0.58


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

Если суперпозиция содержит в себе пары концепций: [ac, ad, bc, bd], то умножив её на вектор запроса q = a, получим суперпозицию значений [c, d], где запрос является частью пары.

(ac + ad + bc + bd) * a = c + d

import torch
import torch.nn.functional as F

D = 1024

# Векторы концепций
a, b, c, d = F.normalize(torch.randn(4, D))

# Суперпозиция из попарных взаимодействий концепций
S = (a + b) * (c + d)
S = F.normalize(S.unsqueeze(0)).squeeze(0)

# Читаем из памяти по запросу a
Sv = S * a
Sv = F.normalize(Sv.unsqueeze(0)).squeeze(0)

# Смотрим что прочиталось
z = torch.vstack([a, b, c, d])
z = F.normalize(z)

r = Sv @ z.T
print(r)
# [-0.06, -0.03, 0.37, 0.39]


Если скрытое состояние представляет из себя суперпозицию, то возведение её в квадрат, например в ReLU², даст суперпозицию попарных взаимодействий элементов.

S² = (a + b + c + d) * (a + b + c + d) = aa + 2ab + 2ac + 2ad + bb + 2bc + 2bd + cc + 2cd + dd

import torch
import torch.nn.functional as F

D = 1024

# Векторы концепций
a, b, c, d = F.normalize(torch.randn(4, D))

# Исходные суперпозиции
S = a + b + c + d

# Квадрат суперпозиции
S **= 2
S = F.normalize(S.unsqueeze(0)).squeeze(0)

# Пары концепций
aa = a * a
bb = b * b
cc = c * c
dd = d * d
ab = a * b
ac = a * c
ad = a * d
bc = b * c
bd = b * d
cd = c * d

z = torch.vstack([aa, bb, cc, dd, ab, ac, ad, bc, bd, cd])
z = F.normalize(z)

# Находим пары концепций в результирующей суперпозиции
r = S @ z.T
print(r)
# [0.50, 0.52, 0.50, 0.53, 0.27, 0.25, 0.30, 0.28, 0.26, 0.29]


import torch
import torch.nn.functional as F

D = 1024

# Векторы концепций
a, b, c, d = F.normalize(torch.randn(4, D))

# Исходные суперпозиции
S1 = a + b
S2 = c + d

# Произведение суперпозиций
S = S1 * S2
S = F.normalize(S.unsqueeze(0)).squeeze(0)

# Пары концепций
ac = a * c
ad = a * d
bc = b * c
bd = b * d

z = torch.vstack([ac, ad, bc, bd])
z = F.normalize(z)

# Находим пары концепций в результирующей суперпозиции
r = S @ z.T
print(r)
# [0.52, 0.54, 0.53, 0.52]


💡

Произведение двух суперпозиций даёт суперпозицию попарных взаимодействий их элементов.

Пример

Пусть первая суперпозиция S1 содержит в себе концепции a и b, а вторая S2 - c и d.

Перемножаем суперпозиции:

S = S1 * S2 = (a + b) * (c + d) = ac + ad + bc + bd

Результирующая суперпозиция S содержит в себе коды всех попарных комбинаций концепций. То есть получаем все возможные комбинации всего за одну операцию поэлементного умножения, O(1).

Само поэлементное умножение происходит в гейтах (гейтированное внимание или MLP) трансформера.

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



Показано 20 последних публикаций.