Warning: Undefined array key 0 in /var/www/tgoop/function.php on line 65

Warning: Trying to access array offset on value of type null in /var/www/tgoop/function.php on line 65
73 - Telegram Web
Telegram Web
После длительного отпуска врываемся обратно в плотный график 😊

В LLM происходит сейчас так много вещей, что эксперименты можно встретить в любом направлении. Недавно выходила модель SOLAR, где авторы увеличивали размер обученного трансформера, дублируя некоторые блоки, и модель становилась лучше. Параллельно с этим выпускаются работы в противоположном направлении, где вырезание слоев полностью сохраняет качество и позволяет таким образом прунить модели. В качестве примера - недавняя работа The Unreasonable Ineffectiveness of the Deeper Layers. Авторы смотрят на расстояние между входом и выходом, пройденного через n слоев, и, если оно небольшое, вырезают эти слои. Интуиция здесь такая, что маленькое расстояние означает, что эмбеддинг не сильно изменился за прошедшие преобразования. На практике получается, что слои-кандидаты на прунинг лежат ближе к концу модели, что кажется логичным: сначала модель сильно меняет эмбеддинги и со временем просто корректирует их для финального предсказания.

После вырезания слоев проводится процедура healing — QLoRA тюнинг на датасете C4 (сотни миллионов токенов). Такая корректировка весов позволяет выкидывать еще больше слоев без потери качества. Из замеров — MMLU и BoolQ, в обеих задачах авторы смогли выкинуть ~30% слоев LLaMA 2 70B, сохранив accuracy.

Теперь нужно объединить направления: взять 130B модель, запрунить до 70B и потом расширить опять до исходного размера, получив модель лучше 🧠
Please open Telegram to view this post
VIEW IN TELEGRAM
16🔥8🤔1
В процессе финального тюнинга модели часто в том или ином виде используется фидбек человека. Условно для очень популярного DPO нам нужны пары (y1, y2), где явно указано, что один из ответов лучше другого. Чтобы собрать такой датасет, можно использовать разметчиков или другие модели, которые будут выступать в роли критиков (RM, LLM as a judge) и оценивать предложенные пары. В обоих случаях есть свои подводные камни (например, position bias, когда модель склонна отдавать предпочтение первому ответу), но решение с использованием модели-критика открывает пространство для универсального сбора большого кол-ва данных

В начале мая вышла интересная работа Prometheus-2 (модель + датасет) с лицензией Apache2.0. Авторы обучили две независимые модели под pointwise (оцениваем один ответ от 1 до 10) и pairwise (выбираем победителя из пары) задачи, причем не просто выдавая число, а генерируя до этого feedback как объяснение ответа. Такой прием улучшает общее качество, так как модель генерирует цепочку рассуждений, на которую потом может посмотреть прежде чем дать финальный ответ, по сути смысл как в Chain of Thought

Далее две модели объединяются в одну просто с помощью взвешивания их весов: w = a * w_pointiwse + (1-a) * w_pairwise. Пробовали и другие методы, но самый простой дал лучшие результаты. Подробнее про model merging можно почитать пост на HF. В результате получилась довольная высокая корреляция с человеческой оценкой и моделями GPT4/Claude3. Попробовал модельку для оценки пар в новом соревновании на kaggle по обучению RM для lmsys chatbot arena, и на глаз результаты выглядят неплохо. Правда такую модель по крайней мере в исходном формате применить не получится, тк просто не уложиться в ограничение времени на инференс 😕️
👍10🔥53
3
Алгоритмов алайнмента выходит уже десяток в месяц, и все их даже бегло смотреть нет ни времени, ни желания 😕
Но из последнего приглянулась работа от Salesforce AI, “RLHF Workflow: From Reward Modeling to Online RLHF”. В рамках нее авторы выпустили тюн модели llama3-8b с отличными метриками, которая в частности хорошо показала себя на русском языке.

