2014 dxdy logo

Научный форум dxdy

Математика, Физика, Computer Science, Machine Learning, LaTeX, Механика и Техника, Химия,
Биология и Медицина, Экономика и Финансовая Математика, Гуманитарные науки




Начать новую тему Ответить на тему
 
 Как и почему работает трансформер
Сообщение22.09.2024, 14:01 


12/07/15
3639
г. Чехов
Цель данной темы разобраться самому и другим продемонстрировать. На основе данного материала.

Традиционно для примера берется абстрактная NLP-задача по переводу текста с одного языка на другой.

Каждое слово в предложении превращается в токен (хотя в реальности далеко не всегда токен - это слово). Очень грубо говоря, токен - это набор лингвистических признаков. Например, слово "изображать" в предложении - это [существительное $0$, глагол $1$, сказуемое $1$, просторечное $0$, профессиональный сленг $0$]. По факту все эти признаки могут формироваться нейросетью самостоятельно и могут не иметь толкования, такие данные называют эмбеддингами.
Итак, токен - это вектор длины $k$.
В предложении $t$ токенов, так мы получаем матрицу $X$ размеров ($t \times k$). В этой матрице есть какие-то внутренние зависимости: каждый токен как-то зависит от другого токена.

Перемножаем матрицу саму на себя, транспонированную:
$RW = X \cdot X^T$

Это базовая часть механизма внутреннего внимания (self-attention).

Что тут происходит поэлементно:

$rw_{i,j} = \sum_{r}{x_{i,r} \cdot x_{j,r}}$

Мы берем $i$-ый и $j$-ый токен в предложении и находим скалярное произведение их эмбеддингов. Скалярное произведение - это мера схожести двух векторов. Это базис машинного обучения, который надо знать.

В итоге $RW$ - это матрица размером $t\times t$, в которой в каждой ячейке каждый токен сопоставлен с другим токеном. Если значение большое, то токены имеют большое сходство. Если значение маленькое, то токены противоположны/несовместимы.

 Профиль  
                  
 
 Re: Как и почему работает трансформер
Сообщение22.09.2024, 14:24 
Заслуженный участник
Аватара пользователя


16/07/14
9733
Цюрих
Mihaylo в сообщении #1655563 писал(а):
Очень грубо говоря, токен - это набор лингвистических признаков
Mihaylo в сообщении #1655563 писал(а):
По факту все эти признаки могут формироваться нейросетью самостоятельно
Вот тут ошибка. Токены подаются на вход, они формироваться сетью не могут.
На практике для текстов токен - это последовательность символов. Как правила, полученная с помощью BPE (начальный набор токенов - буквы, дальше заводим новый токен для самой часто встречающейся подряд пары токенов, пока не дойдем до выбранного лимита).
Если у нас контекст из $n$ токенов, и словарь из $m$, то на вход первого слоя - матрица $A$ размера $n \times m$, в которой в каждой строке одна единица и остальные нули.
Дальше идет собственно матрица эмбеддингов $E$ размера $m \times d$ ($d$ - выбранная размерность). И Ваша $X$ - это $AE$.

Mihaylo в сообщении #1655563 писал(а):
Перемножаем матрицу саму на себя
Часто начинают рассказ про attention с этого, я не очень понимаю, почему - этот подход используется не очень часто, а часто используемый позволяет давать как раз более простое объяснение (ключ-значение-запрос, по аналогии с БД).

 Профиль  
                  
 
 Re: Как и почему работает трансформер
Сообщение22.09.2024, 14:40 


12/07/15
3639
г. Чехов
То, что нейросеть сама формирует эмбеддинги токенов, это очень важно. В предложении "Петя ударил Васю лопатой" есть следующие сочетания токенов "Петя [что сделал?] ударил", "ударил [кого?] Васю", "ударил [чем?] лопатой". Эмбеддинги этих пар слов должны иметь совпадения. Нейросеть должна так обучиться, чтобы эти эмбеддинги более-менее совпадали.
Тут срабатывает контракт: если вы выбрали хорошую функцию для аппроксимации и дали корректную целевую функцию для оптимизации, то не важно, какой будет алгоритм оптимизации, контракт будет исполнен так, как его сформулировали. Сопоставление токенов каждый с каждым - это неплохой контракт, в нем не оговаривается как именно сравнивать токены, но он должен дать результат при поиске оптимального решения. Плюсом - все функции дифференцируемы, а значит применим алгоритм обратного распространения ошибки.

