- PVSM.RU - https://www.pvsm.ru -

Как у нейросетей работает внимание? Статья про self-attention и cross-attention

Картинка для объяснения процесса

Картинка для объяснения процесса

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

В основе этого процесса лежат два типа внимания: self‑attention (внутреннее внимание), которое определяет взаимосвязи внутри изображения, и cross‑attention (перекрестное внимание), сопоставляющее текстовую подсказку с ее визуальным воплощением.

Например, в случае с запросом «конь на ракете», cross‑attention сопоставит токены («конь» и «ракета») и решит, где разместить коня и ракету, а также в какой обстановке их лучше поместить, например, на Марсе.

Self‑attention, в свою очередь, помогает модели понять, как элементы изображения связаны между собой. Например, как «конь» и «ракета» будут выглядеть вместе и как они состыкуются друг с другом на изображении. Этот процесс обеспечивает логическую связность и целостность финального результата.

※ Как это работает

Давайте рассмотрим этот процесс на примере: предположим, ваш запрос — конь на ракете с надписью 'быстрый'.

▍Шаг 1: Преобразование текста в эмбеддинги с помощью CLIP

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

▍Шаг 2: Cross-attention — текст направляет генерацию

Cross-attention нужна для связи текстового промпта с объектами на изображении и использует три основные компоненты:

  • Запросы (Q): векторы, представляющие текущее состояние изображения на шаге генерации (математическое представление изображения).

  • Ключи (K): векторы, представляющие текстовые эмбеддинги, например, «конь», «ракета», «быстрый».

  • Значения (V): информация о текстовых эмбеддингах, которая подскажет, как промпт должен повлиять на изображение.

▍Вычисление внимания:

Функция внимания (attention) вычисляет, насколько каждый ключ важен для каждого запроса. Она это делает с помощью умножения векторов запроса и ключа и деления на корень квадратный из размерности ключа (это технический шаг, чтобы значения не были слишком большими).

text{Attention}_{ij}=frac{Q_i cdot K_j}{sqrt{d_k}}

где:

  • Q_i — запросы от текущего изображения (пиксели или фичи),

  • K_j — ключи от эмбеддингов текста,

  • d_k — размерность ключей.

Запросы (Q_i) и ключи (K_j) — это, по сути, векторы, представляющие собой численные описания различных элементов текста и изображения. Запросы исходят от изображения (например, области, где будет конь), а ключи — от текста (например, «ракета», «быстрый», «конь»).

Т. е. модель анализирует изображение и задается вопросом: «А где бы коня поставить?», после чего смотрит на ключи и решает, где лучше его разместить и в какой позе.

Если, например, запрос от изображения на текущем этапе представляет «коня», и ключ — это «ракета», то attention показывает, насколько «ракета» важна для текущего изображения с «конём».

Фичи — это абстрактные представления изображения, которые содержат информацию о его ключевых элементах. Нейросеть использует фичи для того, чтобы научиться распознавать объекты и их взаимосвязи в изображении, а cross-attention выстраивает фичи в единую композицию.

▍Нормализация значений:

Затем Softmax берёт результаты из прошлого шага (то есть числа, показывающие степень важности) и преобразует их в вероятности — это и есть веса (alpha_{ij}). Чем выше внимание у ключа, тем больший вес у него будет:

alpha_{ij}=text{softmax}(text{Attention}_{ij})

Если, например, для «коня» внимание к «ракете» получилось 2, а к «быстрому» — 1.5, то softmax эти значения нормализует, чтобы они сложились в 1 и отразили важность каждого ключа.

▍Взвешивание значений:

После того как softmax вычислил веса, модель использует их для взвешивания значений (V_j), которые содержат дополнительную информацию о ключах. Например, для «ракеты» это может быть её форма и размер, для «быстрого» — форма надписи на ракете.

Если для «ракеты» вес(alpha=0.6), а для «быстрого» (alpha=0.1) то «ракета» окажет большее влияние на финальный результат.

Итоговое значение (Output_i) будет суммой всех этих значений, умноженных на соответствующие веса:

