Старший Авгур @senior_augur Channel on Telegram

Старший Авгур

@senior_augur


Сохраненки и шитпост про ML от @YallenGusev

Старший Авгур (Russian)

Старший Авгур - это Telegram-канал, где вы найдете сохраненки и шитпосты про машинное обучение от пользователя @YallenGusev. Если вы увлечены искусственным интеллектом, машинным обучением и всем, что связано с этой темой, то этот канал именно для вас. @YallenGusev делится своими знаниями, опытом и веселыми картинками, чтобы сделать ваше погружение в мир машинного обучения еще более увлекательным. На канале вы найдете не только интересные материалы и новости из мира ML, но и возможность общаться с единомышленниками, делиться своими мыслями и вопросами. Присоединяйтесь к каналу "Старший Авгур" и окунитесь в захватывающий мир машинного обучения вместе с @YallenGusev!

Старший Авгур

11 Feb, 16:01


⚡️ QVikhr-2.5-1.5B-Instruct-r — Наша новая компактная llm теперь еще и с GRPO этапом. За счет GRPO это теперь первая reasoning модель на русском языке с честным RL .


🔗 Карточка модели:
https://huggingface.co/Vikhrmodels/QVikhr-2.5-1.5B-Instruct-r

Старший Авгур

07 Feb, 09:53


Мем, сгенерированный по предыдущему сообщению.

Старший Авгур

07 Feb, 09:49


Призываю всех пойти погенерить и пооценивать мемы в @AIMemeArenaBot.
За себя голосовать не призываю, там всё равно метки скрытые, но в свою систему верю.
Голосуй, или я проиграю 😁

Старший Авгур

06 Feb, 19:48


Бенч 10/10, спасибо Игорю.
http://platinum-bench.csail.mit.edu/

Люди собрали чуть-чуть простых задач с мега-супер-пупер правильными ответами, и оценивают стабильность моделек.
В такой постановке даже древнющий Navigate из BigBench'а внезапно становится хорошо разделяющей задачей.
Статью можно не читать, можно просто поштырить в ошибки.

Старший Авгур

05 Feb, 14:55


Классный новый алгоритм на подходе:
Даем на вход картинку, аудио и модель сама оживляет персонажа

Кода пока нет, сайт проекта тут:
https://omnihuman-lab.github.io/

Жду не дождусь чтобы исторические фото помучать

Старший Авгур

05 Feb, 11:11


Читаю я эссе Уоррена Уивера 1949 года о машинном переводе (не спрашивайте, как так получилось), и что я вижу? Word2vec/MLM.

Старший Авгур

04 Feb, 21:27


Тут вот какое дело...

Пост — реклама smolagents. В реальности дела мягко говоря обстоят не так хорошо. Начиная со стоимости вот этого всего (легко тратится до 10$ на один вопрос), заканчивая длинным хвостом задач, которые вообще нормально агентами не решаются, хотя люди их решат за 5-10 минут. Я, конечно, экспериментировал со своими инструментами, а не с чужими, но инструменты из поста написаны скорее хуже, а не лучше.

Самая непобедимая проблема для меня пока — заставить агента читать все страницы выдачи, а не только первые 2-3. И желательно только в тех случаях, где это реально нужно.

Старший Авгур

04 Feb, 21:14


Ладно уже не смешно.

Hf выложили свой deepresearch на o1, c полностью открытым кодом, на Gaia выдает 55%(против 67% у openai)

Блог: huggingface.co/blog/open-deep-research

Старший Авгур

03 Feb, 13:22


⚡️ QVikhr-2.5-1.5B-Instruct-SMPO — Наша новая компактная llm теперь еще и с RLHF этапом. За счет RLHF получили качественный прирост по метрикам, а за счет размера гонять можно хоть на тостере!

🔗 Карточка модели: https://huggingface.co/Vikhrmodels/QVikhr-2.5-1.5B-Instruct-SMPO
🔗 GGUF: https://huggingface.co/Vikhrmodels/QVikhr-2.5-1.5B-Instruct-SMPO_GGUF
🔗 Презентация Preference Optimization: https://docs.google.com/presentation/d/1WDzavFCtCeF8A9i0-hyyE9e8N1f_ieijyGiS4N0sAGQ/edit?usp=sharing

Коллектив авторов: @LakoMoorDev @nlpwanderer

Старший Авгур

02 Feb, 18:51


Недавно я обратил внимание на один гениальный ход DeepSeek.

Про то, что при обучении модель училась предсказывать сразу несколько токенов, знают примерно все.

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

А вы знаете, сколько MTP модулей было выложено вместе с моделью?
- ОДИН.
Источник.

Таким образом, для себя они, вероятно, оставили 4-5 MTP-модулей, а наружу выложили только 1. То есть, они могут инферить модель в 2-3 раза быстрее, чем любые другие провайдеры. Вы конечно можете дообучить больше MTP модулей или вообще перейти на Медузу, но это потребует нетривиальных усилий. В итоге модель-то открытая, но конкуренты всё равно в дураках.

Старший Авгур

31 Jan, 15:42


🔸 Open Talks Special: Лидеры русскоязычного open source LLM в одном эфире.

5 февраля в 19:00 собираем ключевых независимых разработчиков опенсорсных русскоязычных LLM и говорим о том, что волнует AI-сообщество прямо сейчас:

➡️ Как создаются русскоязычные LLM и с какими вызовами сталкиваются их разработчики?

➡️Что ждет опенсорсные AI-решения в будущем?

➡️ Как DeepSeek меняет правила игры?

Спикеры:

🎤 Михаил Тихомиров – научный сотрудник НИВЦ МГУ, занимается адаптацией мультиязычных LLM, создатель Ruadapt➡️Топовая модель показывает 92 балла на балла на Ru Arena General

🎤 Илья Гусев – автор Сайги ➡️одной из самых скачиваемых русскоязычных моделей на HF, а также role-play бенчмарка PingPong

🎤 Александр Николич – один из авторов Rudalle и Kandinsky, создатель Vikhr models ➡️ одни из лучших моделей на русском языке до 20B параметров, один из самых популярных бенчмарков

🔸 Проведет эфир Павел Подкорытов, сооснователь AI Talent Hub и CEO Napoleon IT.

🤔 Не увидел важного вопроса в анонсе?

➡️ Регистрируйся и задай свой вопрос экспертам!

Приходи! Без тебя – не то 💘

#OpenTalks
#AITalentHub #ITMO #NapoleonIT

Старший Авгур

30 Jan, 14:24


https://mistral.ai/news/mistral-small-3/

Старший Авгур

30 Jan, 13:54


🥁🥁 🥁
А вот и наш первый выпуск!
Говорим Про LLM c Ильёй Гусевым, затронем темы:
- что сейчас есть интересного из моделей на русском;
- как померить что модель крутая и как все хакают эти метрики;
- доисторические технологии, как генерировали тексты до 2020х годов;
- можно ли запустить ламу на чайнике, холодильнике и другой кухонной утвари;
- когда будет AGI и пора ли подыскивать другую работу;
- кого слушать и куда смотреть, чтобы ничего не пропустить.

Также подписывайтесь на канал Ильи, он прикольный: @senior_augur

N.B.
Мы записывали выпуск до шумихи с DeepSeek, но такое пропустить нельзя, поэтому у нас скоро выйдет бонус эпизод.
И на этом с LLM закончим, честно-честно 😉


Spotify | Яндекс.Музыка

Старший Авгур

29 Jan, 10:28


О стоимости Deepseek v3

- Llama 3 70B, 15T токенов, 6.4M H100 часов, примерно 16M$. Источник.
- Deepseek 67B, 2T токенов, 600K H800 часов, примерно 1.2M$. Источник 1, источник 2.
- Deepseek v2 236B MoE, 21B active, 8T токенов, 1.4M H800 часов, примерно 2.8M$. Источник.
- Deepseek v3 671B MoE, 37B active, 15T токенов, 2.8M H800 часов, примерно 5.6M$. Источник.

H800 оценена как 2$ в час, H100 как 2.5$ в час.
Качество моделей не сравнивается, цель была не в этом.
Кроме того, в этом сравнении нет утилизации карточек (спасибо Саше за этот комментарий).
(И второму Саше за указание на 8T токенов у v2).
Кроме того, очевидно, что это только одна попытка, в плохих случаях их может быть 10+ (см. например 13 попыток древнейшего OPT-175B).
Кроме того, очевидно, что это ничего не говорит о Deepseek R1.

Выводы:
- Deepseek каждый раз в 2 раза повышал бюджет.
- Deepseek v3 должен бы стоить в 2-3 раза дороже v2, но стоит столько же (в пересчёте на 1T токенов) из-за хороших инженеров.
- Llama гораздо дороже, но и гораздо древнее.

Старший Авгур

28 Jan, 16:54


Простите, что так мало постов, я просто размечаю мемы.

Старший Авгур

27 Jan, 23:29


В продолжение темы, Jay Alammar, у которого были прекрасные визуальные объяснения про работу трансформера, в сто раз лучшие оригинальной статьи, выпустил только что иллюстрированный DeepSeek-R1

https://newsletter.languagemodels.co/p/the-illustrated-deepseek-r1

Старший Авгур

23 Jan, 14:50


Один из картиночных вопросов (которые всё равно даже на дашборде не отобразились, поэтому ими можно делиться) был вот такой. Задача — перевести запрос.

Спёр я её у жены, которая делала её для своих проектов.

