Сиолошная

@seeallochnaya


Канал SeeAll'а с новостями (и мыслями о них) из мира NLP, VR и космоса.

Более подробно смотри в первом сообщении в канале (оно закреплено). А еще у нас есть чат! Заходи: https://t.me/+i_XzLucdtRJlYWUy

Сиолошная (Russian)

Добро пожаловать на канал 'Сиолошная'! Здесь вы найдете самые свежие новости и мысли о них из мира NLP, VR и космоса. Мы увлечены исследованием самых передовых технологий и делаем все, чтобы быть в курсе последних событий. Если вас интересует развитие и инновации в области NLP, виртуальной реальности и космоса, то этот канал создан специально для вас! Подробную информацию о тематике канала вы найдете в первом закрепленном сообщении. А еще у нас есть чат, где вы сможете общаться с единомышленниками и делиться своими мыслями. Присоединяйтесь к нам прямо сейчас и не пропустите ни одной важной новости! Переходите по ссылке и начинайте общение: https://t.me/+i_XzLucdtRJlYWUy

Сиолошная

22 Oct, 08:41


Картинки!

1. Пример разбиения решения задачи на шаги (каждый выделен отдельным цветом). Авторы старались бить по строкам и по знаку равно (если выходило больше 100 символов в строке). Это очень похоже на шаги рассуждений у OpenAI o1 — они тоже били по строкам (это заметно в 7 официально опубликованных логах рассуждений). Каждый шаг — как ход в игре, если с ошибкой, то ведёт к неправильному ответу (=проигрышу).

2. Сравнение точности оценки (ось OY) состояния между нейронкой (верхняя строчка, желтый цвет) и через генерацию 9 решений. Истинные оценки (ось OX) здесь получены через генерацию 256 решений, что является достаточно точной оценкой (но каждый раз генерировать столько — дорого, поэтому авторы делают разово). 4 колонки — это разные шаги обучения, слева совсем начало, справа ближе к концу.

Ошибки двух методов существенно различаются. Оценки VinePPO не смещены, их дисперсия достигает пика при 0,5 и падает до нуля при 0 и 1. Нейронка из PPO часто ошибочно классифицирует плохие состояния (левая часть каждого квадратика) как хорошие и наоборот — что ведёт к плохой оценке «успешности» ходов.

3. Авторы идут дальше и считают точность предсказания состояния (определенная как попадание в интервал +-0.05 от 256 генераций), и тут видно, что уже в самом начале обучения такой подход VinePPO даёт оценки лучше, чем нейронка из PPO в конце обучения. Справа — как часто эти методы выбирают лучший «ход» из пяти предложенных продолжений. PPO даже к концу обучения еле-еле обходит случайный выбор (который попадает в 20% случаев)

4. Прирост качества от изменения K (количества генераций, использующихся для оценки во время обучения; чем больше, тем точнее оценка, и тем чётче сигнал для обучения, что плохо и что хорошо). Удивлён, что даже с K=1 работает хорошо (то есть каждое состояние оценивается как 0 или 1, решилась ли задача из этого шага или нет). Тут появляется ось масштабирования — можно тратить больше мощностей на генерации для оценки, чтобы делать её точнее, что приводит к улучшению финальной модели. Схожий график показывали OpenAI для o1, но я не уверен, что они масштабируют только это.

У авторов было только 8 GPU, вот если бы им дали побольше...увидели бы приросты посущественнее!

Сиолошная

22 Oct, 08:41


Вопрос на засыпку: почему мы обучаем отдельную нейронку для оценки состояний? И можно ли делать иначе?

Ответ: это делается потому, что во многих играх (откуда пошли методы) нет возможности фиксировать состояние и делать ходы вперёд-назад. Но при генерации текста решении задачи у нас такая возможность есть — всегда можно перепрогнать LLMку с новым промптом (или со старым), если они сохранены в памяти. А вот в шахматах и го, где такое тоже легко реализуется, вместо обучения сети используют оценку по методу Монте-Карло. Звучит сложно, а всё просто: ход делается виртуально, а затем из нового состояния играется несколько сотен-тысяч игр, и считается доля побед.