В итоге советы любому изобретателю нейронных структур:
1. Ищи хорошие контракты. Контракт - это полезная информация, как надо обрабатывать данные, зашиваемое в алгоритм без права коррекции. Поэтому и называю контрактом.
2. Используй скалярное произведение (сложение и умножение).
3. Функции должны быть дифференцируемы.

-- 22.09.2024, 14:42 --

mihaild в сообщении #1655566 писал(а):
Токены подаются на вход, они формироваться сетью не могут.

Значит токен на входе, эмбеддинг токена на выходе. Я не очень точно знаю, что есть "токен".

-- 22.09.2024, 14:56 --

Говоря на языке трансформеров, я хочу найти такую структуру самовнимания, которая не будет вычислять всю матрицу $RW$ поголовно, а будет запрашивать нужные отдельные элементы матрицы, чтобы убедиться, что скалярное произведение вероятно имеет большое или наоборот маленькое значение.

Например, пиксель внизу изображения зеленый, вверху - синий. Значит на изображении лето. Всего по двум пикселям можно определить искомое. Это очень и очень хороший контракт!

-- 22.09.2024, 15:08 --

Допустим получен первый токен "Петя", можно попробовать запросить следующее слово, оно окажется "ударил" - эта информация уже отвечает на вопросы "Петя преступник?" или "Петя злой?". Хотя конечно стоило бы перепровериться и запросить еще информацию, вдруг Петя ударил по барабану палочкой.

В общем подобный механизм внимания спекулятивный, но сильно экономит ресурсы, так как сопоставлять токены каждый с каждым - это сильно круто.

Таким макаром мы читаем "по диагонали" и слушаем собеседников.)

 Профиль  
                  
 
 Re: Как и почему работает трансформер
Сообщение22.09.2024, 23:15 
Заслуженный участник
Аватара пользователя


16/07/14
9733
Цюрих
Mihaylo в сообщении #1655567 писал(а):
Значит токен на входе, эмбеддинг токена на выходе
Да. И после этого уже содержательные слои.
Mihaylo в сообщении #1655567 писал(а):
Я не очень точно знаю, что есть "токен"
В случае с текстами, как правило, непрерывная последовательность символов. Входной текст преобразуется в последовательность токенов.
Mihaylo в сообщении #1655567 писал(а):
а будет запрашивать нужные отдельные элементы матрицы, чтобы убедиться, что скалярное произведение вероятно имеет большое или наоборот маленькое значение
Про это есть гигантское количество подходов. Всякие block и hierarchial attention, например.
Mihaylo в сообщении #1655567 писал(а):
Например, пиксель внизу изображения зеленый, вверху - синий. Значит на изображении лето

(Не всегда)

Изображение

 Профиль  
                  
 
 Re: Как и почему работает трансформер
Сообщение23.09.2024, 02:13 


12/07/15
3639
г. Чехов
Я продолжу по теории трансформеров, надо дойти до запросов-ключей-значений.

Базовый механизм внутреннего внимания состоит из перебора сочетаний, как я писал выше
$RW = X \cdot X^T$

Затем применяется софтмакс, чтобы получить матрицу ($t \times t$) значений, обладающими свойствами вероятности (значения от 0 до 1, сумма в каждой строчке или столбце равна 1).

$W = Softmax(RW)$

Далее полученные веса ($t \times t$) перемножаются на входную матрицу ($t \times k$), получаем в итоге матрицу размером $t \times k$

$Y = W\cdot X$

И на выходе мы имеем результат перевода с одного языка на другой.

 Профиль  
                  
 
 Re: Как и почему работает трансформер
