Авторы: Гриша Сапунов, ранее руководитель разработки Яндекс-Новостей, ныне CTO Intento. Области интересов: AI/ML/DL, биоинформатика. Лёша Тихонов, ранее аналитик в Яндексе, автор Автопоэта, Нейронной Обороны... Области интересов: discrete domain, NLP, RL.
Что-то происходит...
https://techcrunch.com/2024/08/05/openai-co-founder-leaves-for-anthropic/
Вдогонку к посту про агентные и мультиагентные фреймворки, немного ссылок для тех, кто хочет их изучить.
#1. Спасибо Andrew Ng, на DeepLearning.ai есть открытые и бесплатные мини-курсы по всем основным фреймворкам:
LangChain:
LangChain for LLM Application Development
https://www.deeplearning.ai/short-courses/langchain-for-llm-application-development/
LangChain: Chat with Your Data
https://www.deeplearning.ai/short-courses/langchain-chat-with-your-data/
Functions, Tools and Agents with LangChain
https://www.deeplearning.ai/short-courses/functions-tools-agents-langchain/
Build LLM Apps with LangChain.js
https://www.deeplearning.ai/short-courses/build-llm-apps-with-langchain-js/
Semantic Kernel (альтернатива LangChain от MS -- мне, кстати, понравился, https://learn.microsoft.com/en-us/semantic-kernel/overview/):
How Business Thinkers Can Start Building AI Plugins With Semantic Kernel
https://www.deeplearning.ai/short-courses/microsoft-semantic-kernel/
LangGraph:
AI Agents in LangGraph
https://www.deeplearning.ai/short-courses/ai-agents-in-langgraph/
AutoGen:
AI Agentic Design Patterns with AutoGen
https://www.deeplearning.ai/short-courses/ai-agentic-design-patterns-with-autogen/
CrewAI:
Multi AI Agent Systems with CrewAI
https://www.deeplearning.ai/short-courses/multi-ai-agent-systems-with-crewai/
Есть там и много всего другого про LLM, промпт-инжиниринг, RAG, LlamaIndex и прочее.
#2. Книги
Я уже их упоминал, у Manning в стадии написания (и доступные для чтения по ходу процесса) есть две тематические книги:
AI Agents in Action
https://www.manning.com/books/ai-agents-in-action
Multi-Agent Systems with AutoGen
https://www.manning.com/books/multi-agent-systems-with-autogen
#3. YouTube, документация, блоги и прочее
Тут ничего писать не буду, много всего, а блог Виктора Дибиа я уже советовал (/channel/gonzo_ML/2859)
Порог на вход сейчас низок как никогда.
Ещё из свежих новостей — это новая Gemma 2 2B. Похоже, что на редкость неплохая
https://developers.googleblog.com/en/smaller-safer-more-transparent-advancing-responsible-ai-with-gemma/
Какой прикольный проект — gpu.cpp!
https://github.com/AnswerDotAI/gpu.cpp
https://gpucpp.answer.ai/
https://x.com/austinvhuang/status/1816141044540739642
Можно использовать GPU, не заморачиваясь написанием отдельного кода под CUDA, AMD, Mac, Intel GPUs. Спасибо WebGPU, который не только про веб (https://www.youtube.com/watch?v=qHrx41aOTUQ).
DeepMind продолжают в математику
https://deepmind.google/discover/blog/ai-solves-imo-problems-at-silver-medal-level/
AlphaProof доказывает математические утверждения на языке Lean (https://lean-lang.org/). Зафайнтюненная Gemini переводит описание с человеческого языка на Lean, а дальше RL механизм на базе AlphaZero ищет шаги доказательства.
AlphaGeometry 2 обучена на гораздо большем объеме задач, чем её предшественница и имеет на два порядка более быстрый символьный движок.
Сообща эти две системы решили 4 из 6 задач математический олимпиады этого года, получив результат на уровне серебряного медалиста.
"Пробка в Лиссабоне, вызванная остановившимся трамваем", 2015.
Читать полностью…Теперь у нас есть две хорошие модели с мультиязычностью и function calling (писал про эту комбинацию тут /channel/gonzo_ML/2821), Mistral NeMo и Llama 3.1. Ожидаю интересных развитий и решений!
Читать полностью…Just in case, вдруг кто не видел
https://www.youtube.com/watch?v=_cZa_7KaQ3c
Я сначала не узнал дока...
Детали соревнования тут:
https://ai.google.dev/competition
Transformer Layers as Painters
Qi Sun, Marc Pickett, Aakash Kumar Nain, Llion Jones
Статья: https://arxiv.org/abs/2407.09298
Twitter: https://x.com/A_K_Nain/status/1812684597248831912
Код: https://github.com/floatingbigcat/transformer-as-painter (пока нет)
Вторая работа про творческий подход к вычислению трансформерных слоёв. Первая была про LayerShuffle (/channel/gonzo_ML/2845), в текущей работе от коллег GDE подход более радикальный, чем просто перемешивание слоёв.
Авторы предлагают интересную метафору для средних слоёв сети — конвейер художников. Входное полотно проходит через цепочку художников. Некоторые из них специализируются на рисовании птиц, другие на рисовании колёс. Получая полотно от предыдущего художника, каждый решает дорисовать ли чего где или отправить дальше без изменений. У всех художников общий словарь для понимания рисунков, так что не страшно, если художник получит на вход полотно от более раннего чем обычно художника. Их также можно поменять местами, большой катастрофы не произойдёт (даже если части фона будут дорисованы поверх уже нарисованных объектов). Художники даже могут рисовать одновременно впараллель.
Аналогия не претендует на научную точность, но помогает поднять кучу интересных вопросов: Используют ли слои общее пространство репрезентаций? Все ли слои необходимы? Вычисляют ли все средние слои одну и ту же функцию? Важен ли порядок слоёв? Можно ли вычислять слои впараллель? Более ли важен порядок вычисления для одних задач чем для других? Помогают ли циклы параллельно вычисляемым слоям? Какие варианты наименее вредят качеству?
Хорошие вопросы. Предыдущие работы типа LayerDrop и LayerShuffle покрывают лишь небольшую часть из этого.
LayerDrop проверяли на ViT, текущая работа сделана на предобученных LLM (декодерная Llama2 7B с 32 слоями и энкодерный BERT-Large 340M с 24 слоями), никакого файнтюнинга (кроме оценки на GLUE, где подразумевается файнтюнинг для берта). Для ламы проверяли на ARC (который от AI2, https://arxiv.org/abs/1803.05457, а не от Франсуа Шолле, https://github.com/fchollet/ARC-AGI), HellaSwag, GSM8K, WinoGrande, LAMBADA. Для берта вышеупомянутый GLUE.
Если посмотреть на результирующее качество при выкидывании слоя или при перестановке слоя с соседним, то оказывается, что начальный и конечный слои важны, а между ними всё более-менее устойчиво к таким манипуляциям. Выглядит так, что срединные слои используют общее пространство репрезентаций. Если дополнительно посмотреть на косинусную близость активаций слоёв внутри модели, то групп слоёв может даже больше: входной слой 0, слои 1-3, средние слои, последний или пара последних. Возможно у модели три разных пространства репрезентаций: для начальных, средних и конечных слоёв.
Если пропустить M слоёв (выкидываем слои из середины от N+1 до T-N, где T — это общее число слоёв в модели), то качество постепенно деградирует по мере увеличения M. Получается, что не все промежуточные слои необходимы, по крайней мере несколько средних слоёв могут быть выкинуты без катастрофической деградации.
Если в предыдущем эксперименте вместо выкидывания средних слоёв заменить их на копию центрального слоя, то результат получается намного хуже, чем если бы выкинуть. Это наиболее сильная деградация среди всех рассмотренных в работе. Отсюда вывод, что средние слои реализуют разные функции. В приложении дополнительно смотрят на косинусные близости и статистики активаций и делают вывод, что повторение среднего слоя выталкивает вход из общего пространства репрезентаций. Если художник рисует колёса, то рисование большего числа колёс на полотне приводит к тому, что художники после него будут вынуждены работать с тем, на чём не обучались.
Метод
Общий фреймворк выглядит следующим образом:
▶️ Функция преобразования данных f_X
(X
- входные данные)
▶️ Функция конструкции смешивающей матрицы f_M L x L
, которая может быть постоянной или зависеть от входов
▶️ Результат sequence mixing имеет вид f_M(f_X (X))
Далее авторы вводят термин Sequence Aligned Matrices (SAM, еще один… 🥱) означающий, что матрица смешивания зависит от входных данных. Такие sequece миксеры хороши с одной стороны тем, что более адаптивно подстраиваются под входы, и, кроме того, работают с последовательностями разной длины.
Авторы рассматривают разные механизмы из литературы:
⭐️ MLP-Mixer, S4, H3, Monarch, Vandermonde и Cauchy миксеры - не SAM
⭐️ Attention, Linear Attention, S6, SSD - SAM
Потому хороший двунаправленный sequence mixer должен быть SAM, и представлять собой некоторую структурированную матрицу. В частности, предлагаются способы сделать Vandermonde и Cauchy миксеры зависящими от входов, но основной упор делается на прокачку SSD (не твердотельного жесткого диска, а механизма в Mamba-2!) под двунаправленность.
Напомним, что SSD во второй мамбе является полуразложимыми (semi-separable) матрицей - каждый блок является низкоранговой матрицей. Для двунаправленности можно было бы чередовать слои SSD (один бегущий слева направо, другой справа налево), но здесь предлагают использование одной матрицы смешивания, такой что любой ее блок в верхне-треугольной и нижне-треугольной части является низкоранговой матрицей. Иначе говоря, получается нечто типа суммы исходной SSD из Mamba-2 (нижнетреугольной матрицы) и транспонированной по длине последовательности (верхнетреугольной матрицы) и диагональной части. Такие матрицы называют квазиразложимыми (QS). Данная модификация требует всего пары дополнительных строчек в реализации по сравнению с исходным SSD слоем (shift
- сдвиг на один элемент, flip
- разворот последовательности задом наперед, DX - диагональная добавка). QS(X) = shift(SS(X)) + flip(shift(SS(flip(X)))) + DX
Называют гидрой, потому что много голов, как в SSD, и звучит красиво 😹.
Эксперименты
Метод валидируют на задаче Masked Language Modelling, где в качестве бейзлайнов берется BERT, обученный по рецепту от MosaicML, и иные варианты sequence mixerов из литературы. Для оценки качества моделей смотрят на валидационную кросс-энтропию на C4 (на train set которого обучают) и точность на бенчах из GLUE. Все модели имеют размер порядка 70M параметров (несколько меньше, чем BERT-Base), так что хрен вам SOTA на LMSYS. Hydra модели глубже трансформеров примерно в 2️⃣ раза при примерно том же числе параметров.
SAM модели стабильно опережают свои не SAM версии (Toeplitz, Cauchy, Vandermonde с параметрами, зависящими от входа, заметно точнее версии с обучаемыми, не зависящими). Hydra (естесна), лучше всех, и на втором месте любимый нами трансформер. Однако, памятуя о недавнем результате MobileLLM, где более глубокие и тонкие трансформеры, оказываются лучше по качеству более коротких и жирных при том же числе параметров, задаешься вопросом - можно ли устранить разрыв в качестве за счет изменения конфигурации трансформера 🤔?
Исходная Mamba-2 не очень сильна в MLM, так как умеет обрабатывать информацию только в одном направлении, и предложенный способ (Hydra) лучше вариантов с суммой, конкатенацией, и перемножением результатов двух мамб-2.
Далее метод проверяют на задаче классификации ImageNet-1k, где обучают модели размера порядка ViT-Base (87-91M параметров) и Hydra опережает ViT-B, Hyena и S4. Однако, ViT бейзлайн вызывает вопросы, ибо согласно их результатам ViT-B имеет top-1 точность 78.8%, а его EMA 80.6%, в то время, как c рецептом обучения из Swin, на который они ссылаются (унаследованный в свою очередь из DeiT) выдает 81.8% (их лучший результат 81.6%)
Hydra: Bidirectional State Space Models Through Generalized Matrix Mixers
Sukjun Hwang, Aakash Lahoti, Tri Dao, Albert Gu
https://arxiv.org/abs/2407.09941
Вышла Гидра, двунаправленная (в смысле bidirectional) Mamba! Авторы каждый раз очень основательно подходят к делу — предлагают новый математический фреймворк (здесь это matrix mixer framework), в рамках него раскладывают известные модели и далее находят интересные новые варианты. Очень структурированный подход as usual.
Работа достойна отдельного подробного рассмотрения, но пока хоть так.
Кратко от авторов в твиттере: https://x.com/_albertgu/status/1813252409071968297
А ещё из прикольного, Meta не будет релизить новую мультимодальную ламу в EU. Потому что непонятные регуляции. 😎
https://www.theverge.com/2024/7/18/24201041/meta-multimodal-llama-ai-model-launch-eu-regulations
В перерыве между статьями, вот вам свежее интересное видео доклада Жанны Резниковой (https://reznikova.net/) про интеллект животных
https://www.youtube.com/watch?v=aB1u522bNuo
LayerShuffle: Enhancing Robustness in Vision Transformers by Randomizing Layer Execution Order
Matthias Freiberger, Peter Kun, Anders Sundnes Løvlie, Sebastian Risi
Статья: https://arxiv.org/abs/2407.04513
Недавно вышли две свежие прикольные работы про творческий подход к вычислению трансформерных слоёв. Это перекликается с нежно любимой мной темой про Adaptive Computation Time (ACT) и вообще динамическими вычислениями. Про трансформеры c ACT было тут (https://moocaholic.medium.com/adaptive-computation-time-act-in-neural-networks-3-3-99452b2eff18), но вообще это целая серия постов (в канале она начиналась тут /channel/gonzo_ML/71).
Сегодня первая интересная работа -- про выкидывание части трансформерных слоёв во время инференса. Если сеть будет устойчива к таким событиям, то это открывает интересные возможности для выполнения вычислений в нестабильной распределённой среде, когда часть вычислений может выпасть или произойти в ином порядке. Способность продолжать работу в таких условиях и не терять сильно в качестве при этом довольно интересна.
Это идейно похоже на Dropout, где выпадает часть нейронов в слое, но делается уровнем выше. В 2019-м одни из моих любимых авторов опубликовали вариант structured dropout под названием LayerDrop (https://arxiv.org/abs/1909.11556), позволявший делать прунинг части слоёв трансформера при инференсе, при этом после прунинга он приводил к моделям с качеством выше, чем если бы модели такого же размера обучались с нуля или даже были получены дистилляцией (!). В этом смысле интересно было бы посмотреть на вариант той же Gemma 2, где малую модель не дистиллировали, а дропали из большой.
LayerShuffle идёт дальше и не просто дропает слои при инференсе, а перемешивает их, меняя порядок вычисления. Делают это на Vision Transformer’ах (ViT, /channel/gonzo_ML/434), но, кажется, это неважно. Рассматриваются несколько вариантов процедуры.
В простом случае, LayerShuffle, во время обучения порядок слоёв случайно меняется для каждого батча. Таким образом слои учатся не затачиваться на выход конкретного другого слоя.
Во втором варианте, LayerShuffle-position, каждый слой также получает эмбеддинг текущей позиции этого слоя (эти дополнительные 32 чиселки конкатенируются с эмбеддингом, прилетающим на вход).
Третий вариант, LayerShuffle-predict, пытается предсказать свою текущую позицию по своему же выходному эмбеддингу. С кроссэнтропийным лоссом при этом, что немного странно, ибо сильный промах и слабый промах в позиции получается штрафуются одинаково.
Всё проверяют на ImageNet2012 с предобученным ViT-B/16 с HuggingFace, который дообучали по описанным процедурам. Стандартный трансформер при переключении в режим случайного порядка слоёв роняет качество с 82% почти в ноль, а варианты LayerShuffle падают примерно с 75% до 63% (интересно, какая была бы разница, если бы модель обучали с нуля по предложенному подходу, а не файнтюнили с классически обученной). LayerShuffle-position лидирует с небольшим отрывом от простого LayerShuffle.
Получается, стандартный трансформер катастрофически неустойчив к смене порядка вычисления слоёв, что было в целом ожидаемо. Интересно, что вариант LayerShuffle-position с передаваемой позицией не очень-то сильно что-то улучшает, все важные данные, видимо, есть и так.
Отдельно проверили эффект прунинга во время инференса. Качество работы примерно соответствует LayerDrop с p=0.2, хотя модель на выкидывание слоёв не обучалась. Если дополнительно к прунингу ещё и перемешивать, то LayerDrop тоже уходит в ноль, а LayerShuffle держится. Получается, если выбирать из этих двух, то последний даёт более устойчивые модели.
Сделали визуализацию выходов слоёв через UMAP, не передавая в алгоритм информацию о позиции слоя. Видно, что с одной стороны явного прерывистого разделения эмбеддингов нет, но таки они группируются по своей реальной позиции, особенно заметно для эмбеддингов близких к началу, но впрочем видно и для конечных.
Chain-of-Thought → Whiteboard-of-Thought
Когда-то мы писали про расширение Chain-of-Thought (CoT) и переход к Tree-of-Thought (ToT, /channel/gonzo_ML/1885), и где-то там же была пачка работ про более сложные Graph-of-Thoughts (GoT, https://arxiv.org/abs/2308.09687) и даже Everything-of-Thoughts (XoT, https://arxiv.org/abs/2311.04254).
Перечисленные выше подходы используют текст для улучшения ризонинга. Но есть и другое развитие темы специально для мультимодальных моделей, а конкретно для visual language models (VLM) про использование рисунков для помощи “мышлению”.
Недавно вышли две похожие работы (но наверняка есть больше) Visual Sketchpad: Sketching as a Visual Chain of Thought for Multimodal Language Models (https://arxiv.org/abs/2406.09403, https://visualsketchpad.github.io/) и Whiteboard-of-Thought: Thinking Step-by-Step Across Modalities (https://arxiv.org/abs/2406.14562).
1) Visual Sketchpad от авторов из University of Washington, Allen Institute for AI, и University of Pennsylvania на неделю более ранняя. В этом подходе модели даётся доступ к альбому и тулам для рисования промежуточных “мыслей”, которые модель дальше может использовать. Это напоминает подход ReAct (https://react-lm.github.io/), когда агент генерит thoughts, выполняет acts и получает observations. В Sketchpad также есть эти три компонента, причём модель не надо обучать пользоваться всем этим добром, всё достигается промптом.
Например, в геометрической задачке с имеющейся картинкой на входе модель может решить (thought) нарисовать вспомогательную линию, сгенерить код на питоне для модификации входной диаграммы (act), получить контекст (observation) с обновлённой диаграммой. Модель может повторять этот процесс пока не сгенерит специальное действие Terminate — тогда она выдаёт финальный ответ.
Тулы для скетчинга могут быть разными в зависимости от задачи, например, питон с matplotlib и networkx (для графовых задач), специальные зрительные модели, например, для детекции и рисования bounding boxes, навешивания лейблов и сегментации.
Результаты неплохи, относительно базовых GPT-4 Turbo и GPT-4o использование скетчпада добавляет от единиц до десятков процентных пунктов к accuracy на задачах из геометрии, математики, графов и игр, Бейзлайны вроде совсем базовые, было бы, конечно, интересно относительно бейзлайнов с CoT/GoT/XoT. Сравнили планы решения геометрических задач с человеческими, они в целом сильно перекликаются.
На задачах с различным visual reasoning бейзлайны уже с различными фреймворками аугментации, там результат прекрасный, GPT-4o со скетчпадом установила новую SoTA.
2) Whiteboard-of-Thought (WoT) в целом очень похож, но попроще, в два шага. Модели также как бы даётся метафорическая доска, в том смысле, что модель может генерить картинки, которые будут учитываться на входе в дальнейших шагах вывода. Для этого также используются промптинг (вида “You write code to create visualizations using the {Matplotlib/Turtle} library in Python, which the user will run and provide as images. Do NOT produce a final answer to the query until considering the visualization.”) и базовые способности модели генерить код на питоне (Turtle и Matplotlib), он далее исполняется через интерпретатор питона и результирующая картинка парсится моделью.
Проверили на задачах visual reasoning, это задачи из BIG-Bench на понимание ASCII text graphics (MNIST digit recognition, word recognition, kanji recognition), а также на пространственную навигацию по языковым описаниям.
На ASCII буст огромный, модели по дефолту плохо работают с такими задачами, CoT не сильно помогает. На пространственной навигации дефолтные модели хорошо справляются с 2D grid задачами, но плохо с другими геометриями, тут WoT помогает.
В общем, подход работает. Забавно также наблюдать работы всё больше построенные на использовании API OpenAI.
Интересный кейс про отказ от LLM/агентского фреймворка (здесь LangChain), когда абстракции фреймворка не помогают, а скорее тормозят:
https://www.octomind.dev/blog/why-we-no-longer-use-langchain-for-building-our-ai-agents
Обсуждение на Hacker News:
https://news.ycombinator.com/item?id=40739982
У меня от LangChain изначально примерно такие же ощущения были, что для прототипов это ок быстро нафигачить, а для прода проще самим написать на более низкоуровневых абстракциях, чем в недра фреймворка по любому чиху лезть. А там для прода обычно много чего надо от правильного логгирования и мониторинга до навешивания на какую-нибудь очередь типа кафки. LangChain вроде туда как-то пошёл со своим LangSmith, но как-то невнятно для меня до сих пор.
Сейчас у меня скорее в более положительную сторону ощущение поменялось, но всё равно основная ценность LangChain для меня лично сосредоточена больше в районе каких-то базовых вещей типа интеграций с LLM и шаблонизации запросов. Остальное проще самому контролировать.
Есть LangGraph ещё, из когорты мультиагентных фреймворков. Он мне в целом понравился среди того, что я пробовал (а это ещё CrewAI и AutoGen). LangGraph вроде как достаточно низкоуровневый с базовыми примитивами для сборки графа воркфлоу.
CrewAI для меня оказался аналогично LangChain из статьи выше — слишком высокие абстракции, чтобы применить к куче задач, где я хотел бы его попробовать. Например, я сходу не нашёл, как его эффективно использовать для задач с открытой постановкой, где цель изначально не задана чётко, а определяется из общения с пользователем. Могу ошибаться, но, кажется, годится в основном для кейсов с чётко определённой целью, которую агенты потенциально могут выполнить автономно. Ну и всё равно не уверен, что это подходит для прода, потому что опять же куча всего спрятана внутри и не факт, что это можно стабильно использовать за пределами прототипов.
AutoGen кажется наиболее близок к разумному срединному пути между LangGraph и CrewAI. Есть концепция группового чата, где можно собирать довольно открытые диалоги с пользователем. Можно автономных агентов и воркфлоу с переходами между состояниями делать. Мне лично не хватает коллбэков в разных местах, но можно дописать, наверное.
Но вообще в интересное время живём. Прямо сейчас определяются контуры будущего и пока ещё непонятно куда конкретно всё вырулит с этими агентами и мультиагентами.
А вы какими фреймворками пользуетесь (или не пользуетесь) и почему?
Тем временем на lmsys arena новый лидер, гугловая экспериментальная Gemini 1.5 Pro Experimental 0801 в статусе превью.
Читать полностью…Вот и поисковик от OpenAI пожаловал :)
https://openai.com/index/searchgpt-prototype/
Надо сказать, я ждал его дольше, чем хотелось :) (/channel/gonzo_ML/1140)
Как давно это было... 9 лет назад появился deepdream, наверное, первый большой шаг к нейросетевому GenAI. Вскоре через месяц-другой будет style transfer Леона Гатиса, затем быстрое развитие уже существующих GAN, ... и вот мы в мире трансформеров и диффузионок.
Читать полностью…Официально анонсировали Llama 3.1, версии 8B, 70B и 405B.
Тулы, мультиязычность, контекст 128k
Сайт: https://llama.meta.com
Пост: https://ai.meta.com/blog/meta-llama-3-1/
Статья: https://ai.meta.com/research/publications/the-llama-3-herd-of-models/
Выходит, что средние слои разделяют общее пространство репрезентаций, но реализуют разные операции в этом пространстве. Отсюда возникает вопрос, важен ли порядок этих операций? Для проверки средние слои исполняют в 1) обратном или 2) рандомном порядке (с усреднением по 10 сидам). В обоих случаях деградация постепенная и оба варианта лучше, чем просто выкидывание слоёв. Значит слои всё ещё вносят свой вклад, хоть и вызываются в другом порядке. Случайный порядок при этом лучше обратного. Получается, что до некоторой степени порядок слоёв важен, но деградация от случайного и обратного порядка постепенная.
Интересный вопрос про порядок, а можно ли слои вычислить впараллель, а затем смёржить (через усреднение)? Снова постепенная деградация кроме GSM8K, там быстрая. Это работает лучше, чем пропуск слоёв, но хуже, чем обратный порядок. В итоге вычислять слои параллельно можно, кроме случаев нагруженных математикой бенчмарков.
Видно, что на некоторых бенчмарках просадки хуже чем на других. Это в первую очередь абстрактные (ARC) и математические (GSM8K). Возможно, задачи с пошаговым выводом более чувствительны к порядку слоёв, чем семантические задачи. В них важны и структура, и семантика, на одной семантике не уедешь. В примере есть задача на арифметику, где в параллелизованной версии общая структура размышления верная, но арифметические результаты страдают из-за ошибок в вычислениях. В метафоре художников, семантическая задача аналогична рисованию коллажа, где порядок менее важен, а задача на вывод больше похожа на точную архитектурную сцену. Вне зависимости от верности аналогии, задачи на математику и вывод больше зависят от порядка, чем семантические задачи.
Продолжая метафору художников, может быть так, что некоторые из них готовы рисовать, только когда есть подходящий рисунок на входе. Так, специализирующийся на колёсах художник может не рисовать их, пока не увидит кузов автомобиля. В этом смысле предыдущий эксперимент с параллельным вычислением слоёв можно улучшить, крутя эти слои в цикле. Для этого агрегированный выход параллельных слоёв подаётся им же на вход заранее заданное количество итераций. Троекратная подача намного лучше одного параллельного исполнения. Более широкий анализ показывает, что оптимальное число итераций грубо линейно пропорционально числу параллельных слоёв.
По всем проанализированным вариантам, повторение одного слоя приводит к наибольшей деградации. Случайный порядок и параллелизация с циклом наименее вредны.
Хорошая, легко читаемая работа, которую в принципе мог сделать любой в своём гараже, не требуется быть для этого гуглом. Это круто, есть ещё место для независимых исследователей. Авторы хотят копнуть глубже и понять, почему трансформеры устойчивы к таким вариациям. Одна возможная гипотеза в том, что residual connections в обучении необходимы для того, чтобы слои шарили общие репрезентации. Интересно будет проверить на моделях без таких соединений. Также планируют разморозить модели и посмотреть как быстро модели восстанавливаются во время файнтюнинга. Варианты с параллельным вычислением и пропуском слоёв хороши с точки зрения латенси, здесь может быть практическая польза. Ещё потенциально интересная тема — роутинг для выбора слоёв по аналогии со Switch Transformers (/channel/gonzo_ML/472).
Выводы
Данная статья полезна с формальной точки зрения, ибо дает некоторый обобщенный взгляд на современные варианты нейросетевых архитектур обрабатывающие последовательности, и немножечко вкусненькой 😋 математики. Результаты экспериментов вызывают некоторые вопросы, да и валидация на небольшом, ограниченном сетапе. Как мне кажется, пока преждевременно говорить об “убийце 🔫 трансформеров”. Тем не менее, интересно и занимательно.
Hydra: Bidirectional State Space Models Through Generalized Matrix Mixers
[Статья][Код]
Современные нейронные сети, обрабатывающие пространственно-временные данные различной природы будь то текст 📝, изображения 📷, аудио 🎵 и видео 📹 так или иначе обладают механизмом перемешивания каналов (channel mixing), обрабатывающим независимо признаки для каждого элемента последовательности, и механизмом обработки последовательности (sequence mixing), использования взаимосвязей между элементами.
В сегодняшнем рассказе речь пойдет про sequence mixing.
Существуют разнообразные опции sequence mixing. Операция смешивания может не зависеть от входа, как например свертка или обучаемая матрица L x L (L - длина последовательности) в MLP-Mixer, S4 и H3 state-space модели, или зависеть - attention механизм в трансформерах или Mamba (Selective State Spaces).
Кроме того, разные механизмы обладают разной сложностью от длины последовательности. Sequence mixing в Attention или MLP-Mixer требует квадратичного по длине последовательности числа элементарных операций с плавающей точкой (FLOPs), так как используют матричную операцию довольно общего вида. Sequence mixers, обладающие некоторой структурой (низкоранговые, Toeplitz матрицы, DFT, бабочки) позволяют добиваться субквадратичной сложности (обычно с некоторой просадкой в качестве).
И sequence mixing может быть как причинным (causal attention, большинство SSM, в частности, модная нынче Mamba 🐍), где текущий элемент последовательности может смотреть только в прошлое, и двунаправленным (как в masked language modelling, и большинстве задач с ViTами), где элементы последовательности могут изменять свое состояние, как глядя как на прошлые, так и на будущие токены.
И задача, которую, перед собой ставят авторы в данной работе - получение эффективного механизма двунаправленного sequence mixing, такого, чтобы он был с одной стороны субквадратичным (в идеале линейным по длине последовательности) и в то же время выразительным.
И ещё из полезного.
Тема про агентов активно развивается. Мой знакомый Victor Dibia, ведёт хороший блог "Designing with Machine Learning" про агентов, мультиагентные фреймворки, в частности AutoGen (он там контрибьютор). Рекомендую. На редкость не булшитно.
Вот примеры интересных постов по теме:
* Multi-Agent LLM Applications | A Review of Current Research, Tools, and Challenges
* Getting Started with AutoGen - A Framework for Building Multi-Agent Generative AI Applications
* Integrating AutoGen Agents into Your Web Application (FastApi + Websockets + Queues)
Также он начал писать книгу "Multi-Agent Systems with AutoGen" в том же издательстве Manning, что и я свою :) Её можно читать по мере написания, что для подобной темы важно — ждать пока выйдет бумажная не имеет смысла, область очень быстро развивается.
Про новости LLM писать уже поднадоело, но вот краткое саммари анонсов последних дней:
🤖#1 OpenAI выкатил замену старой доброй GPT-3.5 Turbo — GPT-4o mini. То же, но дешевле и качественнее. Контекст 128k, поддержка языков как в большой GPT-4o, цена $0.15/$0.60 за 1M входных/выходных токенов (у 3.5 было $0.50/$1.50).
https://openai.com/index/gpt-4o-mini-advancing-cost-efficient-intelligence/
Теперь у каждого большого игрока есть большая, качественная и медленная модель + маленькая и быстрая (GPT-4o mini, Gemini Flash, Claude Haiku/Sonnet)
🐬 #2 Mistral натренировал с NVIDIA 12B Mistral NeMo. Apache 2.0 лицензия, контекст 128k, вроде как бьют Gemma 2 9B и Llama 3 8B. Ну в целом неудивительно, она и побольше на треть.
Из важного, модель мультиязычная и с function calling! Совпадает с моими ожиданиями в /channel/gonzo_ML/2821.
https://mistral.ai/news/mistral-nemo/
😼 #3 Apple разродился своей опенсорсной 7B LLM под названием DCLM-7B. Из плюсов, более открытая чем некоторые благодаря открытому датасету. Но в целом непонятно что с ней делать, когда есть Llama3, Gemma2 и Qwen2.
https://x.com/_philschmid/status/1814274909775995087
🐁#4 А, да, HuggingFace выложил открытую SmolLM размерами 135M, 360M, и 1.7B для on-device инференса. Вроде как бьют Phi-1.5 и Qwen2 1.5B.
https://huggingface.co/blog/smollm
Интересная идея, раз слои можно вычислять в другом порядке, то что если попробовать смёржить слои из разных моделей, обученных по представленной процедуре? В пределе каждый из 12 слоёв ViT взять из отдельной обученной модели. Намёржили 100 моделей (из 12! возможных комбинаций). Оригинальный ViT-B/16 в такой конфигурации бесполезен, качество крайне низко. LayerShuffle merged в целом ничего, хотя и процента на три ниже оригинальной LayerShuffle модели. Зато если все 12 обученных моделей сансамблировать, то качество процентов на 9 выше.
Когда уже запчасти для GPT-4 будут продаваться на рынке? Можно, наверное, и в микросхемы тогда сразу зашивать и модель рассыпухой набирать 🙂 Ну и распределённую сеть с кусками модели на разных девайсах тоже уже можно строить, ждём здесь своего кубернетеса.
Формализьмов подвезли!
On the Anatomy of Attention
Nikhil Khatri, Tuomas Laakkonen, Jonathon Liu, Vincent Wang-Maścianica
https://arxiv.org/abs/2407.02423
We introduce a category-theoretic diagrammatic formalism in order to systematically relate and reason about machine learning models. Our diagrams present architectures intuitively but without loss of essential detail, where natural relationships between models are captured by graphical transformations, and important differences and similarities can be identified at a glance. In this paper, we focus on attention mechanisms: translating folklore into mathematical derivations, and constructing a taxonomy of attention variants in the literature. As a first example of an empirical investigation underpinned by our formalism, we identify recurring anatomical components of attention, which we exhaustively recombine to explore a space of variations on the attention mechanism.
Сегодня доказали (используя Coq), что пятое число Busy Beaver, BB(5), равно 47,176,870
https://www.quantamagazine.org/amateur-mathematicians-find-fifth-busy-beaver-turing-machine-20240702/