Output_i=0.6 cdot V_{text{ракета}} + 0.1 cdot V_{text{быстрый}} + 0.3 cdot V_{text{космос}}

Это означает, что каждый элемент промпта («ракета», «быстрый») внесёт вклад в результат с учётом своей важности. Если «ракета» важна для коня (вес (alpha_{ij}) для неё больше), то информация о ракете будет больше влиять на текущее изображение.

▍Пример:

Представим, что мы генерируем область с «конём», а ключи — это «ракета», «быстрый», и «космос». В результате внимания мы узнали, что:

  • Attention(«конь», «ракета»)=2

  • Attention(«конь», «быстрый»)=1.5

  • Attention(«конь», «космос»)=0.8

Затем применяем softmax для нормализации вероятностей (или веса) (alpha_{ij}):

  • «ракета» важна для текущего изображения «коня», и её (alpha_{ij})=0.6

  • «быстрый» тоже важен, но меньше — его (alpha_{ij})=0.25

  • «космос» наименее важен — (alpha_{ij})=0.15

Теперь итоговое состояние этого участка изображения будет комбинацией информации о «ракете», «быстром» и «космосе», с учётом их весов:

Output_i=0.6 cdot V_{text{ракета}} + 0.25 cdot V_{text{быстрый}} + 0.15 cdot V_{text{космос}}

В итоге, «ракета» влияет на финальный результат сильнее всего, что скажется на итоговой генерации.

▍Шаг 3: Self-attention — части генерации взаимодействуют друг с другом

После того как cross‑attention отработал и связал текст с изображением, модель использует self‑attention для улучшения связи между различными частями изображения. Например, «конь» и «ракета» должны быть расположены правильно друг относительно друга, а надпись «быстрый» должна находиться на самой ракете.

Self-attention работает по похожему принципу и использует следующие компоненты:

  • Запросы (Q): векторы, представляющие отдельные смежные пиксели генерации.

  • Ключи (K) и Значения (V): векторы, представляющие другие части того же изображения (для понимания контекста).

Формула для self-attention:

text{Attention}_{ij}=frac{Q_i cdot K_j}{sqrt{d_k}}

Затем softmax вычисляет веса:

alpha_{ij}=text{softmax}(text{Attention}_{ij})

Взвешенные значения влияют на корректировку изображения:

Output_i=sum_j alpha_{ij} V_j

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

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

▍Шаг 4: Применение CFG Scale

Cross-attention и self-attention работают вместе на каждом шаге, корректируя изображение в соответствии с текстом и внутренними связями изображения.

После работы cross-attention и self-attention модель применяет коэффициент CFG Scale [1], который позволяет управлять тем, насколько сильно позитивный и негативный промпты влияют на итоговую генерацию.

▍Шаг 5: Sampling method или метод выборки

После того как внимание и CFG Scale откорректировали векторы изображения, модель применяет метод выборки [2] (например, DDIM или другие).

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

Итог

Механизм внимания (attention) позволяет модели идти об общего к частному, т.е. работать над изображением, как художник: сначала определить композицию и базовые формы, идею, а затем соотнести все объекты друг с другом, чтобы они смотрелись целостно.

Уже только потом подключаются CFG Scale и Sampling method — они являются кистью художника и помогают рисовать там, где нужно, постепенно получая детализированное изображение.

При этом внимание вычисляется на каждом шаге генерации, как CFG Scale и Sampling method.

Заглядывайте в телеграм‑канал [3], где я пишу гайды по Stable Diffusion и FLUX. Там же будут и анонсы новых статей.

Автор: dima_yiu

Источник [4]


Сайт-источник PVSM.RU: https://www.pvsm.ru

Путь до страницы источника: https://www.pvsm.ru/ii/398372

Ссылки в тексте:

[1] CFG Scale: https://habr.com/ru/articles/845746/

[2] метод выборки: https://habr.com/ru/articles/846358/

[3] телеграм‑канал: https://t.me/yiu_ai

[4] Источник: https://habr.com/ru/articles/847698/?utm_campaign=847698&utm_source=habrahabr&utm_medium=rss