rizzearch
1.01K subscribers
988 photos
11 videos
320 links
Кайфули на каждый день

Авторы:
@zzmtsvv
@maxnygma (AI4Science посты)
Download Telegram
Lightning Attention-2: A Free Lunch for Handling Unlimited Sequence Lengths in Large Language Models

помимо дипсика и квена, недавно успели еще китайцы выкатить очередную ллм - минимакс, уже по традиции которая является МоЕ + вводит гибрид софтмакс и линейного аттеншнов (кстати о махинациях с аттеншном мы уже ни раз писали)

при том второй аттеншн не абы какой, а лайтнинг (не тот слава Богу). в минимаксе используется первая версия, а почти одновременно с этой моделькой успела выйти и вторая версия

в чем вообще суть - вот у нас есть

softmax(Q @ K^T) @ V, где иннер продукт между запросами и ключами выдает матрицу seq_len x seq_len, что довольно много

→ приходит в голову идея линеаризовать аттеншн, то есть делаем просто из softmax(Q @ K^T) ~= phi(Q) @ phi(K^T) ⇒ [phi(Q) @ phi(K^T)] @ V, что можно переписать как из left product в right product

phi(Q) @ [ phi(K^T) @ V ], где не будем напрямую высчитывать seq_len x seq_len матрицу, а будет только hidden_dim x hidden_dim. profit?

не совсем, когда в дело приходит понятие каузальности, ибо тогда формула становится (phi убрал для удобства) снова left product

[Q @ K^T * causal_mask] @ V

снова получаем seq_len x seq_len момент, это дело можно исправить алгоритмом Linear Attention Right Product (на предпоследней фотке), но тогда встревает кумулятивная сумма, которую не распараллелить

ну и авторы довольно красивое решение предлагают в виде того, что как раз и называется Lightning Attention

- во-первых, го вычислять аттеншн по блокам, по которым и будет идти цикл как обычно
- а в каждом блоке будем одновременно вычислять аттеншны и первым, и вторым способом: через left product с каузальной маской будет вычисляться intra block (как я понял потому что он находится рядом с диагональными элементами как раз, где и нужна каузальная маска), а через right product inter block (который/которые не соприкасаются с диагональю и можно без каузальной маски их использовать, да еще и этот блок вычислить можно через накопленную кумулятивную сумму KV), а в конце просто просуммируем, не забыв обновить KV
- тут получаем трейдофф между лево- и правоматричным умножениями, который еще и к тому же нетяжело под хардвейр оптимизировать - перетаскивать поочередно блоки между High Bandwidth Memory & SRAM (последняя картинка для иллюстрации отсюда, по всем правилам - чем больше по памяти вмещается, тем медленее работает)

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

реализовано все на тритоне, метод в принципе применим не только к их ТрансНормеру

👀 link, code
6👍21
Forwarded from NLP Wanderer
О неочевидном поведении DPO и улучшениях SMPO в новой SLM от VIkhrModels

Недавно вышедшая QVikhr-2.5-1.5B-Instruct-SMPO, отличается не только лучшим качеством среди наших небольших тюнов, сопоставимым местами с 7B моделями, но и улучшениями в нашем методе алайнмента SMPO.

В ходе большого количества экспериментов я заметил, что офлайновая DPO-like (любая, в том числе и SMPO, ORPO, SimPO и тд) тренировка, часто при обучении может приводить к вырожденным решениям, например, таким, где модель теряет EOS токен при генерации и уходит в повторения или просто в генерацию сломанных токенов.

После небольшого расследования выяснилось, что частично такое поведение объяснимо поведением логарифма при вычислении логпробов токенов (картинка 1), которые в свою очередь участвуют в вычислении ревордов, разница между которыми и оптимизируется в DPO. Вычисляя логарифм чисел в районе 0, вы легко можете получить неограниченное падение логпроба в минус бесконечность. В случае DPO вы эти логпробы потом складываете, в случае SMPO они усредяются по всему комплишену. И в том и в другом случае, вы не спасаетесь от возможных значений-выбросов на конкретных токенах.