Сообщение23.09.2024, 06:18 


12/07/15
3639
г. Чехов
mihaild в сообщении #1655566 писал(а):
Часто начинают рассказ про attention с этого, я не очень понимаю, почему - этот подход используется не очень часто, а часто используемый позволяет давать как раз более простое объяснение (ключ-значение-запрос, по аналогии с БД).

Вы оказались правы. Если сразу ввести понятия запросы, ключи, значения, то понятнее становится.

Учим нейросетку делать запросы и формировать БД по типу "ключ-значение".
1. Одна часть учится делать запросы
$Q = W_q \cdot X$
2. Вторая часть учится формировать ключи
$K = W_k \cdot X$
2. Третья часть учится формировать значения
$V = W_v \cdot X$

Матрицы весов $W_q$, $W_k$, $W_v$ имеют размер $k\times k$, матрица $X$ имеет размер $t\times k$. Наверное ошибка в материале, надо переставить местами матрицы $W$ и $X$ в перемножении или у матрицы $X$ поменять местами размерности. Тогда получим матрицы $Q$, $K$, $V$ размером $t\times k$.

Чтобы научить нейронку делать запросы в БД, требуется заключить с ней контракт. А именно, она должна делать так:
$RW = Q^T \cdot K$
$W = Softmax(RW)$
$Y = W \cdot V$

Что происходит?
$rw_{i, j} = \sum_r q_{r, j} \cdot k_{r, j}$
Если запрос и ключ совпадают, то элемент матрицы $RW$ получает большое значение, а в матрице $W$ - вероятность близкую к 1.
P.S. Ну да, похоже размерности местами переставили. В одном месте так, в другом эдак.

В том столбце или строчке матрицы $W$, где вероятность равна 1, а остальные 0 происходит выбор значения в последующем перемножении матриц, например третьего значения:
$y_{i, j} = 0 \cdot v_{1, j} + 0 \cdot v_{2, j} + 1 \cdot v_{3, j} + 0 \cdot v_{4, j} + ...$

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

 Профиль  
                  
 
 Re: Как и почему работает трансформер
Сообщение23.09.2024, 12:50 
Аватара пользователя


14/11/12
1399
Россия, Нижний Новгород
Mihaylo в сообщении #1655655 писал(а):
1. Одна часть учится делать запросы
$Q = W_q \cdot X$
2. Вторая часть учится формировать ключи
$K = W_k \cdot X$
2. Третья часть учится формировать значения
$V = W_v \cdot X$
А как?

Я видел примерно 100500 "объяснений" как работают трансформеры, но нигде не объясняется как найти эти забавные матрицы: $W_k$, $W_q$ и $W_v$.

 Профиль  
                  
 
 Re: Как и почему работает трансформер
Сообщение23.09.2024, 13:09 
Заслуженный участник
Аватара пользователя


16/07/14
9733
Цюрих
SergeyGubanov в сообщении #1655708 писал(а):
но нигде не объясняется как найти эти забавные матрицы: $W_k$, $W_q$ и $W_v$
Как всегда - градиентным спуском.
В самом общем виде, трансформер - это нелинейная функция, параметризованная, в том числе, этими матрицами. Она по ним дифференцируема (почти всюду), значит можно оптимизировать градиентным спуском.
То, что именно такая параметризация работает, а множество формально эквивалентных не работают - экспериментальный факт, вокруг которого есть много рукомашества, но очень мало точных результатов.

 Профиль  
                  
 
 Re: Как и почему работает трансформер
Сообщение23.09.2024, 15:50 
Заслуженный участник
Аватара пользователя


16/07/14
9733
Цюрих
Mihaylo в сообщении #1655655 писал(а):
1. Одна часть учится делать запросы
$Q = W_q \cdot X$
2. Вторая часть учится формировать ключи
$K = W_k \cdot X$
2. Третья часть учится формировать значения
$V = W_v \cdot X$
Вот только тут нелинейные слои, и это важно. Иначе веса запросов получатся просто квадратичной формой $X^T (W_q^T W_k) X$.

 Профиль  
                  
 
 Re: Как и почему работает трансформер