Идея в следующем (рассмотрим на примере алгоритмов по типу DPO, но в статье есть обобщение на общий случай, где мы оптимизируем награду напрямую, например, с PPO): по мере обучения модель улучшается и генерирует все более качественные ответы. Эту возможность хочется использовать для обогащения датасета, чтобы не ограничиваться только сбором данных в оффлайне. Для добавления такого онлайн exploration нам нужны две вещи:

1. Модель, отличная от основной, способная генерировать ответы из отличающегося распределения. Возникает вопрос, откуда такую модель получить — это классическая дилемма exploitation vs exploration.
2. Preference модель, которая сможет ранжировать новые ответы и добавлять их в датасет для следующей итерации.

Существует множество способов решить эти вопросы, и в статье описаны некоторые из них. Авторы выбрали следующую конфигурацию:

1. Для exploration (то есть для создания новых пар в датасете) используется rejection sampling из текущей модели: генерируется 8 ответов для одного промпта, затем выбирается пара с самой высокой и самой низкой оценками.
2. Preference/Reward Model обучается на большом количестве различных датасетов либо в pointwise постановке (каждому ответу ставится оценка), либо в pairwise постановке (оцениваем сразу пару ответов).

Такие итерации можно повторять многократно, что является отдельным гиперпараметром. Крутое приложение метода: прокачивать модели на математике, коде и всем остальном, где результат можно четко измерить без специальной Reward модели, вот пример похожей работы для gsm8k и math.
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥13👍4
Andrej Karpathy продолжает радовать контентом и 2 недели назад выпустил крутой выпуск по обучению GPT-2 на 124M с нуля, покрыв очень много тем (еще бы, за 4 часа). По меркам ML это уже прошлый век, но, пусть и с запозданием, хочется отдельно выделить некоторые кусочки, которые, на мой взгляд, могут быть особенно полезны многим изучающим NLP/LLM.

1. Быстрое преобразование тензора токенов из датасета, чтобы получить таргет для обучения: ведь для каждой последовательности токенов нам нужно учиться предсказывать следующий. И там же имплементация DataLoader с этим трюком.
2. Объединение матрицы начальных эмбеддингов и последнего слоя lm_head, предсказывающего следующий токен: мотивация, inductive bias и прочее.
3. Есть такой частый вопрос на собеседованиях: а зачем в attention произведение Q*K делить на sqrt(d)? Похожая история есть с нормализацией весов слоев, где есть residual paths. Здесь Andrej как раз модифицирует их инициализацию для контроля дисперсии.
4. Секцию 1:22 — 2:15 вообще советую посмотреть всю: очень много тем покрыто, пусть и по верхам, но это уже дает какую-то интуицию: разные типы данных для обучения, кернелы в гпу, на что уходит время в attention, почему flash attention так сильно ускоряет операцию и так далее. TLDR: с throughput 16k tokens/sec получили 170k tokens/sec.
5. Важный, хотя кажущийся простым момент с gradient accumulation: зачем нужно дополнительно делить loss на grad_accum_steps. Почему-то этот вопрос тоже часто встречался на собесах.
6. Разные способы оценивать модели в рамках языковых бенчмарков: считать вероятность генерации, напрямую генерировать токен-ответ и т.д.
👍22🔥73
OpenAI за долгое время наконец опубликовали статью: LLM Critics Help Catch LLM Bugs. Идея тянется еще с давних пор: давайте сделаем LLM, которая будет находить слабые места и ошибки при генерации другой LLM. В этом направлении мне очень нравится работа Let’s Verify Step by Step, где авторы учили модель численно оценивать каждый шаг модели-генератора на задачах математики: как только был сделан неправильный переход, LLM-критик давала низкую оценку. Более того, если у нас есть подобная модель, мы можем объединять ее с алгоритмами по типу параллельного поиска или Monte Carlo Tree Search, то есть делать поиск по потенциально полезным состояниям и выбирать наиболее перспективные (как это было сделано в свое время для алгоритмов игры в шахматы и го). Эффективность этого значительно выше, чем у обычной генерации, что понятно: вместо одного продолжения мы генерируем целое множество. Это своего рода дополнительная ручка для размена вычислительных ресурсов на качество.