Чем больше игр играется, тем более точная оценка. И — тут мы наконец возвращаемся к статье, это всё была прелюдия — авторы говорят: давайте вторую нейронку, которая оценивает состояние, заменим на генерации LLM. Вот предложила она такой шаг в решении задачи — ок, фиксируем его. Затем подаём его на вход как часть решения и генерируем K оставшихся частей решения + ответов. Так как для каждой задачи ответ мы знаем, то можем посчитать долю правильных ответов прям у модели по ходу обучения.

И логика тут такая же — если в текущем шаге мы сделали ошибку (перепутали плюс и минус), то оставшаяся часть решения будет вести к неправильным ответам -> уменьшению Advantage. А если модель вспомнила теорему и правильно её применила, так, что там и решать нечего — то почти все решения будут правильным, и как следствие такое действие будет иметь большой Advantage (а поведение будет положительно закреплено).

В целом всё, это и есть основная идея, подменить нейронку для оценки состояний на честные генерации. Важно отметить, что при таком подходе экономится память (нужно держать одну сеть вместо двух, сеть-Оценщик удалили), но увеличиваем время итерации — ведь теперь для каждого шага нужно сделать много-много генераций (благо, LLMки научились разгонять). Авторы показывают, что для моделей размера 7B скорость итерации медленнее раза в два, но зато в пересчёте на реальное время качество выше (например, обучение за сутки приводит к большей точности ответов).

Сиолошная

22 Oct, 08:41


VinePPO: Unlocking RL Potential For LLM Reasoning Through Refined Credit Assignment

Давно лежало в загашнике, пора разобрать. Статья описывает метод обучения LLM для рассуждения в математических задачах, но в целом он применим хоть к чему, если соблюдается условие «есть однозначный правильный ответ» (например, программирование). Очень похоже по идее с o1, но думаю, что у OpenAI есть пара накруток сверху.

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

Сравнение с игрой не случайно, современные LLM учат теми же методами, что использовались уже 5-7 лет назад для обучения ботов игре в видеоигры. Работало это так: у вас есть текущее состояние, и вы можете предпринять несколько действий.

Состояниям и действиям можно давать оценку, лучше/хуже. Что такое оценка состояния? Это оценка того, насколько текущая позиция для вас выигрышная. Если смотрели шахматы, то там сбоку обычно показывается сила белых и чёрных, у кого больше шанс выиграть из текущего положения — вот это оно. Правда для сложных игр посчитать это сложнее, поэтому тренируют отдельную нейронку (да и для шахмат уже их используют).

Оценка действий строится немного иначе. Есть действия хуже и лучше (в контексте LLM действие может быть хуже, если, например, содержит ошибку в вычислениях). Но какая между ними разница? Можно сказать, что действие хуже если оно приведёт нас в менее выигрышное состояние, и лучше, если в более выигрышное. Если до того, как я сходил пешкой, у меня был шанс на победу 55%, а после него 60% — значит, я сделал прям супер-ход, победа почти в кармане.

Так вот, оценка действия называется Advantage (преимущество) и считается как разница оценок текущего состояния (до хода) и следующего состояния (после хода). В примере выше это 0.6-0.55 = 0.05. Много это или мало — не ясно, по хорошему нужно сравнить с другими ходами. Если остальные будут 0.01 или и вовсе негативные (то есть ведут к проигрышу а не победе) — тогда да, ход был классный.

А дальше алгоритм обучения (и для игр, и для LLM) очень простой:
— если ход дал прирост, то обучаем модель выдавать такой ответ при определенном состоянии чаще
— если ход привёл у уменьшению оцени состояния, то делает наоборот, уменьшаем вероятность генерации такого ответа

