2014 dxdy logo

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

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




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


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

Традиционно для примера берется абстрактная 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
9201
Цюрих
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
3345
г. Чехов
То, что нейросеть сама формирует эмбеддинги токенов, это очень важно. В предложении "Петя ударил Васю лопатой" есть следующие сочетания токенов "Петя [что сделал?] ударил", "ударил [кого?] Васю", "ударил [чем?] лопатой". Эмбеддинги этих пар слов должны иметь совпадения. Нейросеть должна так обучиться, чтобы эти эмбеддинги более-менее совпадали.
Тут срабатывает контракт: если вы выбрали хорошую функцию для аппроксимации и дали корректную целевую функцию для оптимизации, то не важно, какой будет алгоритм оптимизации, контракт будет исполнен так, как его сформулировали. Сопоставление токенов каждый с каждым - это неплохой контракт, в нем не оговаривается как именно сравнивать токены, но он должен дать результат при поиске оптимального решения. Плюсом - все функции дифференцируемы, а значит применим алгоритм обратного распространения ошибки.

В итоге советы любому изобретателю нейронных структур:
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
9201
Цюрих
Mihaylo в сообщении #1655567 писал(а):
Значит токен на входе, эмбеддинг токена на выходе
Да. И после этого уже содержательные слои.
Mihaylo в сообщении #1655567 писал(а):
Я не очень точно знаю, что есть "токен"
В случае с текстами, как правило, непрерывная последовательность символов. Входной текст преобразуется в последовательность токенов.
Mihaylo в сообщении #1655567 писал(а):
а будет запрашивать нужные отдельные элементы матрицы, чтобы убедиться, что скалярное произведение вероятно имеет большое или наоборот маленькое значение
Про это есть гигантское количество подходов. Всякие block и hierarchial attention, например.
Mihaylo в сообщении #1655567 писал(а):
Например, пиксель внизу изображения зеленый, вверху - синий. Значит на изображении лето

(Не всегда)

Изображение

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


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

Базовый механизм внутреннего внимания состоит из перебора сочетаний, как я писал выше
$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
3345
г. Чехов
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
1368
Россия, Нижний Новгород
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
9201
Цюрих
SergeyGubanov в сообщении #1655708 писал(а):
но нигде не объясняется как найти эти забавные матрицы: $W_k$, $W_q$ и $W_v$
Как всегда - градиентным спуском.
В самом общем виде, трансформер - это нелинейная функция, параметризованная, в том числе, этими матрицами. Она по ним дифференцируема (почти всюду), значит можно оптимизировать градиентным спуском.
То, что именно такая параметризация работает, а множество формально эквивалентных не работают - экспериментальный факт, вокруг которого есть много рукомашества, но очень мало точных результатов.

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


16/07/14
9201
Цюрих
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
3345
г. Чехов
SergeyGubanov в сообщении #1655708 писал(а):
А как?

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

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

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

-- 23.09.2024, 19:26 --

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

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

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


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

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

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

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

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

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


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

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

-- 25.09.2024, 20:20 --

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

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

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

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



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

Сейчас этот форум просматривают: нет зарегистрированных пользователей


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

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