В этой же работе критик учится давать не численный, а текстовый фидбек для задач написания кода, таким образом генератор получает больше сигнала для последующих действий. Особенно много внимания уделяется совместной работе человека и модели для еще более качественной разметки: в этой связке человек + AI добивается наилучших результатов, но мы ведь все и так это давно знали? 🙃 В статье также много деталей по сбору данных и различным методикам Human Inserted Bugs и Human Detected Bugs – стоит почитать в общем. Еще авторы упоминают, что в RLHF брали PPO; видимо, OpenAI – единственная компания, которая продолжает его использовать, остальные уже съехали на DPO/KTO/you name it.

Из интересных моментов хочется рассказать про способ инференса CriticGPT Force Sampling Beam Search (FSBS). Очевидно, мы хотим, чтобы модель находила как можно больше багов в примерах (назовем это recall). Оптимизируя эту метрику, LLM будет стремиться генерировать все больше и больше замечаний, среди которых будут и галлюцинации (ложные срабатывания), то есть precision будет низким. Если в задаче классификации мы можем двигать пороги алгоритма, выбирая оптимальную для нас точку, то с генерацией текста в данной постановке дела сложнее. FSBS позволяет как-то решать эту проблему: CriticGPT принимает на вход пару (вопрос-ответ) и в каком-то месте может дать фидбек в определенном markdown-формате, начинающемся с трех кавычек. С помощью constrained generation мы можем заставить модель генерировать такой фидбек (highlight) в разных местах. Constrained generation в данном контексте означает, что мы вручную ставим ```, и далее LLM из-за формата обучения думает, что дальше должна последовать критика, и начинает ее генерировать. Причем генерировать мы можем множество различных вариантов параллельно (после такой операции у авторов получалось 28 штук), в итоге имея целый список потенциальных ответов от критика. Наилучший мы выбираем по формуле rm_score + LENGTH_MODIFIER * num_highlights, на этом этапе и происходит контроль precision/recall tradeoff. Подробно этот шаг описан в секции 7.1. Rm_score - оценка Reward модели, LENGTH_MODIFIER - гиперпараметр, контролирующий влияние кол-во хайлайтов.
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍4🔥1
В последние месяцы наблюдаю ажиотаж вокруг кодовых агентских бенчмарков по типу SWE-bench. Каждую неделю выходит новая работа, устанавливающая SOTA результаты на лайт версии. Напомню: в SWE-bench агенту дается описание issue, которую нужно починить. Починить означает сгенерировать правильный патч для нужного файла, после применения которого заготовленные тесты будут успешно завершаться (а до этого они падали). Первой работой, где произошел значительный прогресс в этом бенчмарке был SWE-agent на основе gpt4/claude opus. Версия с моделью от openai давала на лайт версии 18% (Последний результат - агент Aide, 43%). Но рассказать хочется не про сота подход, а недавнюю статью AGENTLESS: Demystifying LLM-based Software Engineering Agents. Это лучшее текущее опенсорс решение, осилившее 27% задач. Но интересным выглядит сам подход, тк за его простотой виден сценарий, как можно получить пользу от подобных моделей. Вместо сложных мультиагентных систем или большого числа доступных модели инструментов, здесь каждая задача решается по определенному сценарию из 2 шагов: 1) Найти классы/функции в нужных файлах, которые необходимо исправить 2) Сгенирировать изменение.

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

Генерация изменения (нижний блок). Здесь мы пользуемся вероятностным свойством LM и генерируем множество патчей на каждый блок (все эти патчи будут немного отличаться из-за семплинга токенов) и с помощью простой пост-обработки выбираем главного кандидата.

За счет ограниченного сценария, у модели нет проблем с долгосрочным планированием, ошибками в рефлексии или использованием инструментов. И более того в каждый этап хорошо встраивается подход human-in-the-loop: человек может добавить доп файл для рассмотрения или выбрать лучший патч. Помимо того, что метод дешевле того же swe-agent в 8-10 раз с текущими моделями, возможно с современными моделями подобные подходы более перспективны с точки зрения построения продукта. Остается вопрос, поменяется ли кардинально ситуация с выходом моделей нового поколения, например, gpt-5. Если нужен пост про более подробный обзор swe-bench/swe-agent как основ того, что сейчас активно обсуждают в твиттере, ставьте лайк 🙂
👍37🔥62
Собрали небольшой компанией папку https://www.tgoop.com/addlist/C_RSYpbW5mIyMjVi тг каналов про ML/DL/AI, которая покрывает сразу большой спектр тем: Илья (автор Сайги) много рассказывает про эксперименты с моделями, алайнмент, своего тг бота; Таня недавно стала менеджером в одной из команд Llama и пишет про интересные связанные темы, например, как поменялись бенчмарки для LLM; Ибрагим занимается сбором огромного кол-ва данных для претрейнов и часто делится обзорами на тему у себя (пост про FineWeb); Богдан шарит много информации про свой стартап Vibe и всякие заметки на тему LifeOps. В общем, думаю, что сможете полистать и отобрать, что приглянулось 🙂
50🔥10🤓2🤔1
17 августа в Москве состоится IT-пикник — событие для IT-специалистов. Вход на мероприятие будет осуществляться по пожертвованию в один из десяти благотворительных фондов.

Программа пикника:
📚 Лекции от экспертов
🛠 Воркшопы для взрослых и детей
🔬 Научно-популярные мероприятия
🎮 Интерактивные зоны
🎵 Музыкальные выступления

Участники смогут самостоятельно выбрать, в какую благотворительную организацию направить свои взносы. Вот здесь можно почитать подробнее.

Одним из фондов, который можно поддержать, является Карельский регистр доноров костного мозга. Этот фонд помогает пациентам с лейкемией найти совместимого донора и получить шанс на выздоровление. Пожертвования позволяют оплачивать обследование новых доноров. Поддержать фонд можно по ссылке

Хорошая возможность совместить полезное с приятным: посетить тематическое мероприятие и помочь людям
12🤬1
Последние несколько дней в который раз разбирался в видах параллельного обучения: FSDP, TP/PP, Zero и так далее. По серии постов от huggingface получится скопировать и как-то запустить, но основательно понять — вряд ли. Можно конечно читать оригинальные статьи, но это не очень хороший первый шаг, когда нужно получить интуицию. Посоветовали заметки от University of Amsterdam, где неплохо описана секция Training Models at Scale, с описанием collective operations, которые применяются в каждом алгоритме, и примерами имплементации. Делюсь с вами, возможно пригодится тем, кому предстоит пилить такие вещи самому. Все примеры правда на Jax, но читается вполне нормально 😅
👍14🔥71
Agent Q: Advanced Reasoning and Learning for Autonomous AI Agents. Интересная работа, объединяющая известные методы улучшения моделей для решения сложных агентских задач. Здесь и про SFT (STaR), и MCTS во время инференса, и DPO на траекториях, и AI feedback guidance: в общем хороший обзор популярного сейчас направления с агентами. Любопытным показался метод сбора данных для обучения DPO, но уже не на уровне траекторий, а на уровне каждого шага. Давайте про этот момент подробнее.

В классическом DPO у нас есть промпт x и пара y_chosen, y_rejected, для которых мы и считаем функцию ошибки. Для агентских сред все сложнее — допустим, мы решаем задачу: забронировать столик в ресторане Bougainville на 30 августа на 2 человек на 19:00. Для этого агенту нужно сделать целый ряд действий, а в итоге мы знаем лишь одно: получилось выполнить задачу или нет. И если в каком-то состоянии у агента есть n действий на выбор, то возникает вопрос, а как их сравнивать между собой, чтобы сгенерировать датасет попарок? К этой проблеме можно подойти по-разному: тренировать RM, использовать другую LLM в качестве критика или вообще не сравнивать между собой действия, а сразу целые траектории (это и есть trajectory-level DPO эксперимент из статьи).

Здесь же авторы предложили следующее: давайте применим MCTS (Monte Carlo Tree Seach) для того чтобы для состояния и выбранного действия уметь оценивать Q(s, a) функцию. Q функция говорит о том, какую среднюю награду мы можем получить из состояния s, сделав действие а. За счет большого кол-ва симуляций в алгоритме (то есть попыток решить задачу из различных состояний) мы как раз получаем такого рода оценки. Далее в любом состоянии мы выбираем такие a_chosen, a_rejected, что разность их Q функций отличается на определенное значение. Это означает, что действие лучше не потому, что так оценил человек/модель, а потому, что с этим состоянием чаще удалось решить задачу.
Отдельно радует, что таким образом можно собирать примеры и для довольно сложных задач, достаточно, чтобы модель умела хоть изредка решать их, иначе все оценки Q функций будут нулевые. На одном из бенчмарков такой тюнинг давал существенный прирост поверх других методов. Далее еще на инференс добавить MCTS и получаем SOTA 🙂
58🔥16👍4
Неделю назад закончилось соревнование LMSYS - Chatbot Arena Human Preference Predictions на kaggle, где нужно было предсказать модель-победитель из чата пользователя на lmsys chatbot арене (Место, где юзер общается сразу с двумя моделями и оценивает их ответ. Из множества оценок складывается общий рейтинг ELO всех моделей). Получилась эта история очень неоднозначной: два найденных лика, один из которых зарепортили в последние 2 дня (тк некоторые люди хотели использовать его, не сообщив организаторам, и взять первые места), пересбор всего private теста после окончания, необходимость в большом кол-во железа для обучения моделей и как следствие шейкап в конце. Все соревнование держался на 1-5 месте, но на прайвате на новых собранных датасетах откатились аж до 33 😢

У этой серии будет несколько постов (описание лика, технических подходов, выводов), но пока не знаю, сколько именно. Для начала пара слов о задаче: есть чаты пользователей с арены, то есть серия вопросов, на каждый из которых имеется два ответа: от модели A и от модели B. Пообщавшись какое-то время, пользователь может поставить winner model A/B, Tie, Tie (both bad). Этот ответ и нужно было научиться предсказывать, только Tie и Tie (both bad) склеены в одну метку. Упрощая, можно сказать, что у нас задача классификации на 3 класса с финальной метрикой logloss.

Итак, часть 1. Лик за 2 дня до конца, который поставил все соревнование под угрозу

Если мы зайдем на лидерборд арены, то увидим ссылку на колаб для воспроизведения всех результатов. В этом ноутбуке скачивается файл, содержащий оценки пользователей за всю историю. Но самих чатов (промптов + ответов моделей нет), то есть казалось бы, эти данные не несут опасности. Наверное, поэтому организаторы и не стали задумываться о возможности лика в этом месте, но если посмотреть внимательно, то в колонке conv_metadata лежит информация о кол-ве токенов из промпта и ответов моделей. А токенизатор, который используется для сбора этой статистики, тоже известен. Тогда получается следующая картина: во время теста на кегле можно токенизировать вопросы/ответы и для многих случаев однозначно смапить их со строчкой из файла арены, где финальный ответ уже есть. Из-за этого в один из последних дней, когда у первого места был скор 0.879, люди проснулись и увидели 0.656, потом 0.251, а потом и вовсе ~0.1. На форуме несколько дней стоял хаос, так как до конца оставалось совсем немного, а ответа от организаторов не было. Итоговое решение было такое: продлить соревнование на 2 недели, заморозить прием сабмитов и пересобрать тестовый набор.

Интересный сайд эффект, с которым ничего не стали делать: после заморозки соревнования и сбора нового теста, ~10% участников не получили никакого места на лидерборде, тк все их решения упали по таймауту 🤯

В следующем посте расскажу про основные технические подходы.
Please open Telegram to view this post
VIEW IN TELEGRAM
11👍8🔥4
Хорошая статья с разбором RingAttention - метода вычисления Attention с задействованием всех доступных карт, при этом не сильно упираясь в communication costs. Мотивация растет как всегда из того, что у Attention квадратичная сложность, и на больших контекстах потребление памяти становится огромным. Но даже с учетом оптимизаций FlashAttention (где за счет ухода от хранения полной матрицы QxK сложность памяти снижается до линейной) мы упираемся в проблемы для контекстов в сотни тысяч/миллион и больше. Поэтому хочется использовать несколько карт, чтобы распределить нагрузку на память. Собственно метод предлагает вариант реализации такого алгоритма, а в статье довольно подробно описаны все технические моменты по типу разбиения матриц Q, K, V и агрегация результатов для подсчета коэффициентов.
107🔥3
Подоспела запись вебинара от OpenAI и Alistair Pullen (Cofounder & CEO Genie) про файн-тюнинг линейки gpt4o моделей. Напомню, Genie — лаборатория, совсем недавно показавшая лучший результат на SWE-bench verified 43.8% (тщательно отфильтрованная версия оригинального бенчмарка), взяв за основу gpt4o и дотюнив ее с OpenAI под доп задачи.

- Всего тюнили на 100М токенах, поддерживают 15 языков программирования. Правда не рассказали, какие конкретно данные были: только траектории из swe-bench или какая-то смесь из разных задач.
- Эксперименты ставились в таком формате: сначала proof of concept на маленькой модели (gpt4o-mini), потом переходят на большую. Но для “picker model” (классификатор, который выбирает лучшее действия из набора кандидатов) оставили маленькую модель.
- Alistair топит за eval-driven finetuning. Если опираться только на “vibe-checking” — все сойдется к субоптимальному результату.
- Пример работы по улучшению тренировочных данных. Была проблема: модель фейлится в решении легкой задачи если у нее не получилось с первого раза. Причиной оказалось то, что в датасете такие задачи всегда решались с первого раза. Решение: наделать синтетики, где после неудачных попыток простая задача все-таки решается (не рассказали, как делали так, чтобы эта синтетика не провоцировала вторую попытку там, где раньше была одна, но обычно это делается простым маскированием части токенов)
- Другой пример. Alistair говорит, что в обучении (видимо, имеется в виду весь цикл обучения моделей OpenAI) недостаточно представлена ошибка runtime errors, так что имеет смысл нагенерить для тюнинга сэмплов с ними и примерами, как действовать в таких случаях.
- Интересная мысль, про которую упомянул вскользь: во время валидации находить части, где у генерации модели высокий uncertainty и дальше изучать трейн, чтобы понять, почему так произошло. Таким образом итеративно можно закрывать потенциальные пробелы, которые трудно уловить визуально.
- Очевидно весь фокус направлен на данные, включая синтетику, а не настройку гиперпараметров. Учили все со значениями, предложенными OpenAI.
- После тюнинга обобщающая способность модели падает: модель начинает хуже работать вне того распределения, на котором тюнили.
👍11🔥7
Хорошие слайды от одного из сотрудников DeepMind на тему LLM Reasoning, RL, Verifiers — в общем всего, что занимает умы многих последние месяцы 😅

Вкратце шаг за шагом проходят по многим популярным методам:
— ReST: генерируем синтетику, фильтруем правильные примеры (для этого у задачи должен быть правильный ответ, который нам известен) и докидываем в тренировку.
— Добавляем Verifier: во время инференса генерируем множество вариантов и выбираем один с помощью эвристики/модели.
- В качестве эвристики отлично работает Majority Voting, то есть берем генерацию с самым частым финальным ответом среди кандидатов.
- Модель же можно обучать разными способами: от бинарной классификации на правильный/неправильный ответ до DPO на генерации из ReST.
— Verifier дает нам возможность разменивать качество на объем вычислений: общая тенденция такая, что генерируя больше кандидатов и выбирая из них ответ, можно сильно растить метрики. Отличная статья на тему scaling test-time compute: https://arxiv.org/abs/2408.03314v1
— Переходим к Generative Verifier — очень популярный в последнее время метод обучения критиков. Заключается он в том, что модель мы учим так же в режиме next token prediction и можем добавить Chain of Thought, от чего качество становится еще выше.
— Еще есть всякие дополнительные топики по типу Cost-Matched Sampling, Reinforced In Context Learning (что, кстати, позволяет делать интересные штуки по типу “дообучаться на лету” под поведение пользователя)
🔥13👍31
2025/07/12 23:34:52
Back to Top
HTML Embed Code: