ICL является свойством структуры естественного языка, которое в трансформере адаптируется через self-attention
В этой статье я продолжаю развивать гипотезу о том, что языковые AI модели играют ту же роль, которую играла письменность с древнейших времен, и, как письменность, является по своей сути продолжением естественного языка. Некоторые отправные аргументы на эту тему я изложил в другой статье — AI может стать поворотным пунктом в методе познания — наравне с изобретением письменности, и недавно дополнил важным тезисом о том, что искусственные языковые модели близко воспроизводят естественные. Вкратце — наиболее крупные и "эволюционно приспособленные" классы LLM фактически повторяют основные морфологические типы естественных языков, а именно изолирующий, агглютинативный и флективный. Подробное объяснение этого тезиса дается в моем телеграм-посте "Принципы дизайна языковых моделей Искусственного Интеллекта не являются абсолютно новыми — аналогичные механизмы существуют в самом языке, и уже очень давно" (см. аппендикс [1]).
Вопрос, который логически следует из таких предпосылок — как особенности строения языка влияют на LLM и в чем это проявляется? В этой статье я собираюсь озвучить и, насколько это возможно, доказать точку зрения, что один из наиболее труднообъяснимых феноменов LLM — In-Context Learning — объясняется именно свойствами языка, не воспроизводится без их скрытого влияния (одним лишь преобразованиями внутри нейросети) и доказывает мою гипотезу о том, что эти свойства применимы к языковым AI моделям так же, как к естественным языкам. Более того, в конечном счете ICL является свойством естественного языка.
Математическую предпосылку к этому утверждению я формулирую следующим образом: ICL можно интерпретировать как восстановление скрытой функции по конечному набору примеров, а self-attention трансформера выступает как дискретный адаптивный интегральный оператор, аппроксимирующий непрерывное преобразование[2].
Логика рассуждения требует сначала подчеркнуть фундаментальные свойства трансформера и механизма self-attention, которые позволяют сделать такой вывод.
Attention является вполне логичным усовершенствованием обычной Feed Forward Network, строящей последовательность линейных проекций на основе эмбеддингов. Но в отличие от нее, в блоке attention вектор входной последовательности x раскладывается на три отдельных вектора — Query, Key и Value, чтобы сформировать структуру, по которой данные контекста будут двигаться к их конечному состоянию на выходе функции forward. Если в MLP и RNN эта структура — последовательная цепочка преобразований, то с помощью attention она превращается в направленный взвешенный граф, вот так:
Предположим, у нас есть инпут размерности
x.shape = (T, C)
T — количество токенов в последовательности, C — размерность эмбеддинга.
Разложим x на две линейных проекции: query = W_q*x + b_q и key=W_k * x + b_k. Матрицы W_q и W_k обе имеют размерность (d, C) — это веса внимания. Измерение d назовем размером головы внимания. Обе матрицы query и key будут иметь размерность (T, d).
Далее выполним матричное умножение:
attn_scores = query @ key.transpose(-2, -1)
Результатом которого является квадратная матрица следующей размерности:
(T, d) @ (d, T) → (T, T)
Практический смысл которой в том, что в ней α_ij=Q_i⋅K_j, т.е. она хранит скалярные произведения Query токена i на Key токена j, выражающие силу связи между ними. Но ее структурный смысл в том, что она фактически является матрицей смежности графа:
__K1 K2 K3 K4
Q1 _•_ •_ • _•_
Q2 _•_ •_ • _•_
Q3 _•_ •_ • _•_
Q4 _•_ •_ • _•_
узлами которого являются скрытые представления токенов, а ребрами — веса внимания, которые вычисляются так:
weights = softmax(scores) # (T, T)
и содержат элементы w_ij=softmax(Q_i⋅K_j). Именно эта матрица строит структуру графа, и при этом сама является функцией входной последовательности — трансформер каждый раз конструирует структуру на основе полученных данных. Это обстоятельство является ключевым для данной статьи, запомним его.
Но какое сообщение будет передано по ребру между узлами графа? Это третья линейная проекция — value = W_v * x + b_v, со своей собственной матрицей весов. И эта проекция value, наконец, является информацией о тех скрытых признаках, которые токен в действительности передает, тогда как query служит для представления того, какие токены в последовательности важны этому токену (например, связь между подлежащим и сказуемым), а key — того, чем этот токен является для других токенов.
output = weights @ value
или в математической записи:
y_i=∑_j(α_ij * v_j)
Как видим, две трети весов, используемых внутри блока внимания, служат для построения структуры графа (query, key), т.е. для коммуникации, и лишь оставшаяся треть — для самих значений скрытых признаков (value). Но это сообщает трансформеру его уникальные свойства: во-первых, он по сути является графовой нейросетью (см. исследование Google DeepMind — Transformers are Graph Neural Networks) и способен передавать сообщения между токенами по взвешенным ребрам в зависимости от того, насколько конкретному токену i нужно знать о токене j; во вторых, он это делает наиболее математически эффективным способом — через матричное умножение.
Теперь рассмотрим задачу, которую решает трансформер — на основе value-вектора v_j построить новый эмбеддинг токена y_i — как построение новой функции g(x) из имеющейся, назовем ее f(ξ). В функциональном анализе это можно описать так:
g(x)=∫K(x,ξ)f(ξ)dξ
Здесь K(x,ξ) это ядро некоторого интегрального оператора — правила, которое превращает функцию f(ξ) в g(x), взвешивая ее значения в каждой точке с помощью функции-веса K(x,ξ) и складывает (интегрирует) эти результаты. В графовых нейронных сетях непрерывное ядро K(x,ξ) используют для обобщения дискретных взвешенных ребер графа. Т.е. выше мы рассматривали признаки токенов-соседей как дискретную последовательность и агрегировали их с помощью матрицы внимания attn_scores, которая является дискретизацией интегрального оператора. Если для ξ нам известно лишь конечное число точек — ξ1,ξ2,…,ξn, то интеграл заменяется квадратурной суммой g_i=∑_j(K_ij * f_j), и мы снова получили таким образом уже описанную формулу внимания для нового токена i при всех известных токенах j:
y_i=∑_j(α_ij * v_j)
Тогда длина контекста начинает играть роль числа узлов квадратурной формулы. Представьте вектор каждого токена контекста как прямоугольник, покрывающий участок площади под некой функцией. Чем плотнее сетка токенов, тем ближе внимание аппроксимирует эту скрытую функцию, дискретными отсчетами которой являются value-векторы v_1,v_2,v_3, ..., v_j. Что это нам дает на практике? Совершенно верно, few-shot learning. Трансформер строит интерполяцию между примерами контекста, и это дает функциональный ключ к пониманию того, каким должен быть следующий токен. На мой взгляд, это и является механизмом, объясняющим ICL, и рассуждение выше служит довольно-таки полной доказательной базой для такого вывода. Но вывод порождает новые вопросы.
Как известно каждому пользователю LLM, в большинстве случаев трансформеру достаточно нескольких примеров иструкций, чтобы понять, что от него хотят, и уверенно построить ответ. Исследователи знают эмпирически, что после определенного этапа масштабирования модели-трансформера ICL возникает как эмерджентное поведение и затем проявляется стабильно, что делает возможным решение огромного круга задач, не представленных явно в обучающем наборе. Но главный вопрос, который в связи с этим возникает: как по нескольким точкам любого произвольного контекста трансформер успешно, о чем свидетельствует его ответ, восстанавливает скрытую функцию? Мы знаем, и это даже не нужно доказывать, что произвольную функцию таким образом не построишь. Для тех, кто все-таки хочет проверить интуицию формальным доказательством, есть теорема No Free Lunch, из которой следует, что если все функции одинаково вероятны, то несколько примеров ничего не дают. Удивительная устойчивость ICL является одним из самых больших парадоксов в области AI. И есть только одно логическое объяснение этой проблемы — значит, распределение токенов языка в латентном пространстве не является случайным облаком точек, и множество функций, описывающих его, не произвольное, а представляет собой ограниченное гладкое многообразие (smooth manifold). Что и позволяет трансформеру восстановить любую из этих функций из малого набора точек few-shot как локальную касательную плоскость к гладкой поверхности малой кривизны, каковой, в таком случае, должен быть сам язык. Впрочем, здесь следует уточнить, что речь идет об "эффективном многообразии" реальных человеческих примеров языка. Множество всех теоретически возможных символьных конструкций, скорее всего, выходит за пределы данной гипотезы.
Выше я говорил о том, что матрица внимания является функцией входной последовательности токенов. Это — единственное крупное отличие self-attention от любого интегрального оператора, в котором ядро является фиксированной функцией. Трансформер же вычисляет ядро α_ij нелинейно из данных эмбеддинга x, и это доказывает, что он структурно и функционально зависим от языка. Любые известные графовые или другие модели языка, в которых структура преобразования не зависит от самих данных, или зависит линейно, не обнаруживают способности предсказывать продолжение по нескольким примерам данных так, как это делает трансформер. Иными словами, они не могут воспроизвести феномены few-shot learning и ICL. Из этого я заключаю, что ICL является свойством структуры языка, которое трансформер лишь адаптирует через self-attention.
α_ij=softmax(q_i^T * k_j) или K=K(x,ξ;f).
Если соединить этот формальный вывод с личным опытом каждого, то станет ясно — мы действительно имеем дело со свойствами естественных данных, в свою очередь, представляющих продукт мышления. Биологический мозг использует few-shot learning. Дети изучают язык по нескольким примерам, люди мгновенно выводят правила. Даже естественная "интеллектуальность" измеряется через способность распознавать общий паттерн по нескольким примерам (тест IQ). Трансформер просто делает то же самое, и в этом причина его успеха; но он был бы совершенно бесполезен, если бы окружающий мир и его символическая модель — язык не обладали огромной структурной избыточностью. Распределение реальных данных чрезвычайно далеко от равномерного, а язык представляет собой низкоразмерное, гладкое и высоко структурированное подмножество пространства всех возможных последовательностей. Но это просто логическое следствие изложенных наблюдений — а ответ на вопрос, почему это так, лежит далеко за пределами ML и прикладной математики. Даже при содействии современных лингвистики, психологии и философии проблема, по-видимому, остается более чем нераскрытой, но ее хотя бы удалось локализовать там, где она в действительности скрывается — и это не узкий специфический случай внимания трансформера, а гораздо более обширное поле научного исследования, объектом которого является сам человек. Надеюсь, к настоящему моменту рассуждения это уже не должно вызывать сомнений — если так, то это уже успех и в можно ставить точку в данной статье.
Ссылка на телеграм-сообщество для ваших мнений и комментариев: https://t.me/ruslandevlabs/123
Примечания
1. Принципы дизайна языковых моделей Искусственного Интеллекта не являются абсолютно новыми - аналогичные механизмы существуют в самом языке, и уже очень давно.
К такому выводу я пришел, обучая модели-эмбеддинги и MLP — то есть модели, с которых начиналось развитие LLM. Сначала я обучил простую, но исторически важную Word2Vec модель c архитектурой SkipGram. Эта модель, описанная в статье Efficient Estimation of Word Representations in Vector Space, заложила один из первых важных камней в фундамент будущих LLM, так как эмбеддинги являются первой абстракцией над токенами. В более раннем посте я сравнил их с идеями. Эмбеддинг токена — это его абстрактное, но изолированное пока еще представление, нет механизма для моделирования связей между токенами. Смысл комбинаций токенов зависит от их позиций в латентном пространстве, на что опирается feed-forward network типа многослойного перцептрона.
В языковой топологии, конкретно — морфологической структуре, роль эмбеддингов играют односложные корни слов в некоторых языках (моносиллабических). В китайском, вьетнамском, тайском, лаосском — основных моносиллабических языках — слова главным образом независимы. Эти языки изолирующие по строю, то есть смысл в них зависит от порядка неизменяемых слов. Более простые признаки отдельных слов складываются в новые смысловые конструкции путем комбинации в определенном порядке.
我 去 北京 я ехать Пекин
Sequence Models — следующая ступень после MLP — уже заставляет токены влиять друг на друга, чтобы позиция токена могла изменять смысл всей последовательности. Рекуррентную сеть очень просто сделать из нескольких MLP, которые последовательно передают друг другу состояние, строя смысл постепенно: h_t = F(x_t, h_{t-1}). F здесь это MLP-блок, но соседние блоки уже могут влиять на него через рекуррентное состояние h_{t-1}.
В языках есть принцип, действующий именно так — это агглютинация. Суффиксы, каждый с определенным значением, присоединяются к основе один за другим, последовательно меняя смысл слова. Например, в турецком:
ev = дом evler = дома evlerde = в домах
Сравните с RNN, где каждый новый вход слегка модифицирует предыдущее состояние. Как и в рекуррентных моделях существует необходимость хранения длинных последовательностей, так и в агглютинативных языках — например, в финском и том же турецком — слова могут достигать десятков символов.
Наконец, трансформер — это аналогия флективных языков, где при словообразовании используется фузия. В трансформере значение токена формируется не последовательным накоплением, а взаимодействием множества признаков одновременно:
token_i + attention ко всем token_j
После нескольких слоёв получается распределённое представление, смесь признаков, которую уже нельзя разложить на их исходные векторы. Также во флективных языках одна морфема одновременно выражает несколько грамматических категорий.
стол-ом
Окончание -ом одновременно кодирует единственное число, творительный падеж, мужской род, тип склонения. Эти признаки уже не отделяются друг от друга.
Вопрос, что такого в том, что искусственные языковые модели "зеркалят" естественные? А в том, что топология языка влияет на LLM, и глубину этого влияния еще предстоит исследовать. Откуда берутся "эмерджентные" способности, которые модель не учит напрямую, и такое малопонятное явление, как In-Context Learning? Если они не закодированы в весах модели, то не в самом ли естественном языке?
2. "Адаптивный" означает, что ядро оператора не задано заранее, а вычисляется самим трансформером.