Это упрощенная версия 278 задачи отсюда. Я тогда ещё нашёл оригинал, поэтичическую стеллу Тутмоса III, и её перевод на английский.

Старший Авгур

23 Jan, 14:33


https://lastexam.ai/

👉

Старший Авгур

22 Jan, 21:26


Наконец-то пришёл отказ на ICLR, можно теперь на ARR податься.

Мета-ревью примечательно тем, что единственная ссылка в нём — на работу из августа 2024 года, а сабмит моей статьи — из сентября. Согласно официальным гайдлайнам ICLR работы, выпущенные за 4 месяца до сабмита, считаются "параллельным", и я так-то не обязан с ними сравниваться. Но это мелочи, конечно, по сравнению со всем остальным процессом.

Залил на архив новую версию (которая в два раза больше старой): https://arxiv.org/abs/2409.06820

Старший Авгур

22 Jan, 16:32


Есть ли у ИИ чувство юмора? 😁

Это пытаются выяснить разработчики AI Meme Arena - проекта, в котором разные агенты пытаются сгенерировать самый смешной мем.

Работает как и все llm арены: пользователь вводит тему для шутки, 2 случайных AI-агента делают смешную картинку, юзер выбирает самую смешную, далее строится ELO-рейтинг агентов. Лучшие 3 агента получат денежный приз.
Арену сейчас сильно колбасит, агенты улетают с первого до последнего места за считанные часы (разработчики обещают исправить это).

Я тоже решил учавстовать в сорвевновании и разработал агента "Humorithm" на основе Claude 3.5. Любой человек может добавить своё AI-решение на арену. Для этого нужно сделать публичное API по документации. Требования к агентам: <15 секунд на картинку, 85% уровень доступа (SLA).

Сгенерировать мем

@hikonon

Старший Авгур

14 Jan, 10:30


Статья с эпиграфом и буквицами 😎

Старший Авгур

14 Jan, 09:02


Это случилось быстро 😂

Старший Авгур

13 Jan, 10:42


На этом канале до сих пор не было рекламы, и есть ощущение, что и не будет, хотя меня стабильно раз в неделю о ней спрашивают. Рекламу для России сложно размещать: по-хорошему нужна явная регистрация рекламы в ОРД, а после 10к подписчиков — регистрация канала в другом реестре, и вмазываться в это всё я точно не хочу. Причём не очень понятно, где границы этого. Как определяется, что реклама "направлена на потребителя из России"?

Так что остаётся только реклама не для России, и из-за моего резиденства (Нидерланды) только не для лиц под санкциями. И я сразу зафиксирую ценник: 600€ за пост с удалением через 7 дней (обсуждаемо) переводом в пределах ЕС.

Сомневаюсь, что таковые лица найдутся, поэтому можете наслаждаться контентом без рекламы 🥰

Старший Авгур

12 Jan, 23:03


На скриншоте один из тестовых вопросов, которые я использую.
Вопрос, очевидно, не совсем серьёзный, но хотя бы заставляет агента попотеть, даже на базе Соннета.
Я всё ещё борюсь за получение нормального лога/отчёта (mind.txt), в комменты скину только final.txt с одного из прогонов.

Что интересно, есть две статьи, которые регулярно всплывали за пару десятков итераций:

Gödel Agent: A Self-Referential Agent Framework for Recursive Self-Improvement
https://arxiv.org/abs/2410.04444

OS-Copilot: Towards Generalist Computer Agents with Self-Improvement
https://arxiv.org/abs/2402.07456

Разбор первой можно найти тут: https://t.me/gonzo_ML/2964
Про вторую я тоже уже слышал, но не читал.

Старший Авгур

12 Jan, 22:48


smolagents — очень сырая библиотека. Косяки, которые я успел обнаружить:
- Захардкоженный max_tokens=1500 (issue).
- До 1.2 был неправильное стоп-слово для CodeAct (<end_action> вместо <end_code>).
- Кривое отображение плана в CodeAct начиная с 1.2.
- Частые падения из-за багов в коде отображения в консоли.
- Нет поддержки сложных типов. Tuple[int, int], например.

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

Старший Авгур

12 Jan, 14:23


Немножко про агента и инструменты, которые я писал последние пару дней.

Поиск по ArXiv. Есть публичное API, есть готовая библиотка. Подводные камни:
- Есть значительный кусок функциональности, который не поддерживается во всех популярных реализациях: фильтр по датам. Более того, в официальном руководстве к API он... неправильно описан! Если вы выполните запрос из руководства, то увидите, что фильтр там тупо не работает! В реальности это должен быть не отдельный GET параметр, это должна быть часть запроса, что я выяснил только из группы с обсуждением.
- Я до сих пор не до конца понимаю, как работает поиск без явного указания полей. Это как будто бы нигде нормально не описано.

Скачивание и парсинг PDF. И если со скачиванием вопросов нет, то с парсингом всё до сих пор очень-очень больно. Есть pypdf, который с извлечением текста из архивовских pdfок кое-как справляется, но получается просто текст без структуры. И есть marker, который справляется очень даже элитно и выдаёт нормальный Markdown + картинки, но который по-хорошему требует отдельного GPU сервака. На CPU ждать по минуте не очень хочется, да и зависимости там сейчас конфликтуют с smolagents. Чего-то посередине я пока не нашёл.

Эмуляция bash. Я взял спеку Anthropic, запихнул её в Соннет и сказал, чтобы он написал код с исполнением через Docker. Пока что работает безотказно, вообще никаких проблем не было. Более того, иногда агент полнейшую дичь умудряется вытворять с этим инструментом.

Сам агент. Сначала я тестировал всё с Соннетом. Когда за 3 дня насчиталось 30$, я понял, что так продолжать нельзя. Сейчас всё пытаюсь делать с gpt-4o-mini, и это реально больно. Зато если уж с ней всё работает, то с нормальными моделями получаются вообще чудеса. Тестирую на простом запросе про свою же статью.

Меня не очень интересуют хардкодные реализациии типа storm и AgentLaboratory. Хочется всё сделать в рамках базового CodeAct, запихивая всю сложность в инструменты и подчинённых агентов.

Сейчас я пишу str_replace_editor из той же спеки, что и bash.

Старший Авгур

10 Jan, 16:54


Часть дефолтного промпта в smolagents: ссылка.

Старший Авгур

09 Jan, 10:55


Phi-4 в текущем состоянии хуже Немо для русского на ПингПонге.

Старший Авгур

08 Jan, 20:51


Что нового я узнал за день?

— Во-первых, MCP и совместимые с ним сервера. В том числе ArXiv сервер, но мне не очень нравится конкретно эта реализация, там нельзя выбирать порядок сортировки результатов поиска, например. Но сам список в целом сойдёт как библиотека инструментов.
— Во-вторых, smolagents (агентский фреймворк от HF) и их подход к инструментам, которые можно автоматически заливать как Spaces на HF. И наоборот, использовать существующие Spaces как инструменты. Ещё прикольно, что основной подход в нём не function calling, а генерация кода с инструментами. Это, в частности, позволяет не завязываться на конкретную реализацию вызова функций. В качестве защищённого интерпретатора Питона они предлагают E2B. До этого я пользовался только Terrarium от Cohere.
— В-третьих, я пока не нашёл адекватной реализации инструмента файловой системы и редактора файлов, но я пока и недостаточно хорошо искал. Попробую воспроизвести или найти воспроизведение str_replace_editor из спеки Anthropic.
— В-четвёртых, всем спасибо за предложения. Часть я уже упомянул выше. findpapers мне пригодился как место, где можно подсмотреть код. storm имхо бесполезен.

Вывод пока такой: открытые инструменты довольно дерьмовы. А если делать свои — то проще всего делать аннотированные функции и потом экспортировать их в любой протокол или фреймворк. Что я и начал делать тут.

Старший Авгур

08 Jan, 00:43


Я тут почитывал https://situational-awareness.ai/, и очень мне приглянулась идея автономного агента-учёного.

Уверен, что таких проектов навалом на Гитхабе, но имхо без трёх вещей это не будет работать:
1) Инструмент для поиска по Arxiv и другим научным библиотекам. Причём нормальный, который может возвращать полные тексты, желательно с картинками.
2) Инструмент, эмулирующий файловую систему и её менеджмент.
3) Инструмент, позволяющий эффективно читать и редактировать текстовые файлы. Такой себе vim для LLM, который не жрал бы тонны токенов.

Под "инструментами" я понимаю нормальные API, доступные для вызова моделями.

Я завтра подробно подробно поищу все 3 штуки, но может быть кто-то что-то уже видел?

Старший Авгур

03 Jan, 15:08


У Anthropic пару недель назад вышел пост про агентов: https://www.anthropic.com/research/building-effective-agents

Он прекрасен тем, что определяет, что является агентом, а что не является. С точки зрения авторов поста, агент = система, в которой языковые модели динамически управляют собственными вызовами и инструментами, контролируя выполнение какой-то задачи.

Авторы утверждают, что для большинства случаев агенты не нужны: чем проще решение, тем лучше. С чем я полностью согласен 👏

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

🔹Паттерн 1: цепочка промптов
Если задача разбивается на несколько последовательных подзадач, их можно решать отдельными вызовами языковой модели. Например, если вы хотите сделать систему, пишущую книги, вы сначала делаете вызов для генерации названия книги, потом отдельные вызовы для краткого описания, содержания, выжимок глав и непосредственно самих глав.

