Авторка активно хочет зашарить все на свете и делится в этом канале. NLP ⊂ AI → NLP/CV/speech ⊂ AI Связаться со мной @nadlsk Тг буст канала: https://t.me/nadlskom?boost Чат айтишниц: https://t.me/+n-WIEfhc3ZFhOGIy Реклама очень дорого.
Недавно коллеги из соседнего чата выпустили Vikhr-7b-instruct_0.2 - хорошую, на мой взгляд, русскоязычную instruct модель.
Я сделал квантизацию этой модели, забрать можно на Hugging Face .
@toshoseti
Шел 2024, выходила 15673752 модель decoder-only с метриками как у ламмы. Прикольный полностью открытый проект конечно, но уже надоело
Хз, покопаться в кодовой базе всегда полезно (за это прям лайк)
Если очень хочется – статья
😐
P.S. Похайповали в конце тем, что обучали ее с совсем незначительным энергопотреблением и углеродным следом. При чем на картах nvidia дела в этом плане состояли хуже чем у ламмы
Прикольно конечно, нооо
Увидела в соседнем канале анонс недавно вышедшей статьи и захотелось разобрать ее здесь. Изначально, я подумала, что это метод обучения для динамического принятия решений, но оказалось, что метод направлен на промптинг, который способен открыть новые возможности в рассуждении модели
Мотивация следующая: LLMки конечно умненькие, но по сути, они могут вспоминать примеры, которые им уже показывали, и на основе данных в обучении решать задачи, составлять рассказы и многое другое. Мы уже можем давать модели факты для этих задач (например RAG), но она не может объективно принимать решения на разных шагах
Так вот, авторы ушли в теорию игр, когда при динамически меняющейся среде, игроку приходиться менять свое решение в зависимости от происходящего здесь и сейчас. В работе вспоминаются 2 довольно популярные игры. Вы точно в них играли на учебе или с друзьями в компании: 1) когда нужно загадать число от 1 до 100 и выиграет тот человек, который загадал число близкое например к 80% 2) когда нужно назвать самую большую стоимость, не зная, что загадали ваши соперники. Собственно, LM-ке предлагается поиграть в такие же события и адаптироваться по предыдущий уровень решений ее соперников
Пробовали в качестве промптинга уже известные нам методы Chain of thoughts, persona prompting, модифицированый CoT, а также предложили свой подход: Когда мы даем заглядывать модели на глубину уровней и рекурсивно принимать решения. Идея в том, что модели необходимо усваивать состояние среды на предыдущем шаге, чтобы быть «на шаг впереди» от своих соперников.
Как ни странно, такой подход сработал гораздо лучше по различным метрикам адаптации к состоянию среды на уровень назад
Статья
Воскресное прочтение книжек свелось к следующему заключению, вдохновленному статистикой. Как будто не что-то новое, а как будто раньше не могла до этого додуматься
Если представить ваш путь в области X, как функцию, то у вас явно будет какое-то среднее, что будет показывать ваш навык в этом деле (его можно повышать упорным трудом), а также максимум и минимум функции. Когда вы прошли свой максимум. Т. Е. Вы чувствуете, что пик успеха был и дальше все становится только хуже. Ну или просто ходите вокруг среднего, то в плюс уходя, то в минус. Мб пора менять область X на область Y. Исходя из смены функции, вы сможете уходить в максимум непрерывно долго, особенно когда область X дает буст к области Y
Про локальные языковые модели для относительно неподготовленной аудитории:
Видео: https://youtu.be/KXBRGkZTX1U?si=CyVKSUavsSnZfffR&t=241
Презентация: http://tinyurl.com/gusevlocal
Подкаст: https://mlpodcast.mave.digital/ep-55
Про древнюю генерацию стихов:
Видео: https://www.youtube.com/watch?v=wTN-qKPu4c0
Статья на Хабре: https://habr.com/ru/articles/334046/
Про Сайгу:
Видео: https://www.youtube.com/watch?v=YqKCk8_dNpQ
Презентация: http://tinyurl.com/gusevsaiga
Статья на Хабре: https://habr.com/ru/articles/759386/
Про не-трансформерные модели:
Видео: https://www.youtube.com/watch?v=C65JbhTi-O4
Презентация: https://tinyurl.com/gusevlrnn
Кстати, в эту статью наконец долили код, что ни может не радовать🤩
🖥Код все там же
Мое почтение авторам работы про которую сейчас пойдет речь 🤩. Такого открытого описания достижения результатов и приложения кода, модели и тд к работе, можно встретить очень редко. Поговорим о кодовой моделе DeepSeek-Coder 💕
Данный подход превосходит на метриках Codex, но не доходит до GPT4-Turbo, НО, меня поразило, что авторы целый параграф рассказывают как они старательно вычистили все схожие строки кода с тестовыми данными. После этого, начинают лезть вопросы в голову, а точно ли в GPT4 OpenAI парились с вычищением строк, пересекающихся с открытыми бенчами, но это ладно. Хочу рассказать чем именно отличима модель от своих предшественников
Во-первых тюн происходил в 3 этапа:
💛претрен (архитектура – хайповая decoder-only. Го в статью, если хотите узнать детали какой attention и гипепараметры обучений)
💛Тюн на большую длину последовательности (с RoPE порядка 1000 шагов проучили на длину контекста 16к и батч 512)
💛Инструктивный тюн
Что было необычно в подготовке данных? Ну чуваки прям запарились (см скрин 2, там схема)
Итак, стадии очищения:
1️⃣Очищение скрауленных данных (GitHub, StackExchange). Очищали например код средняя длина строки у которого 100 символов
2️⃣Работали с использованием зависимостями (вот это очень прикольно). Авторы обращают внимания, что раньте все обучали модель без обращения внимания на скрипт откуда проходил импорт функций. Теперь же, они строят граф, а по нему уже расставляют в правильном порядке скрипты на обучение
3️⃣Дедупликация на уровне именно кода, а не файлов (обратили внимание, что это один из основных шагов на пути достижения достойного качества LMки)
4️⃣Проверка кода на работоспособность
А еще, процесс их обучения состоял не просто из предсказания последующего токена, а fill-in-the-Middle (когда последовательность разбивается на 3 сегмента, перемешивается и предсказываются пропуски)
Код
Модели в разных размерах
😍
На днях от huggingface вышла новая библиотека для дедубликации, фильтрации и подготовки данных в большом объеме.
Удобство от их библиотек лично у меня в сердечке 🤌. Пока есть много примеров использования в репе, но не нашла еще документации на их сайте. Думаю, что скоро появится.
А пока уже можно начинать пользоваться🥹
Retrieval для RAG (ну на самом деле не только)
Статьи не нашла, но сам проект интересный. Можно посмотреть код самой модели для эмбедингов (минус в том, что нет русского языка), посмотреть как они ранжируют эти эмбединги, также авторы представили сам процесс evaluation на разные задачи (классификация, ранжирование, кластеризация и много других)
😒Из минусов: кода тренировки нет
☺️Из плюсов: возможность воспроизводимости, подобранные промпты для оценки моделей-конкурентов, инструкции как работать с другими библиотеками (langchain, lamma_index)
Мне было интересно, делюсь и с вами 🥰
однажды ты спросишь меня, что я люблю больше, тебя или свои нейросетки ебучие и уйдешь, так и не узнав, что, к сожалению, я не могу ответить на этот вопрос, так как он содержит обсценную лексику и может оскорблять других пользователей
Читать полностью…[пост был удалён]
Вихрь - семейство русификацированных моделей (flan т5 240м, flan т5 3В, mistral 7B) как основы.
Все имеют адаптированный под русский токенйазер, подучены на хабре, а т5 ещё и на переведенной open orca.
Все модели учились с дистиляционным лоссом, те просадка относительно оригиной модели минимальная, но деньги кончились и инструкт версию для mistral мы не доделали, возможно позже.
По метрикам ВОЗМОЖНО лучше чем закрытые модели Яндекса и Сбера, но точными цифрами сложно оперировать, я не уверен в русских бенчах, а saiga sbs руки не дошли поставить.
Возможно позже.
Sentence версия т5 не полетела, энкодер от flan сопоставим с энкодером Fred T5 xl.
Если у вас есть архитектура где используется flant5 xl и хочется поддерживать русский - можно смело подсунуть этот флан. Встанет как влитой.
Подробности в статье на хабре на следующей неделе.
Huggingface
Релизнули с @nadlskom @den4ikresearch(ft flan на saiga как early bird, выйдет позже )
Всех с наступающим, спасибо за большой интерес к этому каналу, который начал свою активность всего то в феврале этого года🥰
Пусть каждый подписчик в течении года будет
💛Выдерживать все объемные задачи и совмещение аспектов этого мира, как H100 обрабатывает интенсивные вычислительные задачи
💛Будет обращать внимание на совокупность жизненных факторов, как Mixtral
💛Будет обладать такой же способностью к обучению, как GPT-4
💛Делать крутые штуки, затрачивая минимум ресурсов, подобно PEFT
💛Будет таким же нестандартным и всегда разнообразным, как диффузионный процесс
Ну и конечно же счастья и здоровья, чего не может быть у ИИ в отличие от нас☺️
🕸Генерировала картинку, как всегда, с помощью insomnia.land
Даже не думала, что мы соберем по итогу такие интересные вопросы. Очень не стандартные.
Теперь не пройти тех интервью в новом году шанса не будет 😎
Ну все, закат эпохи MoE, а начиналось так красиво😭
Тут вышла новая модель, которая модифицирует Mistral не добавлением экспертов, как в MoE (мне до сих пор не понятно как это чудо тюнить и куда пихать), а копированием и задвоением слоев
Технология такая: копируем слои модели, обрезаем немного с верхушки и с конца (авторы объясняют это борьбой с неоднородностью слоев). Ну и стакаем вместе. Идея не супер новая, но работает, теперь в лидерборде модель в сумме на 11B параметров красуется выше, чем 47B Mistral в сумме
Еще непонятно почему авторы обрезают именно 8 слоев. Поясняют это буквально тем, что так надо. Но в общем и целом, красивое решение и можно проделывать с любой новой архитектурой, которая даст прирост
🙂Папир
Находка прошлой недели. Опять эти Microsoft релизнули что-то хайповое. Взяли мистраль, поучили 1000 шагов на контрастив, померили в сравнении с их E5 претреновой моделькой, целенаправленно обученной в виде dssm
Получился небольшой прирост, но много подводных камней. Нужны обязательно инструкции, да и в мультияз авторы не рекомендуют мистраль использовать. Но если вы хотите поморочиться с руссификацией и данные ваши подразумевают инструкции. По-моему очень крутое решение может получится
🤗Модель на hf
После вчерашнего анонса Sora, для полного счастья мне не хватает только сетки, которая будет генерить такие, как ниже, 💃музыкальные шедевры💃:
❔Хотя не могу отделаться от мысли, что монетизировать все эти LLM, диффузионки для фото и видео еще очень-очень сложно, скорее только в качестве фич для развлечения
⬇️
QuIP#: Even Better LLM Quantization with Hadamard Incoherence and Lattice Codebooks
[Статья][Код]
Только-только мы с коллегами выкатили AQLM , как конкуренты нанесли ответный удар)
LLM-ки становятся все круче, новые модели, датасеты с инструкциями выходят почти на ежедневной основе. Однако, самые сильные из опенсорсных моделей (Llama-2-70b с дохреналлионом файтьюнов, Микстраль и загадочное нечто под названием miqu) не влезают в колаб или условную RTX 3090/4090. Квантизация в 4 бита (до недавних пор бывшая Парето-оптимальная) недостаточна, чтобы позволить уместиться такой здоровенной модели на щупленькую видеокарту, а предыдущие методы квантизации в 2-3 бита ломают заметно модель и проще взять меньшую модель в большей точности. Но свежие работы открывают дорогу к инференсу оверсайзд моделей на хорошей геймерской GPU.
Метод
Quip# (решетка, потому что E8 решетка квантования) стоит на трех 🐳 :
1️⃣ Incoherence processing
2️⃣ E8 решеточная векторная квантизация
3️⃣ Дообучение неквантованных параметров
1) Как известно, веса больших языковых моделей обладают выбросами (outliers), плохо поддающимися квантованию, и в ряде прошлых работ было предложено их тем или иным образом изолировать. Здесь же, следуя своей прошлой работе QuIP авторы домножают веса на случайное ортогональное преобразование, благодаря которому величины и чувствительности параметров растекаются равномерно по матрице (incoherence processing). Отличие от прошлой работы в том, что вместо произведения кронекеровских матриц для параметризации ортогонального преобразования используется случайное Адамарово преобразование, более эффективное вычислительно и не уступающее по качеству.
2) Поэлементная квантизация не совсем оптимальна в том смысле, что оптимизирует ошибку в пределах некоторого гиперкуба (если рассматривать группы весов). А в действительности группы весов распределены в некотором шаре. А объем шара того же диаметра, что и сторона куба, в большой размерности много меньше описанного вокруг него куба. И при том же количестве кластеров (квантованных значений), можно добиться значительно меньшей ошибки. Для используемой в работе квантизации группами по 8 весов оптимальная решетка - E8, как было показано сравнительно недавно.
3) Чтобы уменьшить ошибку квантизации, можно потюнить модель воспроизводить выходы слоев исходной модели. Как и в AQLM авторы сначала дообучают неквантованные модели на уровне отдельных блоков трансформера. А на второй стадии обучают уже все неквантованные параметры на минизацию разницы между сжатой моделью и исходной fp16.
Для больших битностей (3-4 бита) используется Residual Vector Quantization, когда ошибка квантизации еще раз квантуется и конечный вес представляется в виде суммы квантованного веса и квантованной ошибки.
Люди делятся на 2 категории: те, кто уже нашёл выход из рекурсиии тех, кто делится на 2 категории:...
Читать полностью…Google research выкатили занимательную работу по созданию сетки (TimesFM) для временного ряда на декодере (хайп LLM затянулся, мы теряем адекватность индустрии)
Я далека от временных рядов в индустрии, но, когда я читала эту статью, подход казался довольно органичным. Обрабатывают же временной ряд на LSTM-ках, почему бы не применять декодер для точечного прогнозирования
В чем особенность:
В общем то, не так много деталей, которые отличаются от обучения обычного декодера на текстах, но стоит упомянуть следующее
❓патч (типо токен) представляют в виде групп смежных моментов времени, затем с residual блоком конвертируют патч в векторное представление по размерности модели (аналогия к эмбедингам)
❓в работе прибегают к рандомному маскированию, чтобы сетка не подстраивала под обработку только длины входной последовательности при обучении
❓учат сеть предсказывать последовательность длиннее, чем на входе
❓в качестве лосса прибегают к MSE, но упоминают, чтобы исходя из ваших нужд, можно прибегать в вероятностному прогнозированию с likelihood лоссом
С днем выложенного кода к проектам!🥵
Заметила, что буквально 3 дня назад релизнули код обучения LLaVA-1.6. Напомню, что это недавно вышедший апгрейд LLaVA-1.5
Новая модель на некоторых бенчмарках показывает себя лучше GPT-4V от OpenAI и опережает все открытые VLM модели
Напомню в чем апгрейд над старой версией:
1. Более высокое разрешение изображений, что помогает учитывать больше деталей на изображении и меньше галлюциногировать
2. Улучшили данные для визуального инструкт обучения, что очевидно повысило качество
3. Расширили размер LLM, что позволило улучшить представления о мире (в том числе добрались до Mistral)
LLaVA представлена в 3 размерах (7B, 16B, 34B)
🖥Репа, куда зарелизили код для новой модели тоже. Там внутри в README и блогпост
В сети есть уже несколько zero-shot моделей, в которых можно вкинуть своё фото, вбить промт или выбрать стиль, и получить картинку в нужном контексте. В отличие от прошлогодних нейронок, основанных на методе Dreambooth, такие модели не требуют обучения на ваших данных и могут генерить с вами фотосет с парадного входа.
InstantID
По одному фото выдаёт хорошие результаты, можно прицепить рефернс для понимания целевой позы, есть controlnet через pose/canny/depth/ и их можно комбинировать, как и смешивать стили. В отличие от других моделей, в один кадр можно вписать более одного человека или совместить их в одну личину в требуемой пропорции.
Демо (англ) // Демо (рус) // Сайт // Гитхаб
PhotoMaker
Здесь можно обойтись одним фото, но чем больше — тем лучше. В промте обязательно надо указать слово img
(например, woman img
или man img
) иначе выдаст ошибку. Есть вариант для фотореалистичных генераций, а есть для стилизации.
Демо (реализм) // Демо (стилизация) // Сайт // Гитхаб
IP-Adapter-FaceID Plus
Это версия IP Adapter зафайнтюненная генерить человеческие лица в реалистичном или стилизованном ключе. В онлайн варианте есть немного контроля. Если нужен controlnet, то это уже локально надо модель ставить.
Демо // Гитхаб
SDXL-Auto-FaceSwap
Хороший однокнопочный вариант на основе SDXL, но сейчас на паузе. Вероятно, чтобы его снова запустить понадобятся платные опции железа Hugging Face.
Демо
Мы релизнули вихрь💨 Нормально.
Проблемы: мы не очень уверены что оно точно аутперформит mistral и saiga mistral. Формально - да, все хорошо.
Цитируя классику
Если вам интересно что мы сделали: хабр
А еще оформили все в красивую HF репу: https://huggingface.co/Vikhrmodels
ChatQA или догоняет ли Ахилес черепаху GPT-4.
Намедни, NVIDIA выкатила статью, где дословно утверждается:
"Notably, our ChatQA-70B can outperform GPT-4 in terms of average score on 10 conversational QA datasets (54.14 vs. 53.90, тут кстати значим ли разлет? ) , without relying on any synthetic data from OpenAI GPT models."
Таблицы результатов замеров на разных QA датасетах , размеры модеделей и сетапы указаны, смотрите папиру. Жаль моделек в открытом доступе нет, а представлены там размеры: 8b, 13b, 70b. 8b видимо, чтобы не подумали, что кто-то все на llama2 сделал ;)
Мне более интересно как делают эффективный тюн под dialogue QA.
Первый этап (они прям так его и зовут) это ,разумеется, претрен+domain sft adoptation. Тут они берут general диалоговые сеты аля SODA, OpenAssistant, приправляют чутка другими аля инструктивный FLAN и long-QA eli5 и тп.
Второй этап это уже более узконаправленный контекстно-улучшенный instruction tuning чисто под QA домен. И тут самое интересное,на мой взгляд, творится.
Подход подобен e2e обучению LLM+retrieval(RAG). На данном этапе, проводят два эксперимента (на самом деле три, но основных ветки две, а третья уже микст): с обучением ретривера по контексту диалога или по саммари контекста диалога. Раскрою вышеуказанное поподробнее. Ретривер используется для того, чтобы сходить в базу знаний и вытащить оттуда документы/чанки (не более 300 слов), далее положить их в контекст LLM и улучшить ее QA ответы. Для этого авторы предлагают или использовать в качестве запроса контекст диалога as is или его переписанный вариант/саммари. Все сетапы тюнились в ретривере на базе E5 и Dragon в contrastive формате аля CLIP/SBERT и тп. (схему приложу ниже). Причем, до кучи, еще пробовали E5 и Dragon заморозить. Rewrite диалога получали путем обстрела GPT-3.5, для этого даже приложили удачные сетапы инструкций/промтов в статье. Для E5 итоге победил внезапно подход без переписывания диалога, а для Dragon разница в метриках , по словам авторов, не значима (тут я согласен). Более того, переписывание диалога, по словам тех же авторов накладывало бы на них зависимость от ChatGPT, какие бы смыслы вы под этим не поняли (время генерации, лицензия, деньги).
Что еще интересного? А то, что потом авторы микстанули подход но уже на уровне нарезки документов. Т.е. в контекст LLM уже стали досыпать не только top-K выдачу чанков из ретривера, но и саммари лучшего документа, который содержит ответ. Сначала, они делали top-4 выбор чанков, но потом добавили саммари топ-1 документа, и назвали это уже топ-5 подходом. Причем сделали они это не случайно. Пробовали искать по саммари документов (которые 100% содержат в себе ответ), но чтобы не размывать информацию таким образом, стали микстить по процедуре выше. Тут показал себя лучшим Dragon, а также в среднем улучшились метрики ответа LLM для retrieval сетов, но упали для остальных. На мой взгляд не значимо, ни рост , ни падение. Да и сетап был chatQA-70b+top5 (см.таблицу 5).
На этом, для меня интересное закончилось. Узнал про новые RAG подходы в e2e с LLM и на контекстах диалогов, неплохой хинт с микстом саммари и чанками документов.
Всем хорошего воскресенья!
PhotoMaker: Customizing Realistic Human Photos via Stacked ID Embedding
Кайфовая работа вышла. Позволяет генерить людей в разных стилях и амплуа по заданным фотографиям. Вон смотрите как кайфово ЛеКуна нагенерили.
Но, в отличие от DreamBoth и всяких LORA, в этой работе избавились от надобности файнтюнить модель под каждую новую личность.
Во время тренировки мы выдираем из входных фоток эмбеддинги, кодирующую личность, и учим диффузионную модель использовать их в качестве кондишенинга для генерации желаемых личностей.
А во время инференса, мы можем подать набор фотографий нового юзера и сгенерить для него аватарки без дополнительных тренировок. Это быстро и более эффективно, чем файнтюн под каждого юзера.
Идея простая и изящная, строящаяся на том, что давно существуют сетки, способные выдирать фичи, кодирующие внешность человека. Например, для ре-идентификации.
Сайт проекта
Код
Можно попробовать демки на HF:
1. Демо в реализмем
2. Демо со стилизацией
@ai_newz
Авторы упоролись и скрестили трансформер с RNN или все новое – это хорошо забытое старое 🧠
Суть исследования в том, что был представлен новый способ вычисления внимания в трансформере. Мы можем получать K и V матрицу из предыдущего состояния, как RNNкой, а остальное будет в трансформере неизменным. Проблема в том, что мы не можем хранить в памяти все предыдущие состояния (можем, но обычным смертным это не по душе), но зато мы можем выбирать самые важные
Как выбирать? Способов достаточно много: убирать самые старые токены с течением времени, либо придумать способ расчета самых важных. Вот авторы представляют policy, которая на их взгляд сможет справиться с этим лучше остальных😬. На каждом этапе декодирования можно учитывать нормализованные оценки внимания softmax от текущего запроса ко всем и оставлять только токены с максимальным значением.
При хранение всех токенов, перплексия показывает себя науилучшим образом, а при baseline декодинге с LLaMA или Mistral перплексия убывает заметно хуже (смотрите графики)
Самое интересное в статье – какие токены то несут в себе смысл и что оставлять. Примерно 75 % самыми важными оказываются последние токены последовательности в момент времени. Однако остальную долю занимают раннние. При чем начало последовательности представляет заметный интерес (график с матрицей)
Код ждем, обещают скоро выложить
Статья
А вы знаааали, что в Америкеее в декабре выложили модель и код обучения для очень интересного подхода генерации визуального текста на основе LMок и диффузий?
Из всего этого ажиотажа с декодерами, тут мне реально понравился функционал лмки, когда ты можешь подправить генерацию на предыдущем шаге новыми инструкциями. 🧠
zjkarina/K0cumW87H-Y">Написала небольшой блогпост, в котором оставила ссылки на код и модель на huggingface
Послушайте котика на картинке, ну а если не хотите, просто держите статью 😊
#grokaem_собес #grokaem_nlp
Я собрала 100 вопросов по NLP, которые мне задавали или задавала я. Надеюсь, что они будут полезны, чтобы освежить в памяти важные моменты.
*Notion будет пополняться*
Notion русская версия
В составлении вопросов помогали:
ds girl
канал Плюшевый Питон
Alexander Babiy
канал что-то на DL-ском
канал Dealer.AI
канал алиса олеговна
Часть вопросов:
8. Объясните разницу между косинусной близостью и косинусным расстоянием. Какое из этих значений может быть негативным? Как вы будете их использовать?
21. Что такое negative sampling и зачем он нужен?
30. Что такое затухающие градиенты для RNN?
41. Что используется в трансформере layer norm или batch norm и почему?
55. Объясните подходы для позициональных эмбеддингов и их плюсы и минусы.
75. В чем отличие оптимизатора Adam от AdamW?
86. Объясните концепции metric learning. Какие подходы вам известны?
88. Объясните виды sampling при генерации? top-k, top-p, nucleus sampling?
92. В чем отличие prefix tuning от p-tuning и от prompt tuning?
98. Объясните принцип работы KV cache, Grouped-Query Attention и MultiQuery Attention.
Я очень давно хочу по приколу начать залетать на кагл и фармить медальки. Но пока смотрю на то, как это делают другие😁
❕По сути что тебе это дает? Можешь везде ставить в статусы кагл мастер, количество твоих медалек и тд, если ты любитель вывалить все свое большооое достоинство в статус . Ну или просто раскидываться ссылками на свой профиль
Забавляет на сколько иногда можно легко зарабатывать себе ачивки в виде той самой лишней медальки или появляться в списке контребьютеров в топовых репозиториях. Как раз в продолжении моего поста про Microsoft и их репозиторий torchscale, тут автор соседнего канала чуть-чуть допилил, на изи стал контребьютером и даже любезно поделился этим забавным способом))) что, кстати, уже не в первый раз и стало целой рубрикой у этого канала
В общем то, такие посты – очередное подтверждение, что если перед тобой стоит какая-то цель, можно на изи хакнуть систему и заработать себе тот или иной коэффициент описательной статистики для почета и успеха🤩
Unlimiformer c NeurIPS
github
paper
0️⃣ Проблемы?
Длинные последовательности, поэтому невозможность тренировки/долгого тюнинга
1️⃣ Решение?
Меняем cross-attention на индексирование с KNN, knn distances теперь станут как раз attention dot-product scores. В тестовом режиме главная задача заугментировать уже натренированную модель на последовательности разной длинны.
2️⃣ В чем плюсы?
generic approach: Не нужно тюнить. Не нужно добавлять веса. Индексы можно держать и на CPU. Авторы также предлагают разные способы тренировки и тюнинга. Например, юзать unlimformer только на инференсе и делать по нему early stopping.
3️⃣ Как делаем?
KNN на hidden States всех инпут токенов. Каждый блок с cross-attention обращается к KNN и берет только top-K input tokens.
Пайплайн:
- последовательности, что больше заданной длины, пилим на чанки с window size, берем вектора из серединки. Эта техника была тут предложена (’22).
- Создаем KNN index на encoded inputs, юзаем для этого Faiss. Dot-product это similarity metric для KNN index.
- На каждую cross attention head в декодере мы будем делать retrieval top-k.
5️⃣ Что с памятью?
Если у нас теперь задача это вылавливать Kbest set of keys, чтобы максимизировать attention, то, как и самурая у нас два пути (вебкам и айти):
- создать индексы для keys, HeWk, но Wk - head and layer specific, тогда нам нужно создать не один сет векторов, а сеты для keys и для values (2*L*H: L - кол-во декодер слоев, H - кол-во голов), больно и слишком дорого
- поменять порядок подсчета, теперь мы считаем (Hd * Wq * Wk)* He, то есть нам не нужно хранить и создавать отдельно head-layer индексы для keys, мы будем держать только encoder вектора.
Как говорят авторы: на 1млн 16 битных эмбеддингов 1024dim нам нужно будет 2gb памяти, та еще и на cpu можно.
6️⃣ Что по скорости? Ведь у нас дополнительно появляется индексирование.
Важно понимать, что на двух стульях тяжело усидеть и поэтому есть трейд-офф между памятью и speed. (Картинка внизу)
C Бартом реализовано все и буквально любую модель можете включить, а вот с T5 у меня завести пока что не вышло...
#grokaem_nlp
SwitchHead: Accelerating Transformers with Mixture-of-Experts Attention
[Статья] [Код]
Смеси экспертов для MLP блоков были неоднократно с успехом применены в больших языковых моделях (в частности в недавно вышедшей Mixtral, и GPT-4 по слухам тоже ей является). Однако, кроме MLP в трансформере можно добиться ускорения за счет использования за счет части голов в MultiHeadAttention. На больших последовательностях Attention слои требуют много вычислений и памяти, и использование части голов даст некоторую экономию.
Даже если бы статья была анонимной, то по цитированиям Шмидхубера при каждом упоминании Attention, можно было бы угадать одного из авторов)
Метод
Наивный подход был бы следующий - иметь предиктор, который предсказывает скор для каждой головы и берет только с наибольшим скором. Однако, проблема в том, что при авторегрессивной генерации могут активироваться разные эксперты и в итоге придется все равно хранить кэш keys и values на все головы (проблема, правда, нынче лечится MultiQueryAttention).
Авторы предлагают следующее - иметь экспертов внутри каждой головы и активировать только часть экспертов на прямом проходе. В этом по сути и вся суть метода.
Эксперименты
Подход валидируют на TransformerXL, который обучают на С4/peS2o 100к шагов. Не самый типичный setting для 2023. Качество замеряют по перплексии на WikiText103, C4, peS2o.
В бейзлайновом трансформере 2 или 10 голов (с одинаковым числом параметров), в предложенном SwitchHead 2 головы с 5 экспертами. Во всех случаях смесь экспертов имеет столько же параметров, сколько и исходная модель. В разных конфигурациях Q, K, V и O проекции могут быть как разбиты на экспертов, так и нет. Перплексия везде примерно +/- одинаковая и будто бы метод не проигрывает сильно в качестве исходному трансформеру с 10 головами (и уверенно опережает двуглавый). Вопрос в том, правда, насколько хорош бейзлайн.
Сравниваются с работой MoA, при том же качестве их подход гораздо экономичнее по памяти, с экономией в ~4-5 раз, в то время, как у MoA выходит ~1.5-3 раза.
Далее, можно сделать MLP тоже экспертами и получить Switch-All модель.
И Switch-All при примерно той же перплексии расходует снова заметно меньше памяти.
Выводы
Специализация attention в трансформере - полезное направление, однако эксперименты выглядят не слишком убедительно. Нет и замеров ускорения, а лишь сравнение MACs между SwitchHead(All) и бейзлайном. Да и в популярном нынче MultiQueryAttention можно было бы активировать часть query проекций и иметь профит в плане памяти и вычислений.