Сообщение23.09.2024, 19:23 


12/07/15
3639
г. Чехов
SergeyGubanov в сообщении #1655708 писал(а):
А как?

Есть такая методология - контрактное программирование. Я оттуда взял понятие контракта. Контракт - это когда разработчик правильно поставил цель и там, где нужно, выставил ограничения. Система, оптимизируясь, сама выходит на заданные состояния. В нашем случае нужно, чтобы нейросеть имела:
1. указанную структуру, которая в пределе имеет вид словаря "ключ-значение",
2. правильную целевую функцию,
3. корректные обучающие примеры,
и вот оно работает!

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

Вы даже достаточно знаете, в каких случаях и какие контракты "заключать".

-- 23.09.2024, 19:26 --

mihaild в сообщении #1655751 писал(а):
Вот только тут нелинейные слои, и это важно.

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

 Профиль  
                  
 
 Re: Как и почему работает трансформер
Сообщение25.09.2024, 11:59 
Аватара пользователя


14/11/12
1399
Россия, Нижний Новгород
На сколько я понял, трансформер работает следующим образом:

1) Сначала блок внимания приводит входной сигнал к канонической форме. Разные по форме/написанию, но одинаковые по содержанию/смыслу (калибровочно эквивалентные) входные сигналы преобразуются к (почти) одной и той же канонической форме (фиксация калибровки). Если входной сигнал является текстом, то грубо говоря, делается некая "сортировка"/"упорядочение" (с выбрасыванием и заменой некоторых) слов этого текста. Обычно "сортировка"/"упорядочение" работает за квадратичное время.

2) Потом блок feed-forward сопоставляет этот сигнал (приведённый к канонической форме) с образцами выученных сигналов. С некоторыми образцами выученных сигналов входной сигнал коррелирует отрицательно - они отбрасываются, с некоторыми положительно - они учитываются далее (ReLU). Для каждого выученного образца входного сигнала выучен образец ответа. Ответ для конкретного сигнала есть линейная комбинация выученных образцов ответов взятая с весами зависящими от корреляции входного сигнала с соответствующими выученными образцами входных сигналов. Далее, по вкусу, эта линейная комбинация выученных образцов ответов может быть подвергнута нелинейному преобразованию и передана следующему слою в его блок внимания.

Проще говоря, следующее слово текста генерируется в feed-forward блоке, а в attention блоке входной текст упорядочивается до канонического представления. Выученные образцы текста (входной-сигнал/ответный-сигнал) хранятся именно в каноническом представлении.

Это хозяйство долго (и дорого) учится в том числе потому, что упорядочивать террабайты образцов сигналов до канонического вида долго. Для ускорения attention нужен аналог быстрой сортировки :D

 Профиль  
                  
 
 Re: Как и почему работает трансформер
Сообщение25.09.2024, 20:18 


12/07/15
3639
г. Чехов
SergeyGubanov в сообщении #1656037 писал(а):
Для ускорения attention нужен аналог быстрой сортировки :D

Нее, в машинном обучении практически все алгоритмы линейные. Есть там методы кластеризации квадратичные, но там вроде к LLM никакого отношения... Другое дело, что число входов, весов, выходов - гигантское. 7 биллионов миллиардов - это еще по-божески.

-- 25.09.2024, 20:20 --

SergeyGubanov в сообщении #1656037 писал(а):
в attention блоке входной текст упорядочивается до канонического представления

Да я бы проще сказал: "текст упорядочивается до представления, которое понятно конкретной нейросети". Не думайте, что там всё разложено по полочкам, как будто это какие-то фундаментальные данные. Мозг не так работает.

 Профиль  
                  
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 12 ] 

Модераторы: Karan, Toucan, PAV, maxal, Супермодераторы



Кто сейчас на конференции

Сейчас этот форум просматривают: CDDDS


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group