🔹Паттерн 2: маршрутизация
Если ваше приложение разбивается на несколько возможных параллельных путей, то стоит сделать классификатор, который будет определять нужный путь, и специализированные промпты под каждый из путей. Например, если вы делаете чатбот с несколькими независимыми функциями (рекомендация фильмов, ответы на вопросы по фильмам, чат на общие темы), то стоит использовать этот паттерн. В древних чатботах часто был детектор интентов, который делал ровно это 👴

🔹Паттерн 3: параллелизация
Если задача разбивается на несколько параллельных подзадач, то стоит их и вызывать параллельно. Например, если вам нужно извлечь огромный JSON из текста или переписки, возможно вам стоит извлекать его по кусочкам. Отличие от маршрутизации в том, что в ней нам нужна была только одна ветка, а тут нам нужны результаты всех вызовов.

🔹Паттерн 4: ведущий-ведомый 😭
То же самое, что и параллелизация, только с динамическим количеством и содержанием подзадач. Например, так можно делать агрегацию результатов поиска.

🔹Паттерн 5: цикл оценки
Если есть чёткие критерии оценки качества выполнения задачи, то можно одной языковой моделью решать задачу, а другой — оценивать качество решения и давать обратную связь. И делать это в цикле. Это может работать много где, например в переводе текстов.

Ну и наконец последний паттерн — агенты, которые совершают действия в определенной среде, получают от среды обратную связь, и снова совершают действия.

Мне в разных местах в разное время пришлось использовать первые 3 паттерна. При этом тогда я не формулировал их как отдельные паттерны. Это не какие-то абстрактные штуки, это кристаллизация того, как удобно и просто строить системы (как и любые другие паттерны проектирования).

Старший Авгур

31 Dec, 15:18


Поздравляю всех подписчиков с наступающим Новым годом!

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

Статьи:
— Zoology: крутая синтетическая задача (MQAR) и обоснование того, чего не хватает современенным рекуррентным сетям.
— Чувствительные функции: обоснование невыучиваемости трансформерами мегапростой задачи, parity.
— Медуза: критически важная штука на практике, ускорение моделей чуть ли не на порядок.

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

Фильмы:
— Когерентность: очень дешёвый и очень прикольный фильм про параллельные вселенные. Да и в целом рекомендую весь жанр НФ триллеров, которые сначала маскируются под обычные ужастики: Прочь, Нет, Мы.

Игры:
— Balatro: карточный рогалик в покерной стилистике с кучей прикольных механик, в который я вбухал сотни часов.
— Factorio: Space Age: в представлении не нуждается. Скоро будет ровно 10 лет с того момента, как я купил оригинальную игру. DLC добавляет космические платформы и другие планеты с другим распределением ресурсов. А ещё дроны теперь открываются сильно позднее, поэтому приходится всё делать нормально.
— Marvel Rivals: новый командный геройский шутер. Очень зашёл мне, как постоянному игроку первого Overwatch.

Книги:
— Вселенная Боба: крепкая развелкательная фантастика (а я другого нынче почти и не читаю). Главный герой — человек, переродившийся в зонд фон Неймана, сначала спасающий Землю, а потом исследующий космос.
— Диктатор: скорее социальная фантастика про параллельную версию Земли и про человека, который хотел мира во всём мире.
— Вавилон: сокрытая история: фантастика про лингвистику в декорациях Оксфорда начала 19 века. Классная концепция, но слитая концовка.

Старший Авгур

29 Dec, 22:46


The Pitfalls of Next-Token Prediction
Статья: https://arxiv.org/abs/2403.06963
Видео: https://www.youtube.com/watch?v=9V0bfZqT1Yo

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

🔹Задача
Авторы придумали простую синтетическую задачу: поиск пути между двумя вершинами в деревьях очень специфичной структуры, а именно в таких, где есть одна центральная вершина и несколько цепочек, исходящих из этой центральной вершины. Пример такого дерева (степень центральной вершины = 2, длина цепочек = 5):

8 ← 1 ← 5 ← 4 ← 3 → 0 → 2 → 6 → 7


Условия задачи:
— Степень центральной вершины и длина цепочек фиксированы для всех деревьев в обучающей и тестовой выборке.
— Путь всегда начинается в центральной вершине.
— Путь всегда заканчивается в одном из листьев.

Вход для задачи выглядит как случайно перемешанный набор рёбер дерева, плюс начало и конец пути (после "/"):

3 → 4 | 5 → 1 | 4 → 5 | 0 → 2 | 3 → 0 | 1 → 8 | 6 → 7 | 2 → 6 / 3 7


Выход выглядит как сам путь:

3 → 0 → 2 → 6 → 7


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

🔹Эмпирическая часть
— Авторегрессионные модели не справляются с решением этой задачи даже для деревьев с фиксированной структурой. Потому что сложно понять, в какую сторону идти от центральной вершины. 💀
— При развороте пути задача успешно решается авторегрессионными моделями. Это логично, потому что так гораздо проще: вы просто поднимаетесь по родителям, пока не найдёте центральную вершину. 📈
— Если во время обучения маскировать уже пройденную часть пути, модели также успешно решают задачу без разворота. Это странно, потому что мы делаем задачу сложнее для модели, заставляя её генерировать весь путь сразу. Но каким-то образом на такой версии задачи модель учится, а на оригинальной — нет. 😱

Я потратил пару вечеров и воспроизвёл это в Колабе: ссылка. Воспроизводил для 2-5 деревьев, то есть ровно таких, как в примере выше. Код писал с нуля, но опираясь на их Гитхаб. Всё получилось, как написано в статье: усложнение задачи приводит к возможности её выучивания. Технически это выглядит просто как маскирование части input_ids.

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

Однако авторы статьи предполагают, что основная проблема не в механизме предсказания следующего токена как таковом. Проблема — в teacher forcing'е, то есть в том, что во время обучения у модели нет необходимости планировать и пытаться сформулировать решение в активациях. И ведь большинство современных моделей обучалось именно с использованием этого метода.

🔹Ограничения
— Эмпирическая часть работает при фиксированном наборе гиперпараметров, и сломав их, можно сломать 2 и 3 наблюдение. Обучение и обучаемость таких моделей — это прежде всего оптимизационная задача, и там есть значительная доля случайности. Однако ни у меня, ни у авторов не получилось сделать модель, которая была бы контрпримером для первого наблюдения.
— У авторов нет никакого теоретического обоснования наблюдений. Как нет и алгоритма, по которому сеть считает путь. Мне кажется, что тут есть простор для творчества и механистической интерпретации.

Старший Авгур

27 Dec, 15:19


А я напомнию, что индекс всех полезных постов всегда в закрепе: https://t.me/senior_augur/7

Старший Авгур

27 Dec, 12:17


Между прочим, рост на +inf процентов за год.

А вот что меня удивило — это самый популярный пост. Не обучающий материал. Не разбор статьи. Даже не смешнявка. Просто рандомная фигня, но почему-то на 35к просмотров.

Старший Авгур

24 Dec, 13:39


Cut Your Losses in Large-Vocabulary Language Models
Статья: https://arxiv.org/abs/2411.09009
Рецензии: https://openreview.net/forum?id=E4Fk3YuG56
Код: https://github.com/apple/ml-cross-entropy

Статья про оптимизацию памяти при подсчёте функции потерь и её ближайших градиентов при обучении языковых моделей. Основной механизм — модифицированная реализация перекрёстной энтропии, Cut Cross-Entropy (CCE). Авторы берут ровно ту же оптимизацию, которая используется в Flash Attention (поблочное вычисление в кэше GPU), но применяют её к последнему слою и последнему софтмаксу.

Последний шаг при предсказании следующего токена — линейный слой и софтмакс. На каждом шаге генерации у нас есть вектор E с последнего слоя трансформера, мы умножаем его на матрицу C, получаем логиты в ℝ^|V|, для каждого логита считаем экспоненту и делим на сумму всех логитов из всего словаря. Так для каждого токена получаем вероятность, число в отрезке [0, 1]. Функция потерь при обучении — логарифм вероятности правильного токена (с минусом). Нас интересует только правильный токен, и только его логит нам нужен в числителе софтмакса. Логарифм в лоссе гасит экспоненту в числителе. Вычисление раскладывается на две части: вычисление логита правильного токена и вычисление слагаемого нормализации по E и всем столбцам C (логарифм суммы экспонент).

При обучении мы можем считать всё параллельно для всех токенов, поэтому там уже не вектор E, а матрица E.

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

Кроме собственно оптимизаций с кэшом, используется тот факт, что большинство значений на выходе софтмакса "плохие", то есть очень близкие к нулю. Из-за ограниченной точности чисел с плавающей точкой, "плохие" значения ни на что не влияют при использовании в слагаемом нормализации. И для них авторы предлагают просто не считать градиенты. Вторая оптимизация такого рода — сортировка словаря по средним логитам, чтобы токены с "плохими" логитами попадали в один блок, и можно было такие блоки полностью пропускать.

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

Экспериментально для Мистраля Немо удалось уменьшить память на лосс+градиенты с 8 Гб до 1.3 Гб, что лучше, чем в Liger Kernel. Аналогичная (и иногда даже более существенная) экономия памяти есть и для других моделей.

Потрогать можно через их библиотеку и патчинг модели. То есть вы делаете вот такое:

from cut_cross_entropy.transformers import cce_patch

model = ...
model = cce_patch(model)


После этого лосс и градиенты будут считаться как в статье. Но логиты не будут возвращаться, потому что они не материализуются в принципе.

Старший Авгур

23 Dec, 14:56


На HF довольно давно появился пост, который я как-то пропустил, но который хорошо и кратко описывает основные оптимизации при обучении языковых моделей. Пост: ссылка
Есть ещё старый пост на ту же тему от Eleuther: ссылка
А пост ниже — это короткая выжимка от меня, именно по экономии памяти на одной карточке.

🔹Числа с плавающей точкой (IEEE 754) — основной тип для вычислений в языковых моделях, у них есть знак, экспонента и мантисса. Экспонента контролирует диапазон значений, мантисса — точность в рамках этого диапазона. Также напомню, что есть приколы с представлением чисел около нуля (aka денормализованные числа). Есть куча реализаций разной битности:
float: 32 бита, E8M23
— tf32: 19 бит, E8M10 (специфичный для Nvidia формат, отсюда все странности)
fp16: 16 бит, E5M10
— bf16: 16 бит, E8M7 (экспонента и диапазон как у float)
— fp8: 8 бит, E4M3 или E5M2

🔹На что тратится память:
W: Сами веса модели
A: Активации (промежуточные состояния, результат вычисления функции от входа и весов)
G: Градиенты (обновления весов модели при обучении)
O: Состояние оптимизатора (моменты и дисперсия)

При инференсе есть только W и часть A, при обучении есть все 4 категории. Далее у каждого метода стоят буквы, которые обозначают, что именно экономится.

🔹Методы экономии памяти при инференсе:
— Квантование модели (WA): ужимаем тип данных для весов и активаций. В большинстве статьей так и написано: W4A16, что означает, что веса в 4 битах, активации в 16 битах.
— Flash Attention (A): оптимизируем вычисление внимания поблочными вычислениями в кэше GPU, попутно уменьшая сложность по памяти с квадратичной по длине последовательности до линейной.

🔹Дополнительные методы экономии памяти при обучении на одной карточке:
— Смешанная точность (A): имеем рабочую копию в 16 битах (bf16 или fp16), а также мастер-копию в 32 битах. Все операции делаем с рабочей копией и потом обновления весов вливаем в мастер-копию. Вы спросите: а где профит? А профит в том, что активации в 16 битах, а активации — это дофига памяти.
— Квантование оптимизатора (O): ужимаем тип данных для состояний оптимизатора. Чаще всего в 8 бит, перед собственно применением градиентов расквантовываем.
— Аккумуляция градиентов (AG): если мы хотим батч из больше чем одного примера, то A и G тоже раздуются. Но нам совсем не обязательно считать градиенты параллельно, поэтому мы можем считать их последовательно, суммировать, и только потом применять. Если это правильно😁 отмасштабировать, то это теоретически эквивалентно обучению на всём батче.
— Чекпоинты активаций (A): при обучении нам по-хорошему нужны активации на всех слоях, чтобы потом считать по ним градиенты. Но нам сначала нужно дойти до лосса, поэтому мы выкидываем часть промежуточных активаций и пересчитываем их заново на основе оставшихся чекпоинтов тогда, когда они нам реально понадобятся для подсчёта градиентов.
— Адаптеры (GO): основную модель вообще не трогаем, учим только новый маленький набор весов. Градиенты считаем только по нему, и на этом сильно экономим.

На практике используется буквально всё, везде и сразу 🤯
Типичный конфиг:
"model": {
"attn_implementation": "flash_attention_2", // вы поняли
"load_in_4bit": true, // квантование модели
...
},
"trainer": {
"gradient_accumulation_steps": 32, // аккумуляция градиентов
"bf16": true, // смешанная точность
"optim": "adamw_8bit", // квантование оптимизатора
"gradient_checkpointing": true, // чекпоинты активаций
...
},
"lora": {...} // адаптеры

Старший Авгур

20 Dec, 21:28


OpenAI душат (потому что o2 нет).

Это всё ещё неимоверно дорого, как и весь test-time compute, но иногда это стоит того. Особенно в тех случаях, когда человеки не могут что-то решить в принципе.

Старший Авгур

20 Dec, 21:25


o3 на 175 месте в Codeforces, то есть примерно 175й сильнейший программист во всем мире.

Это лучше 99,9% участников рейтинга (а все из них — это профессиональные программисты).

Живые участники рейтинга, у которых с 1 по 100 место — это люди, которые выигрывали золотые медали по информатике и продолжали профессионально участвовать в соревнованиях после школы/универа.

Старший Авгур

15 Dec, 22:52


И ещё одна хорошая моделька, на этот раз закрытая. В боте уже доступна.

Амазоновская Nova Pro тоже теперь есть в лидерборде, но с ней всё не очень хорошо.

Старший Авгур

15 Dec, 22:41


Мне недавно скинули одну модельку на оценку, и она оказалась очень хорошей.

Модель: https://huggingface.co/Moraliane/SAINEMO-reMIX

Это мёрж Сайги, Вихря и пары английских RP моделей. Получилось не так шизово и многословно, как оригинальная v3 Сайга, но всё ещё очень интересно.

В боте будет доступна завтра, когда в gptq 8bit переквантую, чтобы подешевле инферить.

Старший Авгур

11 Dec, 11:58


Спасибо qwen oss за продвижение русских моделей вперёд!

Старший Авгур

11 Dec, 08:38


В ПингПонге и в боте всё уже есть. Для своих размеров норм.

Старший Авгур

11 Dec, 08:37


Большой день.
Мы выкладываем в опенсорс наши модели T-Lite и T-Pro. И эти модели просто топ 🥳

Мы увереннно выбиваем #1 среди открытых моделей по разным бенчам на русском. По MERA мы взяли #2 модель на русском ещё и включая все API, уступая только GPT-4o.

Это до-тренированный qwen-2.5 в размерах 7B и 32B. Мы провели большую работу: свой токенизатор, глубокое до-обучение на русский и специфичные корпуса. Аккуратная работа с данными. Тех репорты будут.

Этот релиз является подтверждением нашего подхода в LLM: допретрен на базе опенсорса и затем файнтюн под доменные области. Получается значительно лучше результат и мы тратим на порядок меньше денег (не преувеличение).

Пользуйтесь. Модели для инженеров, рекомендуется дальнейший файнтюн, например через наш Turbo-Alignment.

Наш новый HF: https://huggingface.co/t-tech
Лидерборд по MERA: https://mera.a-ai.ru/ru/leaderboard
Остальные бенчи тоже есть, арены будут как прокрасятся

Старший Авгур

04 Dec, 21:43


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

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

Но наши собственные ревьюеры, конечно, так не считали: ответом на наши собственные старания в ребаттле было в основном молчание.

Один ревьюер попросил сделать ещё один дополнительный эксперимент, а когда мы его сделали, никак это не прокомментировал и умолк навсегда. Другой в последний момент дискуссии ответил что-то похожее на генерацию LLMки, где было сказано, какие мы молодцы, но оценки не поднял. Двое остальных просто не реагировали, как будто умерли.

Когда соавтор решил написать об этой проблеме Area chair и senior area chair, они тоже ответили молчанием.

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

#наука #о_себе

Старший Авгур

30 Nov, 16:27


Learned Embedding Propagation (LEP) + анонс релиза RuadaptQwQ-32B

Расскажу немного подробнее про идею, которая стоит за текущими версиями Ruadapt моделей. Наше предыдущее решение требовало после адаптации базовых версий моделей дополнительно их дообучать по сути с “базы”, из-за чего терялись многие успешные инструктивные версии моделей, которые нельзя просто взять и воспроизвести из-за отсутствия обучающих данных (те же 10 миллионов инструкций LLaMa-3 не были открыты комьюнити). Другим ярким примером может послужить недавняя Qwen/QwQ-32B-Preview, так как не понятно как ее учили и на каких данных.

Тут то на помощь и приходит предложенный нами метод Learned Embedding Propagation (LEP). Идея метода состоит из 3 шагов:
1. На первом шаге мы также адаптируем исходную базовую модель
2 . На втором шаге мы рассчитываем проекцию из исходной базы в целевую исходную инструктивную версию (например, из Qwen/Qwen2.5-32B 🔜 Qwen/Qwen2.5-32B-Instruct)
3. На третьем шаге мы применяем данную проекцию 🔜на Ruadapt версию базы!
4. На самом деле есть еще 4-й шаг, по сути очень важный, это шаг калибровки / дообучения, но он “опционален”

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

А теперь обращу внимание вот на что.

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

И вот возьмем, недавно вышедшую Qwen/QwQ-32B-Preview, несмотря на то, что мы вообще не знаем как и на чем она обучалась, мы знаем, что ее базой является, Qwen/Qwen2.5-32B, поэтому мы легко можем сделать версию RuadaptQwQ-32B-Preview-LEP. С шагом 4 тут посложнее, так как хороших данных для подобного типа моделей я пока что не видел. На текущий момент предлагаю попробовать RuadaptQwQ-32B-Preview-LEP в поднятом Space (https://huggingface.co/spaces/RefalMachine/RuadaptQwen2.5), но обращаю внимание, это модель сразу после LEP, без дополнительных шагов дообучения, да и тестирования особо никакого с этой моделью пока не производилось.

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

Старший Авгур

29 Nov, 10:34


Trust or Escalate: LLM Judges with Provable Guarantees for Human Agreement
Статья: https://arxiv.org/abs/2407.18370
Рецензии: https://openreview.net/forum?id=UHPnqSTBPO

Попарные оценки языковыми моделями с теоретическими гарантиями согласованности с людьми 😐

Что за теоретические гарантии? Предположим, что мы задаём уровень риска α и хотим, чтобы для примера x вероятность согласованности языковой модели с людьми на этом примере была больше 1 - α, при условии, что этот мы вообще оцениваем этот пример. Последняя фраза тут очень важна — очевидно, что есть примеры, на которых даже у людей очень низкая согласованность, и такие примеры мы хотим каким-то образом определять и не учитывать их в оценке. Теперь для каждого метода оценки у нас есть 2 чиселки: непосредственно согласованность с людьми, а ещё и покрытие, то есть доля примеров, которые мы не откинули в процессе оценки.

🔹Few-shot ансамблирование
Для начала нам нужно понять, а как вообще отсеивать примеры, которые мы не хотим оценивать? Для этого мы можем попросить модель каким-то образом вывести уверенность в своей оценке. Исходя из этой уверенности и маленького калибровочного набора данных, можно вывести минимальную уверенность для заданного α, ниже которой мы должны откидывать примеры.

Есть разные методы оценки уверенности модели, например можно взять прямую вероятность генерации ответа, или можно попросить модель явно выдавать уверенность текстом. Авторы считают точность, ROC AUC и другие метрики классификации для этих вариантов и показывают, что они жёстко переоценивают уверенность модели. Поэтому предлагается ансамблировать несколько few-shot ответов модели с разными наборами примеров в контексте. Авторы показывают, что такая уверенность лучше откалибрована, а значит позволяет отсеивать меньше примеров.

🔹Каскады
Второй шаг ещё интереснее: дело в том, что слабые модели тоже неплохо откалиброваны. А значит можно сначала прогнать примеры через дешёвые модели с высокой границей уверенности. Если они прошли фильтр — шикарно, используем дешёвую модель для оценки. Если нет — переходим к более дорогой модели. Полностью откидываем пример только тогда, когда все модели не уверены.

🔹Эмпирические оценки
А дальше оказывается, что это всё очень хорошо бьётся с эмпирической согласованностью. То есть теоретическая оценка согласованности действительно является оценкой снизу на практике. Кроме того, авторы показывают, что выкинутые примеры дейсвительно были бы выкинуты по несогласованности людей.

Итого мы получаем:
1) чёткую схему оценки
2) с теоретическими гарантиями согласованности
3) с эмпирической согласованностью выше, чем у GPT-4 💪
3) с инференсом в 2-5 раз дешевле, чем у GPT-4 😺

P.S. Гитхаб пустой, но весь код можно найти в доп. материалах на OpenReview 😁

Старший Авгур

28 Nov, 22:31


Кстати, смотрите кто в топ-15 по оценкам на ICLR: https://arxiv.org/abs/2407.01082
А знаете, кто в Acknowledgements?

Старший Авгур

28 Nov, 22:00


Наличие выбросов в активациях извествено с LLM.int8(), bitsandbytes квантования уже работают с учётом этого.
Статья же выше логически продолжает эту же линию, находя прям очень маленький набор весов.

Старший Авгур

28 Nov, 21:57


The Super Weight in Large Language Models
Mengxia Yu, De Wang, Qi Shan, Colorado Reed, Alvin Wan
Статья: https://arxiv.org/abs/2411.07191
Код: https://github.com/mengxiayu/LLMSuperWeight

Очень прикольная работа про то, что внутри LLM можно найти один единственный вес, зануляя который мы обрушиваем качество работы модели в пропасть. Такие параметры авторы называют супер весами (super weights) и предлагают метод их нахождения за один forward pass.

Внутри обученных LLM находится группа весов-аутлаеров с большой магнитудой, они могут составлять порядка 0.01% от всех весов модели, что в случае миллиардных моделей всё равно сотни тысяч. Это было известно ранее. В текущей работе показывают, что внутри этой группы находится один единственный вес (тот самый super weight, SW), не обязательно самый большой, важность которого превышает суммарную важность тысяч других аутлаеров. Он необходим для качества, без него LLM не может генерить нормальный текст. Перплексия вырастает на несколько порядков, а точность на zero-shot задачах падает до рандома.

Ранее (https://arxiv.org/abs/2402.17762) были найдены супер-активации, критичные для качества. Они существуют в различных слоях, имеют константную магнитуду и всегда обнаруживаются в одинаковой позиции несмотря на вход. Текущая работа находит, что канал активации совпадает с оным для супер веса и сперва активация обнаруживается сразу после супер веса. Прунинг этого супер веса значительно уменьшает активацию, так что вероятно активация вызвана им, а не просто скоррелирована. Такие активации называются супер активациями (super activations, SA).

Предыдущая работа объясняла супер активации через bias terms, но не объясняла как они получаются и почему на одних и тех же местах. Сейчас авторы эмпирически нашли, что до down проекции (down_proj) произведение Адамара (Hadamard product) gate и up проекций (gate_proj, up_proj) создаёт относительно большую активацию. Супер вес далее усиливает её ещё и даёт супер активацию.

Напомню, что MLP блок в Ламе выглядит так:

out = down_proj( act_fn(gate_proj(input)) x up_proj(input) )

SW можно найти, анализируя спайки в распределениях входов и выходов down_proj. Для этого достаточен прямой проход с одним промптом. Авторы нашли супер веса для Llama (7B,13B,30B), Llama 2 (7B,13B), Mistral-7B, OLMo (1B,7B), Phi-3.

Провели эксперименты по обнулению SW, в том числе с восстановлением SA до исходного значения, чтобы проверить влияние SW на другие активации. Это восстанавливает 42% потери, то есть влияние SW на качество выше, чем просто через SA.

По анализу 500 различных промптов из Lambaba validation set видно, что при убирании SW вероятности стоп-слов сильно возрастают (а обычные слова соответственно занижаются). Для “the” это 2×, для “.” -- 5×, и для “,” -- 10×. То есть наличие SW как бы подавляет стоп-слова и позволяет генерировать осмысленный текст.

Другой интересный эксперимент скейлит супер веса с коэффициентами от 0 до 3 (где оригинальный режим работы соответствует значению 1) и оказывается, что при увеличении SW качество модели ещё немного возрастает. Это забавный результат.

Имея это знание, можно предложить специальный метод квантования: Super-outlier aware quantization. Стандартные механизмы квантизации могут быть недостаточно хорошими, так как аутлаеры искажают распределение, влияя на размер шага и увеличивая ошибки квантования. Здесь под super outliers подразумеваются и SW, и SA. Предложенные методы восстанавливают SW и SA после квантований с клиппингом и заменами на медианное значение. Это всё работает лучше дефолтных методов, главный вывод -- надо защищать супер веса. В статье есть подробный разбор экспериментов, кому интересно поглубже. Также новый метод меньше теряет в качестве с увеличением размера блока.

Прикольный результат в общем. Это всё несколько перекликается с темой про лотерейные билеты (https://t.me/gonzo_ML/21), там внутри большой сети обнаруживалась сильно разреженная подсеть, обучая которую можно было достигать качества исходной сети (или даже выше). Интересно, входят ли супер-веса в лотерейный билет? Наверняка.

Старший Авгур

26 Nov, 13:27


Сегодня последний день исправлений посылок на ICLR.

Я исправил всё, что обещал, в статье про ПингПонг:
- Значительно пределано введение и литература: докинуты ссылки и всё стало более базировано 😐
- 5 разметчиков везде, добавлены таблички их согласованности и подробности процесса разметки. Метрики моделек от этого не сильно поменялись, что очень хорошо.
- В сам лидерборд добавлен селектор с весами метрик. Когда-нибудь я соберусь и всю агрегацию данных сделаю на фронте... Но только не сегодня.
- Докинул сравнение с другим RP бенчмарком, RPBench-Auto.
- Добавил фрагмент текста про тюны на книжках, которые положительно влияют на RP метрики.
- Перефигачил все дополнения: примеры и промпты теперь в красивых синеньких рамках.
- Сделал тематический анализ RP датасета от Chai, по которому оценил, наксколько текущие ситуации репрезентативны.
- Ответил на все-все комментарии рецензентов.

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

Старший Авгур

21 Nov, 19:50


Пресс-релиз не соврал.

Старший Авгур

18 Nov, 16:12


😳
Лучше v1 при меньшей длине ответов, на ПингПонге тоже вполне сносно. Выложу как v3.

Что поменялось:
- Я исправил шаблон промпта, убрал лишние пробелы. Теперь он почти такой же, как у оригинального Немо, за исключением системного сообщения. Основная проблема была в том, что в SFT пробел перед ответом был, а в SimPO не было.
- Использовал чистый SimPO сет, только те пары, на которых Sonnet и GPT-4o сошлись во мнении.

Достоевского доливать не буду, он хоть и улучшает RP, в остальных кейсах становится серьёзно хуже, модель легче сломать.

Старший Авгур

17 Nov, 23:24


Тем временем ответил на все рецензии и сделал инстансы для разметки английских диалогов 😵
Сама разметка оказалась гораздо более простым процессом, чем мне представлялось. До этого я всю жизнь пользовался Толокой (и sandbox её версией), переход на LabelStudio оказался не таким уж и сложным. Там одинаковая логика html-like шаблонов заданий, так что мои экспертные знания менеджера по разметке пригодились 😂
Ещё чуть экспериментировал с модельками для стихов, ничего хорошего пока не вышло.
Плюс был вынужден поставить фильтр на ответы Сайги в чатах при затрагивании определенной тематики (см. КоАП 6.21).

Старший Авгур

17 Nov, 13:14


Хорошая новость! Я уже получил полную разметку диалогов на русском от 3 людей, вместе с моей оригинальной это уже 4 разметчика. Я усреднил наши ответы, и посчитал корреляцию Спирмена с ответами ансамбля моделей. Она упала, но не принципиально: 0.669 -> 0.653. Так что как будто бы основные выводы статьи не изменятся.

Старший Авгур

16 Nov, 18:19


Пяти людям выдал проекты. Всем, кто отправлял заявки — спасибо! Вполне может понадобится больше людей, плюс впереди ещё английские диалоги, и может быть вам я напишу чуть позже.

А пока я расскажу, как именно устроен проект. Есть бесплатная и платная версия LabelStudio. Основное ограничение бесплатной версии — нет разделения юзеров по правам, у всех админский доступ. То есть никакие серьёзные проекты так делать нельзя.

В минимальной платной версии вы платите 99$ в месяц + 50$ за каждого юзера. Что ОЧЕНЬ дорого для такого маленького проекта.

Какой я нашёл выход: для каждого разметчика существует отдельный бесплатный инстанс LabelStudio с отдельной базой данных. Они все запущены на одной машине, но хранят данные в разных папочках и работают через разные порты. Поверх всего этого есть reverse proxy: Ngrok, который всё это дело светит в Интернет и перенаправляет запросы в разные инстансы.

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

Старший Авгур

16 Nov, 16:55


Теперь по поводу разметки. Я поднял пару инстансов LabelStudio и готов туда кого-нибудь пустить.
Там всего 265 диалогов на русском, для каждого из которых нужно ответить на 3 вопроса. Общий объём работы я оцениваю в 2 часа, готов за неё заплатить 3к рублей каждому человеку. Всего мне нужно 5 разметчиков.

Деньги могу перевести внутри России, по номеру карточки или номеру телефона.

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

Форма заявки: https://forms.gle/iPu8YMvpKaEV7hDx8

Если с заявкой всё ок, я напишу в личку и расскажу детали. Не обижайтесь, если не отвечу: что-то мне подсказывает, что заявок будет больше, чем 5.

Старший Авгур

16 Nov, 12:52


Наконец-то дошёл до рецензий на ПингПонг, вот основные проблемы с точки зрения рецензентов:

1) Только один разметчик, я. Очевидная проблема, и для её правильного исправления мне как раз и понадобится ваша (небесплатная) помощь. Про это будет отдельный пост. Сюда же можно отнести недостаточную прозрачность по инструкциям разметки и составу разметчиков.

2) Недостаточность сравнения с другими бенчмарками. Необходимость сравнения с Creative writing недостаточно обоснована, плюс вроде как есть одноходовые бенчи, с которыми можно сравниться. С этим согласен, попробую найти ещё варианты.