И всё это завязано на оценку состояния (напомню, оценка действия делается через оценку состояний). Но чем сложнее игра, тем сложнее точно оценить свою текущую ситуацию, особенно если разница между двумя ходами сыграет роль где-то через 50-100 ходов в будущем — нужно оооочень далеко вперёд смотреть. Уже давно были исследования, которые показывают, что нейронка, которая оценивает состояния, на самом деле работает очень неточно (и это буквально чудо, что оно работает и позволяет обучать ботов, хаха).

Сиолошная

21 Oct, 09:30


Дальше авторы проводят несколько экспериментов с обучением моделей LLAMA-3-8m и GPT-4o-mini и тестированием (на задачах, отличных от обучающих). Сэкономлю вам время и сразу перейду к выводам:

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

— более того, тренировка на задачах, где вовлечено N человек, также увеличивает качество в задачах с M участниками, не важно, больше ли M чем N или нет. То есть такое обучение позволяет делать цепочки рассуждений в решении более сложных задач надёжнее; они чаще приводят к правильным ответам. Детали для двух моделей смотрите на картинке — цифры означают прирост после обучения относительно положения дел до него.

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

TLDR: «Наши результаты раскрывают интригующую взаимосвязь между запоминанием и рассуждением: в то время как модели в значительной степени полагаются на запоминание для решения сложных головоломок, модели, обученные иметь более высокий уровень запоминания, также решают больше неизвестных им до этого головоломок и решают их относительно надежно (в отличие от заученных задач)»

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

Сиолошная

21 Oct, 09:30


Вот картинка с результатами моделей из коробки, с простым промптом, без примеров решений.

Самое левое — это точность разных LLM в зависимости от количества людей в задаче. Даже для двух участников лучшие протестированные модели не превосходят 70% качества (32% для 5 человек). Очень жаль, что нет моделей o1 от OpenAI :( Но они кажется тогда не вышли ещё.

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

Видно также, что лучшие модели имеют большой LiMem (больше 0.1, который авторы определили для себя как границу между запоминанием и рассуждением). На примерах с 2-3 людьми ОК, ну вдруг в интернете действительно было что-то очень похожее. Но вот там где у GPT-4o на 6-7 людях на средней картинке метрика 0.14-0.15 — вызывает у меня сомнение. Я думаю что крайне маловероятно, что значимая часть задач из 100 случайно сгенерированных авторами через ими же написанную программу на 6-7 людей(!) попадалась в интернете, и модели их видели. Или что кто-то в OpenAI / Anthropic занимался такой же вещью, и случайно написал такой же генератор задач.

И вообще исследователи подмечают, что судя по отставанию других моделей скорее всего текстов с такими задачами в интернете ОЧЕНЬ мало, и в тренировочные данные они не часто попадают.

Сиолошная

21 Oct, 09:30


Large Language Interpolators Can Learn Logical Reasoning: A Study on Knights and Knaves Puzzles

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

Авторы статьи пытаются исследовать этот вопрос предметно: они придумали задачу для исследования и метрику для оценки баланса запоминания <-> понимания в модели. Как такой баланс оценить? Давайте на примере: когда кто-то готовится к собеседованию или экзамену, то он может не полностью усвоить все основные принципы, зато вызубрить несколько задач. И когда человек сталкивается с одной из них, то сможет написать решение. А если внести какие-то изменения в одно из действий — то он поплывёт.

Две ключевых характеристики запоминания, исходя из этого примера, такие:
A) высокая точность на виданных ранее задачах
Б) низкая точность на новых очень похожих задачах (из-за недостатка понимания принципа решения)

Авторы придумали формулу, которая отражает обе черты. Сначала они считают точность на наборе задач — это Acc (от Accuracy). Затем в этих задачах они меняют одну минорную вещь, которая не влияет на сложность, но приводит к другому ответу, и смотрят на ответы. Метрика CR (Consistency Rating) — это доля задач, которые были решены правильно и до, и после изменения. Чем CR выше, тем лучше модель решает слегка изменённые задачи.

А формула такая: Acc * (1 — CR). Чем выше оценка, тем более вероятно, что модель полагается на запоминание, а не на реальное понимание/рассуждение. Чем выше CR, тем меньше второй множитель, и тем меньше общее значение — что логично: если модель решает новые изменённые задачки, то нет оснований полагать, что она их запомнила.

Давайте на примере. Вот есть 10 задач, модель решает 9 из них без перестановок, Acc = 0.9, всё хорошо. Но с минимальным изменением условий решается всего лишь 1 задача. CR = 1 / 9 ~= 0.11. Тогда получается, что второй множитель очень большой (0.89), и итоговая оценка 0.9 * 0.89 = 0.8, очень много — скорее всего запоминание. А если решила 8 из 9 после изменений, то это 0.9 * (1 — 0.89) = 0.1, очень мало. Всё что выше 0.1 авторы называют решением через запоминание.

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

Отдельный вопрос это можно ли такую задачу относить к классу «требующих рассуждений», и главное это определить до того, как мы увидим, что LLM'ки их могут решать 😀 а то если там точность 5%, то это рассуждения, а если 95% — то нет 🤣

Сиолошная

20 Oct, 07:37


Но на этом история не кончается! Andrew Mayne, бывший сотрудник OpenAI (сейчас или в прошлом он был промпт-инженером) ворвался в твиттер и разнёс исследование, показав, как нужно было делать.

Он не давал примеры задач и решений в промпте, а просто написал:
This might be a trick question designed to confuse to LLMs with additional information. Look for irrelevant information or distractors in the question:

И ту задачу, что авторы в статье приводят как нерешаемую даже для крутой o1 модель теперь решает 10 из 10 раз 🎃 Он пошёл дальше и проверил малютку gpt4o-mini: та тоже справилась 10 из 10 раз.

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

Конечно, по одной задаче судить — плохо, и по-хорошему нужно было с этим промптом прогнать несколько разных моделей на всех 50 наборах по 100 задач, чтобы точно всё оценить. Сам Andrew Mayne сказал, что ему не удалось добиться надежного провала решения других задач из примеров в статье (авторы блин ещё и полный набор не опубликовали!) с моделями o1 или GPT-4o.

Также он отметил:
> В статье не было сравнений с результатами людей. Я думаю, было бы интересно посмотреть, насколько хорошо среднестатистический старшеклассник справился бы с аналогичным тестом — особенно с добавленным предупреждением о подвохах и без него.
> Исследователи делают некоторые весьма странные выводы об обобшающих способностях LLM, экстраполируя поведение крошечных переобученных моделей на гораздо большие и эффективные, которые показывают себя куда лучше в тестах.

И ещё раз: проблема в том, что авторы статьи не попробовали что-то примитивное и очевидное, тестировали часть моделек (а самые лучшие будето выкинули из своего анализа при составлении выводов), зато пришли к выводам о ФУНДАМЕНТАЛЬНЫХ ПРОБЛЕМАХ, НЕ РЕШАЕМЫХ ДООБУЧЕНИЕМ И ПРОМПТАМИ. И полностью игнорируют тенденцию «новые и умные модели меньше страдают от всех нами названных проблем». Но конечно это не означает сокращения разницы между LLM и людьми 😀

Skill Issue 😎

Сиолошная

20 Oct, 07:27


Но и это не всё, последняя часть экспериментов — это создание датасета GSM-NoOp, где при создании шаблона в условие добавляется одно условие, кажущееся релевантным, но на самом деле не влияющее на решение.