Если говорить более простыми словами - если ваш rejected содержит какието очевидные закономерности в токенах, которые его отличают от chosen, то модель через DPO может научится занижать логпробы именно этих токенов в минус бесконечность (т.е. обнулять вероятность) и выигрывать тем самым objective DPO, при этом для более "умных" последовательностей токенов, которые вы хотели бы тоже выучить, оптимизация может вобще не произойти, приводя к довольно тупым результатам, частое из которых это занизить логпроб EOS токена на всех rejected, тем самым почти уничтожив вероятность его генерации на OOD примерах - получаем проблему бесконечных повторений.

Конечно, такое поведение связано с плохой регуляризацией в RL. Выбор меньшего lr, уменьшение гипермараметра beta (в dpo), использование KL (как в DPO) или rejected и chosen SFT амортизации (как в SMPO), лучший выбор модели (какие-то меньше подвержены), использование model merging между SFT и PO стадиями тренировки, в целом обучение не до конца, частично помогает бороться с таким хаком обжектива. При тренировке Vikhr-Nemo было проведено немало экспериментов с гиперпараметрами, но проблема не была полностью вылечена.

В итоге, для тренировки наших следующих моделей мы теперь используем модифицированную версию SMPO (картинка 2), в которой было решено ввести штраф на занижение EOS токена для rejected комплишенов, а также сделать винзоризацию и клиппинг экстремальных значений логпробов, что позволило частично решить проблему нежелательного переобучения.

Модифицированный SMPO и конфиги обучения уже доступны в нашей библиотеке Effective LLM Alignment
🔥6
Vintix: Action Model via In-Context Reinforcement Learning

не дипсиком единым жив рл, а всем исходящем из дуно живет отечественный In-Context RL

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

и из этого и рождается винтикс на основе ДимДимычей в виде AD, TinyLLaMa (откуда много из архитектуры бралось) и частично JAT (стоит упомянуть, что основной автор этого агента сейчас в основном занимается в хф трл и опен-р1)

в общей сумме тренились на 87 тасках в симуляторах (что очень мало для ин-контекст рл, где это количество от сотен до тысяч)

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

поскольку акншы и обсервейшны в этих симуляторах разные, то для каждого использовались отдельные энкодеры/декодеры, чтобы подгонять под нужную размерность для трансформера + насколько я понял, каждый батч - семплы из одной среды (как это было сделано и в JAT)

данные собирали при помощи расшумления траекторий от политик ппо или взятых с JAT + обобщили эту идею на непрерывные действия

- посколькуо в изначальной папире этот метод предлагался в дискретном пространстве → реализовывался epsilon-greedy алгоритм, где действия политики сразу были оптимальны (был взят оракул)
- то здесь пришлось линейно интерполировать каждый раз между действием полиси и рандомным вектором. но при том сам коэффициент влияния шума пришлось подбирать нелинейным способом, чтобы уже в таких более-менее сложных задачах траектории обучения как датасет был “гладким”

тренировали каузальный трансформер в 300М параметров на 8 картах, что для рл сейчас более-менее. по итогу что-то да получилось - на трейн тасках есть прогресс получше JAT (где это уместно сравнивать) + если варьировать в трейн тасках конфигурацию среды (например в муджоко потыкать гравитацию или уровень вязкости), то агент может адаптироваться к таким изменениям, что довольно круто (авторы назвали это self-correction, в последнее время это слово часто всплывает)

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

👀 link, code coming soon (датасет тоже планируют релизить)
63
FAST: Efficient Action Tokenization for Vision-Language-Action Models

зачем-то physical intelligence, которые делали pi0, себе второй домен забабахали pi.website, на котором запостили как они сделали токенизатор для робо действий

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

ну и физикал интеллиженс пытался это решить как раз через флоу матчинг в прошлый раз, что более-менее и получилось (с нюансами), но они проработали и альтернативу в виде FAST

при том идея хороша тем, что построена она из привычных рабочих техник

- надо бы как-то эффективно сжимать временные ряды действий. можно бинаризовать - ок, но в случае высокой герцовки робота получается все больше бинов за все меньшее количество времени → медленный инференс. но можно вспомнить (или просто почитать предположение авторов), что траектории действий во времени являются все-таки гладкими, а значит и это можно использовать для компрессии
- lets go to the Discrete Cosine Transform! да, вот такой переход потому что это уже своего рода классика: будем получать наибольшее количество информации в низких частотах, а значит и можно будет сжимать очень многие высокие частоты)
- получим матрицу для каждого action chunk (о важности чего мы упоминали здесь), которую нам неплохо было бы представить в виде последовательности, чтобы потом использовать БПЕ (потому что скорее всего это тоже привычно и довольно удобно) → давайте флаттенить, да при том чтобы низкие частоты были в начале последовательности, а высокие (незначительные) в конце + допом сделаем scale-and-round операцию чтобы округлить до нулей все незначимое
- тогда и можно запускать бпе бррррр

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

по результатам он даже обгоняет первую версию их pi-модели с флоу матчингом. то есть (имхо) авторы пытаются дать эвиденс о том, что стоит по максимуму токенизировать все что только можно при работе с трансформерами прежде чем приступать к флоу матчингу (даже с трюками авторов по типу бета распределения версия с токенизатором обгоняет по результату, подтвердили на экспах где обучали оба метода до сходимости и где уравнивали бюджет компьюта)

при том это настолько хорошо вкладывается в пайплайн физикал интеллиженса, что они утверждают о возможности зеро-шота на DROID + там где происходит фейл на эпизоде, полиси делает не вообще полностью что-то рандомное

теперь к вопросам, которые появились

- перед DCT происходит нормализация в рейндж от - 1 до 1 на основе статистик датасета по первой и 99 квантили. FAST+, который они выпустили в опенсурс построен аналогичным путем и заявляет о своей универсальности. звучит немного странно с учетом такой нормализации. да, их датасет основан на многих роботах + 1млн траекторий
- но это все равно как будто слишком уникальное дело по поводу токенизации акншнов для робота + так же в экспериментах они говорят об низкой чувствительности к scale параметру перед округлением и вокаб сайзом для БПЕ → выбирают 10 и 1024. как будто второе число довольно-таки мало (особенно сравнивая с вокаб сайзом для лмок что не очень честно но хоть что-то), чтобы с удобоваримым пресижном сжимать действия,

но может я чего-то не понимаю в этой жизни и это довольно-таки интересный инсайт о природе рободействий в нашей реальности

👀 link, демки, code вроде выложили но там нету самой процедуры обучения токенизатора
51
Scalable-Softmax Is Superior for Attention

в прошлом году выходила интересная работа от дипмаинд, которая показывала проблему софтмакса в аттеншне при выходе на длинные “острые” последовательности

однако адекватного решения предложено толком не было кроме фита кривой энтропии, а в этой работе пацанчик в соло решил продолжить это дело

и придумал простую модификацию для софтмакса → просто домножать запросы в аттеншне на s * logn, где s - обучаемый скаляр для каждого слоя, а n - длина последовательности соответственно. назвал Scalable Softmax (SSMax)

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

по скейлу автор тренировал в разных сетапах 168М ЛЛаму-2, в таком сценарии действительно наблюдается бОльшая стабильность относительно удлинения контекста, при том необязательно даже с самого начала обучать используя SSMax, а можно после претрена заменить обычный аттеншн на него (тогда никак на натренить параметр s и он везде эвристически заменяется на обратное от среднего лог сек ленов во время обучения, например от 1 до 1024)

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

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

👀LINK
👍5🔥1