3) Метрики слишком субъективны. И вообще, их мало. С этим не очень согласен, тут ничего менять не буду, попробую просто ответить.

4) Нет возможности перевзвесить финальную метрику в зависимости от того, какой именно аспект интересен. Вот это прикольно и вполне реализуемо, сделаю.

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

6) Недостаточная дифференциация моделей. Проблема есть, имхо решается промптингом, но тогда нужно делать v3 и пересчитывать все модели, я пока на такое не готов.

7) Нет примеров пользы от бенчмарка. Тут я просто добавлю историю про Гутенберг.

Кроме этого, один из рецензентов докопался до текста в куче мест, и не везде за дело: часть поправлю, на часть просто отвечу.

И наконец, один из рецензентов такой "ну обычная симуляция юзеров, ничего нового, разве что на этот раз в RP, it's a minor increment". Мало того, он написал что видел такое в "нескольких других статьях", не уточнив, в каких блин именно! И такие типы рецензий меня бесят больше всего. Чел, 99.9% статей — это minor increment, и если бы ты хотя бы привёл примеры, я бы тебе по фактам расписал, в чём новизна.

В целом, после внимательного прочтения оказалось, что всё не так плохо.

Старший Авгур

13 Nov, 22:49


В продолжении наших экспериментов с адаптацией Qwen-2.5 моделей мы выпускаем RuadaptQwen-2.5-32B-Instruct (v1)! Вероятно самая большая открытая модель на данный момент, адаптированная на русский язык (в частности у нее один из наилучших токенайзеров среди открытых моделей для русского языка).

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

Ссылка на модель:
https://huggingface.co/msu-rcc-lair/RuadaptQwen-32B-instruct

GGUF версия:
https://huggingface.co/msu-rcc-lair/RuadaptQwen2.5-32B-instruct-GGUF

Попробовать можно тут:
https://huggingface.co/spaces/RefalMachine/RuadaptQwen2.5

Будем рады фидбеку по достоинствам и недостатком модели.

Старший Авгур

13 Nov, 09:27


Ревью на ICLR вышли. В том числе на ПингПонг.

Итог: 633353 с уверенностью 443434.

Первые цифры означают итоговую оценку. 3 = отказ, 5 = чуть хуже принятия, 6 = чуть лучше принятия. В уверенности: 4 = сильно уверен, но не прям до конца, 3 = уверен, но может ошибаться. Итоговый средний балл = 3.83, что лучше всего 20% сабмитов. Статистику можно посмотреть тут.

Такие оценки примерно означают, что даже после оспаривания и доработок шанс реджекта примерно 99.(9)%.

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

Старший Авгур

11 Nov, 14:59


Почему-то задачи на ML design собеседованиях в корпорациях у меня всегда абсолютно одинаковые. Всегда нужно построить систему для рекомендации X. В качестве X на текущий момент выступали:

- Товары (как на маркетплейсах)
- Друзья в соцсети (как в VK)
- Города/отели для посещения (как в Букинге)
- Видео (как в TikTok)
- Песни (как в Spotify)

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

Старший Авгур

11 Nov, 08:13


Начинаем рабочую неделю с часовой лекции Sasha Rush (Associate Professor @ Cornell University, Researcher @ HuggingFace 🤗) под названием «Speculations on Test-Time Scaling» (спекуляции по поводу того, как работает модель OpenAI o1). Презентация техническая, содержит большое количество ссылок на разные работы для самостоятельного изучения.

Разбирать я её не буду, так как тем, кому интересно разобраться в деталях и предпосылках o1, лучше смотреть саму лекцию. А тем, кому не интересно — им и не интересно 🧠Лишь отмечу, что Sasha рассматривает несколько направлений исследований касательно цепочек рассуждений, и для каждой указывает, почему и чем это отличается от o1 — и по итогу ни одна идея полноценно под всё не подходит(

Смотреть на YouTube
PDF со слайдами
Репозиторий со ссылками на все упомянутые статьи

Это мы смотрим 🍿

Старший Авгур

08 Nov, 22:16


What Matters for Model Merging at Scale?
Статья: https://arxiv.org/abs/2410.03617

Статья про слияние моделей. Основные пять выводов написаны сразу в абстракте:
1. Учить экспертов надо поверх инстрактов, а не базовых моделей.
2. Чем больше модель, тем лучше работает слияние.
3. Если учить на N разных задач и сливать, то генерализация (= качество на отложенных задачах) лучше, чем если учить одну модель на общем наборе данных.
4. Чем больше модель, тем больше разных экспертов можно вливать.
5. Чем больше моделей и экспертов, тем больше пофиг на выбор конкретного метод слияния.

Что вообще за слияние? Самый простой вариант — усреднение весов. То есть мы берём две разных модели (желательно от одного предка), считаем какую-то функцию от их весов, и получаем одну модель той же архитектуры. Конкретных функций бывает много, кроме усреднения см. Task Arithmetic, TIES, DARE.

Все эксперименты проводятся на разных вариантах PaLM-2, гугловой проприетарной модели. Всего есть N задач, для каждой из них делается отдельный тюн. Задачи берут из T0. Их делят на две категории: held-in и held-out. Тюнят модели на held-in, полностью, без Лоры.

Результаты 1 и 4 как по мне довольно очевидны, поэтому сосредоточимся на 2, 3 и 5. Третий результат особенно интересен, потому что он очень сильный: можно просто обучить 8 моделей на разные задачи, и итоговая модель не только будет хороша в этих задачах, но и станет в целом лучше (= качество на отложенных задачах станет выше) 😱

Бейзлайн: версии модели, обученные сразу на всех задачах. 24B модель, смёрженная из 8 экспертов, работает на уровне бейзлайна, 64B модель — значимо его превосходит. При обучении поверх базовой модели (вместо инстракта) ситуация не такая радужная, но всё равно неплохая. Второй результат про то же, но на held-in задачах. Там для 8 экспертов у 64B итоговое качество около 90% от бейзлайна, и чем меньше модель — тем хуже.

Что же касается последнего результата, он просто очень приятный. Для больших моделей вообще не очень важно, как именно сливать, получается одно и то же с точки зрения качества ☺️

Самое крутое в слиянии — возможность переиспользовать кучи GPU часов других людей. Мне в статье не хватило разве что исследований того, насколько хорошо сливаются модели разных форматов промптов. В остальном — это очень хороший повод всё это активнее применять.

Старший Авгур

07 Nov, 22:10


Выложил v2 версию Сайги Немо. Основных изменений 3:
- Я убрал 80+ примеров из SFT, в которых использовались системные промпты персонажей из ПингПонга. На это мне указали ребята из @gigadev_channel. Эти промпты появились там до ПингПонга из логов бота, собственно сам лидерборд я собирал на их основе. Это может считаться утечкой, поэтому они убраны из обучения.
- В SimPO датасете я агрессивнее порезал длину и увеличил вес SFT лосса, чтобы укоротить ответы и уменьшить количество выдуманных слов.
- Дотюнил на Достоевском и смёржил ровно так, как я делал для Вихря.

На ПингПонге стало лучше, на арене пока нет результатов.

Если кому-то захочется остаться на v1, везде можно указать ревизию, они есть в карточке модели.

GGUF'ы будут завтра.

Старший Авгур

03 Nov, 13:44


Затраты и доходы по боту за октябрь. Есть ещё копеечки, потраченные на Runpod и OpenRouter, но там немного.

o1-preview для людей без подписки я убираю, сама подписка становится дороже.

Старший Авгур

02 Nov, 22:30


А ещё у нас новый лидер на дне нашего стакана с проприетарными русскими моделями!

Старший Авгур

02 Nov, 22:24


На всякий слачай уточню: в v7 тюне Лламы 3 я был прям уверен, он был со всех сторон хороший.
Эта модель гораздо лучше того тюна, но и у меня тоже поднялись ожидания.
Всего было около 20 итераций, и в итоге ни одна меня не устроила. Этот релиз — это мой компромисс с собой. Я просто выбрал лучший вариант из всех итераций, и в итоге его и релизнул.
В целом, делать эту модель было не очень дорого. Порядок величин — около 1к$ на всё: разметка данных, железо, оценка. Самым дорогим было оценивать модель на арене с gpt-4, больше я так делать не буду.

Старший Авгур

02 Nov, 21:31


Ура, релиз Сайги Немо!

Модель: https://huggingface.co/IlyaGusev/saiga_nemo_12b
Уже доступна в боте.
GGUF завтра подвезу.

По метрикам: 85 на РуАрене, что чуть хуже 87 у Вихря. Примеры из тест-сета я не использовал. И 3 место на ПингПонге.

Пайплайн абсолютно классический: SFT + SimPO. Датасеты, конфиги обучения, W&B логи лежат в карточке модели.

Уникальная фича модели — расцензурированность и ориентация на role-play. Обучал я её поверх abliterated версии Немо, и из и SFT, и SimPO датасетов агрессивно вычищал отказы. В оба датасета доливал role-play промпты, но не с теми персонажами, которые есть в ПингПонге.

Я поштырил и в RP диалоги, и в ответы на арене, и увидел несколько проблем:
1) Модель не умеет рисовать ASCII.
2) В 2 примерах я наблюдал повторы. Это было там, где нужно было написать пример кода, а в нём был какой-нибудь токен. И вот этот токен генерировался бесконечно. Эта проблема специфична для нулевой температуры.
3) Длина. Хоть я и пытался бороться с слишком длинными ответами, по бенчам видно, что ответы всё равно длиннее среднего.
4) Очень изредка попадются выдуманные слова. Причём они вполне разумны, просто их не существует.