Пример (жирным выделена добавленная часть:
Оливер собирал 44 киви в пятницу. Затем он собрал 58 киви в субботу. В воскресенье он собрал вдвое больше киви, чем в пятницу, но пять из них были немного меньше среднего размера. Сколько киви у Оливера?

В теории, результаты не должны меняться, на практике же наблюдаются просадки в качестве:
o1-preview: 94.9% -> 77.4% (-17.5%)
GPT-4o: 95.2% -> 63.1% (-32.1%)
Gemma2-9b-it: 85.3% -> 22.3% (-63%)

И после этого авторы прыгают к выводам:
— «мы обнаружили, что модели склонны преобразовывать утверждения в операции, не понимая их истинного смысла»
— «мы демонстрируем, что модели подвержены катастрофическому падению качества на примерах, не входящих в тренировочное распределение, возможно, из-за их зависимости от сопоставления с шаблонами»
— (сделали ещё один эксперимент, поменяв примеры, которые показывают перед заданием вопроса) «мы показали, что LLM испытывают трудности даже при наличии нескольких примеров, содержащих схожую нерелевантную информацию. Это говорит о более глубоких проблемах в их процессах рассуждения, которые нельзя легко смягчить с помощью обучения» (пробовали доучить маленькие локальные модели)
— «наша работа подчеркивает существенные ограничения в способности LLM выполнять настоящие математические рассуждения»
— а в самом начале статьи было вообще вот так: «наша работа указывает на более фундаментальную проблему: LLM испытывают трудности, <...>, что указывает на более глубокие проблемы в решении задач, которые невозможно решить с помощью промптинга с показом нескольких примеров или дообучением на примерах с отвлекающими вставками»

То есть их утверждение, которое и разнесли по твиттеру, а затем и по новостям, что ни промптинг, ни дообучение не решает эту проблему, и что якобы LLM — В С Ё! ☕️

===

Но почему качество моделей так сильно просаживается при добавлении не влияющей на решение информации? Моя гипотеза — что модели обучались на реальных олимпиадных/школьных задачах, и они привыкли, что вся информация в задаче полезна для решения. Я отлично помню, как мне в школьное время при подготовке к олимпиадам говорили: «Если информация в задаче есть, то она дана для чего-то. Не может быть просто так». Не бывало так, что что-то просто приписано.

У меня нет уверенности, что качество ответов школьников (олимпиадников и обычных) упадёт на этом наборе задач. Но я уверен на 99.9%, что если условия эксперимента будут позволять, то количество вопросов/поднятных рук (допустим, в условиях экзамен, с обращением к учителю по условию задачи) с интентом «чё это такое? нужно учитывать или нет? непонятно что имелось в виду, влияет чи нет» вырастет. Если же не дать задавать вопросы, и оставить детей как есть, то из огромной выборки детей кто-то да точно отличится и напишет «ну если 5 киви были маленькие то их не считем», так что в пределе качество чуууууууть-чуть упадёт.

Означает ли это ограниченность мышления и рассуждений у этого ребёнка? Нет.
😫 так а какого хрена вы пишете это в статье

Сиолошная

20 Oct, 07:27


Но дальше — больше. Из каждой задачи вырезают одно из условий (тем самым сокращая потенциальное решение = упрощая задачу), а также добавляют одно или два.

GSM-Symb (синий) — это полученный авторами пул из 50 наборов по 100 задач, и качество на нём (его можно называть базовым)
GSM-M1 (зелёный) — это с вырезанием одного из условий
GSM-P1 (оранжевый) и GSM-P2 (розовый) — это задачки с добавлением одного и двух условий соответственно

На картинке показаны гистограмы качества 6 разных моделей. o1-mini (нижний првый угол) почти не меняется, и лишь чуть-чуть хуже показывает себя на P2 (оно и ясно, ведь задачи объемнее и сложнее). То жеверно и для GPT-4o. Остальные модели закономерно показывают себя чуть лучше или сильно хуже из-за этих изменений.

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

Во-первых, две модели показывают себя одинаково на трёх разных «уровнях сложности» задач (от M1 до P1; на P2 всё же просадка, без скорости падения, по крайней мере показанной. Во-вторых, неочевидно, почему эта скорость как-то влияет на какую-то их гипотезу о наличии или отсутствии навыков к рассуждению в LLM.

Если их выводы верны, почему ж тогда LLM от OpenAI, которые на изменённом наборе данных показывают такое же качество (то есть не переобучены на эти задачи), не вписываются в картину? По формулировкам авторов складывается ощущение, что они выводят ограничения именно архитектуры LLM и подходов к их обучению, но делают это по «слабым» моделям, игнорируя несостыковки в топовых.

Сиолошная

20 Oct, 07:27


GSM-Symbolic: Understanding the Limitations of Mathematical Reasoning in Large Language Models

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

Есть датасет GSM8k, его описание я уже давал: в каждой задаче от 2 до 8 действий с четырьмя базовыми операциями (+, −, ×, ÷). Оригинальный датасет подготовили в в 2021-м, в нём было 8 тысяч задач. Для наглядности вот пример одной: Ли купил 6 акций Delta по цене 40 долларов за акцию. Если он хочет заработать 24 доллара на этой сделке, сколько должна стоить акция Delta, когда он ее продаст?

У современных передовых LLM получается правильно отвечать на такие вопросы примерно в 94-96% случаев. Часть этого успеха можно списать на запоминание — ведь данные есть в интернете уже 3 года. Однако ранее в этому году другие исследователи всё проверили — и передовые модели GPT / Claude не были этому подвержены (на схожих, но новых и составленных вручную задачах модели показывали такое же качество или даже чуть лучше).

Так вот эта статья — частичное повторение экспериментов по изменению исходного набора данных. Задачи перебили в шаблоны, предварительно выделив имена действующих лиц (в примере выше это Ли), цифры, и промежуточные результаты в решении. Теперь эти элементы можно менять произвольно, при этом сама логика задачи не изменится. Вместо Ли будет Петрович, вместо 6 акций — 10, и так далее.

Всего подготовили и отобрали 100 шаблонов, предварительно проверив, что выборка 10 случайных примеров по нему (с генерацией чисел/имён) получается осмысленной (нет условий в духе «минус три акции»), и что на каждую задачу хотя бы 2 модели отвечают правильно (то есть решение возможно). Затем из каждого шаблона сделали по 50 вариантов с разными именами/числами, итого вышло 50 наборов по 100 задач. В теории, их сложность одинакова, и люди, и LLM должны их решать с качеством примерно равным исходному.

Далее на этом проверили более 20 моделей. Качество почти всех упало, кроме моделей OpenAI (Anthropic/закрытые модели Google не участвовали в экспериментах) и LLAMA-3-8b. Ешё пробовали менять по отношению к исходной задаче либо только имена, либо только числа, либо и то, и то — и результаты те же: большое количество изменений ведёт к уменьшению качества ответов, кроме передовых GPT-4o / o1 / LLAMA-3.

Уже к этому моменту авторы подводят к мысли, мол, ну смотрите, LLM'ки тупые, вон качество просаживается от такой простой перестановки, а ведь не должно! У людей бы наверняка изменение имени героя задачи не вызвало изменения ответа, да?

Сиолошная

19 Oct, 11:49


24 января 2023-го — 19 октября 2024-го, 1 год, 8 месяцев и 25 дней, чтобы пройти этот путь с нуля. Без реклам и с нулевым бюджетом, всё на контенте 🥹

Когда писал про 25 тысяч год назад, то в посте пошутил «Here's to 25 more 🫡» — но я не думал, что получится удвоиться, по крайней мере так быстро. Дальше уж точно сложно расти, как и обещал, буду смещать фокус на англоговорящую часть мира (но контент на русском остаётся).

Всем пасибо
🤝🤝

Сиолошная

18 Oct, 19:28


Схема работы DuoAttention, слева процесс обнаружения Retrieval Heads, справа — процесс работы модели с использованием оптимизации

Пояснение: Streaming Attention — это части модели, которые обращают внимание лишь на совсем недавний контекст, последние сколько-то слов, и не участвуют во вспоминании частей промпта.

Интересно, что в некоторых бенчмарках с длинным контекстом модель с сохранением лишь части (иногда меньше половины) KV cache показывала себя лучше, чем полная модель — скорее всего потому, что ни на что не отвлекалась, и механизм вспоминания частей промпта работал на полную.

Сиолошная

18 Oct, 19:28


DuoAttention: Efficient Long-Context LLM Inference with Retrieval and Streaming Heads

В конце апреля разбирал статью про Retrieval Heads (пост является пререквизитом для понимания этого) — механизм в LLM, который позволяет модели находить и копировать нужные факты из части промпта. Если вы даёте на вход 10 страниц текста и задаёте вопрос — Retrieval Heads обратят внимание на потенциальные место ответа и «вытащат» его. Когда Retrieval Heads лажают, появляется контекстуальная галлюцинация.

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

Фреймворк DuoAttention предлагает следующее:
1) генерируем набор синтетических данных, в которых точно требуется «вспоминать» контекст (в промпт вставляют части «запомни это: <длинное предложение>», а в коцне просят написать все такие части)
2) прогоняем его через модель и сохраняем выходные значения (последние эмбеддинги)
3) дальше тренируем модель-маску, которая описывает зануление/занижение оценок каждой головы (которая может быть Retrieval Heads). Тренировка производится с L1 регуляризацией, чтобы проредить маску. Идея такая, что если мы зануляем Retrieval Head, то это существенно ломает предсказания модели на задаче «вспоминания» частей промпта, а если что-то другое — то влияние минимально
4) после обучения на ~2000 шагов (несколько часов, в зависимости от модели и GPU) остаётся финальная маска влияния на возможность модели свпоминать. В ней значения бинаризуются (на 1 и 0) через сравнение с некоторой константой, подбираемой по перцентилю
5) этот процесс нужно повторять самому для каждой модели один раз перед запуском