Старший Авгур

31 Oct, 17:58


https://openai.com/index/introducing-chatgpt-search/

OpenAI выкатили поиск. С продуктовой точки зрения ничего нового, да и был уже поиск в ChatGPT, но сейчас это наконец сделано довольно хорошо.
Во-первых, это быстро. Раньше это у них работало чуть ли не по 2 минуты, сейчас — пара сотен миллисекунд.
Во-вторых, это красиво. Остались гиперссылки, у параграфов есть истонички в конце, и финальный список источников в самом конце. Плюс разные виджеты: карты, погода, новости.

Всё то же самое, что было и есть в той же Перплексии.

Минут за 15 общения модель примерно раз 10 выдавала галлюцинации на серьёзных щах, и запросы так себе формировала. С точки зрения качества поиска ничего хорошего.

Короче, OpenAI просто закрыли нишу и подавили конкурентов.

Старший Авгур

28 Oct, 22:12


🎆 Небольшая лекция об Alignment и как мы его готовим

Это слайды с текстом, пока устно ее я рассказывал только внутри команды Vikhr.

Внутри вы узнаете:
- Теория Bradley-Terry и откуда берутся Reward модели
- Что нужно для обучения Reward модели и как его делаем мы
- Откуда взялся DPO и каковы его недостатки
- Какова мотивация нас и других авторов улучшать DPO
- Как устроен наш функционал SMPO - Simple Margin Preference Optimization
- Какие есть способы улучшения DPO на уровне данных и как готовим эти данные мы

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

Старший Авгур

27 Oct, 09:43


Зато друг друга они стоят... Диалоги тут.

Тут три момента:
- Во-первых, модели явно не учились отыгрывать роли. Почему Клод и GPT-4 учились, а эти нет — загадка.
- Во-вторых, с точки зрения языка всё действительно неплохо.
- В-третьих, в качестве судей выступают gpt-4o и Соннет, что вносит некоторое смещение оценок не в пользу русских моделей. Это же касается автоматических арен.

А вот если учесть цену, то всё это полная жесть. gpt-4o-mini стоит 30 центов за 1M токенов. Гигачат Про стоит 1500 рублей за 1M токенов, примерно в 50 раз дороже. YandexGPT Pro стоит примерно 10$ за 1M токенов, примерно в 30 раз дороже.

И даже если сравнивать с gpt-4o (до которой как до луны), то та всё равно дешевле!

Старший Авгур

26 Oct, 22:38


Мммм, 35 место. Но так-то серьёзный скачок с 46. В комментах скриншоты с артефактами. Посмотреть диалоги можно тут.

UPD: С другой стороны, я бы ещё обратил внимание на language fluency, по нему она так-то делит первое место ещё с 3 модельками.

Старший Авгур

25 Oct, 15:12


Горький урок ABBYY: как лингвисты проиграли последнюю битву за NLP 

Недавно СМИ облетела новость об увольнении всех российских программистов из компании ABBYY (тоже в прошлом российской, а теперь уже совсем нет). Теперь, когда страсти вокруг обсуждения дискриминации сотрудников по паспорту улеглись, хочется поговорить о более глубокой истории. Закат ABBYY — это фиксация проигрыша последней битвы лингвистов за автоматическую обработку языка. Мир Data Science победил. Главный редактор «Системного Блока» Даниил Скоринкин, работавший ABBYY в 2013–2017, подводит итоги и пытается сформулировать уроки из этой истории.

Что за ABBYY и при чем тут лингвисты и NLP?

История ABBYY началась в 1989 году, когда студент МФТИ Давид Ян решил сделать электронный словарь для подготовки к экзамену. Так появились Lingvo, а затем — система распознавания символов FineReader. Продукты ABBYY развивались, и компания стала глобальным лидером оптического распознавания в 1990-е и 2000-е. Затем ABBYY двинулась покорять машинный перевод. 
На вооружение они взяли идеи известных лингвистов — в первую очередь Модели «Смысл ⇔ Текст» (прочитать о ней можно в нашем интервью с И. А. Мельчуком). Амбиция была в том, чтобы разобрать человеческие языки как формальные структуры на базе семантической иерархии. Но естественный язык устроен противоречиво и постоянно изменяется, подход оказался негибким и немасштабируемым

Что пошло не так?

В 2006-м появилась первая версия Google Translate. Она была несовершенной, но главное, что в ней был другой — статистический — подход. И масштабируемость. Для её улучшения не нужны были сотни лингвистов, только еще больше примеров перевода. В 2010-х стало ясно, что никаких шансов тягаться с Google Translate у ABBYY не было. С перевода ABBYY переключилась на задачи информационного поиска и извлечения информации из текста, но и там столкнулась с теми же проблемами: описания языка на базе лингвистической теории оказались немасштабируемыми, а решения уступали подходам на основе чистого машинного обучения. 

C новой проблемой компания столкнулась весной 2022 – им пришлось выехать из России, чтобы сохранить зарубежных клиентов. Следующим ударом стали большие языковые модели, который научились лучше и быстрее выполнять те же задачи, что и классические системы распознавания от ABBYY. Сейчас от компании осталась только вывеска, действующие продукты и небольшое количество менеджеров и специалистов по продажам.

Какие уроки мы извлекаем?


За 70 лет исследований ИИ стало ясно, что самые общие методы, опирающиеся на масштабирование вычислений, намного эффективнее всех остальных. А желание ABBYY сделать универсальную NLP-систему с опорой на лингвистическую теорию оказалось утопией. 

И всё-таки ABBYY успела сделать много важного: открывала кафедры на Физтехе и в РГГУ, оцифровывала наследия Льва Толстого и архива Большого театра. А еще благодаря ей появился «Системный Блокъ», ведь сооснователи издания познакомились именно там. И именно там вы сможете прочитать полную версию поста с мемами и более детальным описанием цифровой «Вавилонской башни», которую пыталась строить ABBYY.

🤖 «Системный Блокъ» @sysblok

Старший Авгур

25 Oct, 11:18


Ларчик с Вихрём Немо просто открывался. Рецепт оказался прост: трейн на тесте.
Я недавно случайно обнаружил, что в GrandMaster-PRO-MAX лежит около 180 промптов и ответов на них из ru_arena_general. А их там всего 500, то есть больше трети примеров из тестов слиты в обучающую выборку. Вполне возможно, что это сделано не только в SFT, но и в SMPO фазе.

Код для проверки:

from datasets import load_dataset

examples = dict()
for row in load_dataset("Vikhrmodels/ru-arena-general", split="train"):
examples[row["turns"][0]["content"]] = 0

for row in load_dataset("Vikhrmodels/GrandMaster-PRO-MAX", split="train"):
ex = row["conversation"][0]["content"]
if ex in examples:
examples[ex] = 1
print(sum(examples.values()))