Всё! Теперь маску можно применять: значения Retrieval Head сохраняются для всех слов, а остальная информация отбрасывается, если находится дальше, чем K токенов от текущего места. Например, если вы обрабатываете 50'000 токенов, то держите на готове последние, скажем, 1024 токена (и весь KV cache для них), и значения Retrieval Head для всех остальных 49k. Если модели нужно обратиться к данным из начала промта — у нас для этого сохранена лишь часть данных, которая, как показывают эксперименты, достаточна для того, чтобы вспомнить их.

На экспериментах с длинным контекстом показывают, что если брать половину всех Heads (то есть подбирать такой порог, чтобы ровно половина отсекалась), то:
— на одну карту с 80GB для 8B модели теперь влазит 3.3M токенов контекста (если делать квантизацию кэша; без DuoAttention 1.8M, без квантизации всего 0.52M)
— потребление памяти меньше в 1.67-2.55 раз — потому что надо меньше хранить в памяти, мы часть выкидываем
— задержка генерации меньше в 1.5-2.18 раз — потому что нужно меньше считать

Очень хороший пример как методы интерпретации (обнаружение Retrieval Heads) позволяют улучшать практические кейсы с использованием моделей.

Сиолошная

17 Oct, 09:18


Вот видео с попарной визуализацией исходного видео и полученного в симуляции поведения. Раньше для получения такого люди сидели и ломали голову, а как же запрограммировать функцию, которая награждает за правильные действия, и штрафует на несоответствие ожиданиям. Теперь — хотя бы для самых примитивных случаев — можно запрягать пару VLM+LLM.