Я решил поэкспериментировать и сделал то же самое в SFT. Получил +6 пунктов на арене. Справедливости ради, мне всё равно не удалось догнать Вихрь, но, вероятно, это решается доливом теста в SimPO.

Намеренно ли это было сделано? На 99% уверен, что нет.
Делает ли это Вихрь Немо плохой моделью? Тоже нет.
Но хорошо бы это увидеть в карточке модели, да и с арены модель убрать.

UPD: карточку обновили, там об этом теперь написано

Старший Авгур

25 Oct, 07:53


А вот это удивительно, не ожидал я такого от коробочной Айи. 8b модель тоже лучшая в своём весе для русского.

Старший Авгур

22 Oct, 20:51


Я и не сомневался. Что прикольно — сильно уменьшилась доля отказов.

Старший Авгур

22 Oct, 18:40


еще одна новость вышла пока я ужинал и болтал

Старший Авгур

19 Oct, 22:58


Догоняние Вихря... затянулось.

Модель явно перестала быть дерьмом после фикса системного сообщения, но подняться выше 74 на арене пока не получилось. Зато на ПингПонге она на второй позиции, сразу после Соннета, что лучше, чем Вихрь. Завтра буду добавлять on-policy side-by-side разметку, до этого момента модель училась только на парах из других моделей. Ну то есть сейчас я насэмплировал по 3 предсказания из SFT версии, по 3 предсказания из SimPO версии, и теперь попарно буду их сравнивать. Промпты использовал из текущего датаста (saiga_preferences). Итоговую разметку долью в обучающую выборку. Должно помочь.

Ещё я много чего понял про SimPO! У него есть два режима: в первом модель разносит, во втором модель ничего не выучивает. Стандартными способами регуляризации очень сложно находить баланс между ними. Единственное, что прямо хорошо сработало — добавление SFT лосса (в trl это означает cpo_alpha > 0). Вихрёвская версия SimPO это учитывает и вполне разумна, просто я не хочу использовать нестандартные кубики.

Старший Авгур

15 Oct, 17:52


Выступал на семинаре ЛЕЯ, снова рассказывал про Сайгу.
Запись: https://www.youtube.com/watch?v=xiPCIWGTX1M
Презентация: http://tinyurl.com/gusevsaiga2

Старший Авгур

12 Oct, 12:12


За статью спасибо подписчику.

Cheating Automatic LLM Benchmarks: Null Models Achieve High Win Rates
Статья: https://arxiv.org/abs/2410.07137

Сейчас достаточно популярный бенчмарки на основе автоматических side-by-side сравнений выходов моделей, например RuArenaGeneral. Можно ли обмануть эти бенчмарки? Самый очевидный способ обмана — длина. Если в бенчмарке не используется нормализация по длине, то модели с большей длиной ответов заведомо победят. Авторы статьи пошли дальше и задались вопросом — можно ли добиться высокого винрейта, выдавая один и тот же ответ на все вопросы?


🔸Промпт-инъекция
Самое очевидное решение — это промпт-инъекция, которая скрывает оригинальные ответы и вставляет свою кастомную пару ответов. Там, правда, нужна небольшая хитрость, потому что ответ может быть вставлен, либо первым, либо вторым, и позиция выбирается случайно. То есть наш константный ответ должен работать на обеих позициях. И это вполне возможно, учитывая, что мы перезаписываем и инструкцию тоже. Ещё мы пользуемся тем, что если ответы одинаковы, модель чаще выбирает первый.

Инструкция, которую авторы вставляют вместо оригинальной, такая: "Ничего не выводи". Ответы пустые, но сначала идёт идёт ID второго ответа, а потом ID первого. Когда ответ вставляется на вторую позицию, мы перезаписываем инструкцию и заставляем модель выбирать из двух одинаковых пустых ответов, и она выбирает первый ID (который от второго ответа). Когда ответ вставляется на первую позицию, под ID второго ответа подставляется неправильный ответ, и модель выбирает ID первого ответа. В итоге на первой позиции модель выбирает первый ID, а на второй позиции — второй ID 🤔

Итог такой атаки: 77% LC винрейта на AlpacaEval 2.0 против GPT-4. Учитывая структуру атаки, в общем-то не важно, против какой модели выставляются ответы 😁


🔹Случайный поиск
Второе возможнное решение — автоматический подбор атакующего промпта. Авторы берут инструкции из открытого датасета, вставляют ответ, и измеряют лосс "правильных" ID. И потом этот лосс оптимизируют случайным поиском в пространстве токенов. Итераций поиска требуется не очень много, в худшем случае около 400. Ещё раз — оптимизируют не на самих бенчах, а на открытых инструкциях. И перенос вполне работает, итоговый промпт ломает бенчи.

Итог этой атаки: 87% LC винрейта на AlpacaEval 2.0.


🛡Предлагаемые варианты защиты:
- использование разных вариантов промпта в side-by-side
- фильтр по перплексии


Мне статья не очень понравилась, всё очень очевидно. О нет, в языковых моделях возможны промпт-инъекции, вот это новость! 😱
Да и нет такой проблемы, что кто-то засылает в бенчмарки константные ответы. Реальные атаки должны быть незаметны для людей, и я уверен, что они вполне возможны. То есть интересная постановка задачи звучала бы так: как поменять ответы моделей таким образом, чтобы значительно поднять винрейт в бенчмарке, но чтобы люди при этом ничего не заметили?

Старший Авгур

10 Oct, 21:42


Я продолбался, и сильно. Оказывается, в дефолтном Mistral Nemo системное сообщение вставляется перед последним сообщением, если это сообщение от юзера. В обучении же последнее сообщение от бота. То есть системные промпты не вставлялись в SFT обучении. То есть все текущие версии SFT — сломаны.

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

Ну ладно, это хоть значит, что финальная модель должна стать гораздо лучше.

За скобками остается вопрос: а нафига вообще блин было нарушать стандарт? Во всех моделях, которые я до этого видел, системное сообщение было в начале.

Старший Авгур

10 Oct, 10:06


Почти там. Проблема в том, что в ПингПонге очевидно, что модель — дерьмовая.

Старший Авгур

07 Oct, 21:17


Когда не умеешь писать стихи, но надо строго следовать промпту...

Старший Авгур

07 Oct, 17:00


Если кого-то интересует, как там новая Сайга, то новая Сайга пока не очень. Есть ощущение, что на Немо просто нужно пролить несколько больше токенов, чем есть в текущем датасете.

На картинке результаты арены на текущих попытках. Это уже лучше всего, что у меня было до этого, но всё ещё хуже Вихря.

Какой план:
- Добить SFT до 55 перебором параметров и доливкой данных в датасет. Начну я с чистки новых логов бота (аж 4к диалогов) и стыривания system_chat части GrandMaster-PRO-MAX.
- SimPO работает уже офигительно, а там пока была только одна попытка. Имхо, вращение гаммы и беты может вполне докинуть до 5 пунктов.

Старший Авгур

07 Oct, 09:27


Ну что, сработала техника, получается. А нужен был всего лишь простой советский перевод Агаты Кристи.

Сайга пока догоняет, поэтому в качестве основы я взял Вихрь-Немо.

Аналогично оригинальному Ataraxy, дообучил модель через ORPO на датасете, описанном выше, и слил получившийся тюн с оригиналом. Внезапно получил +0.1 на ПингПонге. На арене стало чуть хуже, 77 у новой модели vs 80 у оригинала.

Сама модель: vikhr_nemo_orpo_dostoevsky_12b_slerp
В боте она тоже есть.

Старший Авгур

02 Oct, 19:59


Помните историю про Гутенберг, датасет пар для обучения моделей писательству? Нашёлся-таки герой, который повторил его для русского, мой подписчик — Макс 👏

Вот сам датасет: https://huggingface.co/datasets/40umov/dostoevsky

Методология аналогична оригинальной. Напомню:
1) Берём книжки из общественного достояния.
2) Режем их на фрагменты.
3) Для каждого фрагмента автоматически генерируем промпт и выжимку.
4) Перегенерируем фрагменты языковой моделью.
5) Используем оригиналы как положительные примеры, а синтетические копии — как отрицательные.

Весь процесс был не особо автоматизированный, нарезка на фрагменты делалась вручную. Использованные книжки — на скриншоте.

Теперь дело за малым, нужно всего лишь обучить на этом модель 💪

Старший Авгур

02 Oct, 09:55


Долго ничего не писал, готовил ПингПонг к подаче на ICLR. Докинул циферок, поправил текст, сделал сравнение с Creative Writing. И наконец отправил, фух.

Ешё оказалось, что там теперь обязательно подаваться как рецензент для того, чтобы статью хотя бы допустили к ревью. Такую практику я в целом одобряю: любишь кататься, люби и саночки возить.

Так что я теперь возможно буду что-то там рецензировать.

Старший Авгур

26 Sep, 21:04


Накрылась прокси, которую я использовал, чтобы отображать Claude в OpenAI-like API. Я уже сплю, поэтому пока убрал эти модели из бота, завтра починю.

UPD: всё работает

Старший Авгур

26 Sep, 07:45


Залил Qwen 2.5 70B и Gemma-2 27B в ArenaHard. Я не сомневался, что они хороши, но каким-то загадочным образом Квен обошёл Соннет. У меня 2 версии:
1) GPT-4 не любит Клоды, а он там судья.
2) Бейзлайн (gpt-3.5) уже слишком плох и мешает различать хорошие модели.

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

Старший Авгур

25 Sep, 18:39


Welcome to the future motherfuckera

Release llama3.2