Авторы делали сравнение полученных моделей по шкале от 0 до 5 на предмет соответствия поведению на исходном видео (опрашивали по 10 человек). Модель, полученная через фидбек от VLM, получалась такой же качественной, как если фидбек давал живой человек. Правда интервалы ошибки очень большие, так что надёжного сравнения не выйдет – да и вообще к статье много претензий( Кода нет, моделей нет, всего 5 видео (может закрасться подозрение, что ничего не работает 90% времени), сайта с демкой нет — ну хотя бы промпты для GPT и Gemini опубликовали, и на том спасибо. А ещё не делали никаких сравнений разных VLM, и выбор Gemini никак не объясняется.

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

Сиолошная

16 Oct, 16:56


Дошли руки посмотреть интервью с CTO Poolside, cтартапа, который делает AI-ассистента для программистов с прицелом на автоматизацию всё большего и большего количества задач (они формулируют это как human-led + AI-assisted -> AI-led + human-assisted). Я за компанией слежу чуть больше полугода. К ним ушло работать несколько очень хороших знакомых/приятелей (но на радары они попали до этого).

Мне очень нравилась их страничка с виженом — там написано много дельного. Отдельно выделю блок «our strong beliefs» и первые пункты из него:
— Вы не можете достичь успеха только дообучением готовых моделей — основные их навыки «возникают» в процессе длительного и ресурсоёмкого обучения базовой модели
— Масштаб имеет значение, больше вычислений и данных решают большую часть проблем

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

Тезисно из интервью:
— Данные, на которых обучают модели, представляют собой результат работы, а не промежуточные размышления, проделанные для того, чтобы эти данные получить. Поэтому такие данные нужно создавать самостоятельно (примерно это делают для обучения o1, генерируя траектории размышлений)
— В программировании для валидации корректности решения есть надёжные способы: исчерпывающие тесты. Если для всех задач есть тесты, то можно запускать автоматический цикл обучения на синтетически генерируемых решениях на основе фидбека от тестов (что сработало а что нет)
— вычислительные мощности безумно важны, это как входной билет в текущую гонку (если мощностей нет — «you're not even in the race»). Без мощностей даже если всё остальное ок (данные, люди, процессы) — ничего не выйдет. И очень важно, что мощности можно превращать в данные высокого качества, чтобы продолжать учить модели (как раз описанный выше процесс с генерацией и проверкой тестами)
— кроме синтетических данных используют человеческую разметку в виде корректировки рассуждений модели (например, если ответ правильный, но часть рассуждений были ошибочными, или есть ошибка в логике, из-за которой и вышел неправильный ответ). Нечто похожее делали OpenAI ещё для GPT-4
— почти все инвестиции пойдут на закупку и оплату мощностей для дальнейшего масштабирования, без этого не могли этим заняться
— в августе у компании появилось 10'000 видеокарт, чего хватит, чтобы продвинуться и натренировать модельки побольше, получить новые навыки в них, и так далее
— инфраструктурные решения по мощностям очень важные, так как это не появляется по щелчку. Приходится принимать решения с горизонтом реализации 12-18 месяцев. поэтому нужно подстраивать стратегию и темп развития под это; сейчас уже думают о том, что и как будет в следующем раунде (при успехе реализации текущего)
— когда появились новости о задержке производства GPU следующего поколения (которые почти полностью выкуплены Microsoft, Google, Meta...), то Eiso был рад: ведь это поможет им дольше оставаться конкурентоспособными и не отставать существенно. Но эти карты всё равно очень ждут, каждое поколение даёт прирост скорости обучения в 1.5-2 раза, а при применении карты серии Blackwell на бумаге ещё более выгодно смотрятся
— не важно что покажут в GPT-5 и удивит/не удивит, через 10 лет мы на это всё равно будем смотреть как на что-то из начала эпохи компьютеров
— одно из самых важных изменений в понимании Eiso за последний год — что масштабирование данных тоже супер важно, на уровне с мощностями [тут имеется в виду что для дообучения можно собирать и собирать ещё разметку, конца-края не видно, модели недоучены под конкретные задачи — я так понял]