Интересное что-то
517 subscribers
2.71K photos
253 videos
138 files
4.51K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.iss.one/asisakov_channel
Чат: https://t.iss.one/youknowds_chat
Download Telegram
Forwarded from Душный NLP
Demons in the Detail: On Implementing Load Balancing Loss for Training Specialized Mixture-of-Expert Models

Сегодня разберём статью от команды Qwen о том, как они придумали новый LBL-лосс для обучения MoE.

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

Обычно LBL считают на уровне отдельного микробатча каждого DP-ранка, а потом усредняют полученные LBL по всем микробатчам. Но заставлять роутер распределять токены равномерно в рамках одного микро-батча — довольно строгое ограничение. Пара длинных семплов может заполнить весь микро-батч, и тогда, если эти семплы пришли из одного домена, роутер всë равно будет вынужден разослать эти токены равномерно по всем экспертам. Так теряется логика специализации экспертов.

Для того чтобы избежать потери специализации, авторы предлагают считать LBL на уровне глобального батча (global-batch), где больше разнообразия данных. Как? Добавляют шаг коммуникации: синхронизируют нужные для подсчёта LBL статистики роутера по выбору экспертов со всей DP-группы, то есть со всех микробатчей. Рассмотрим пример:

1. Вообразим 2 карты и обучение с DP.
2. А к ним — 4 эксперта и 16 токенов (после пермьюта).
На первой карте токены распределятся по экспертам так: [0, 0, 8, 8]. На второй — [8, 8, 0, 0].
3. Для micro-lbl этот лосс будет на каждой карте ругать роутер за неравномерное распределение токенов.
5. Но если мы соберём глобальную статистику (то есть, сложим вектора распределений со всех карт), то получим [8, 8, 8, 8]. Это идеальная равномерность и macro-lbl на такое не обижается.
6. macro-lbl даёт роутеру больше свободы, что конвертируется в прирост качества.

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

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

Разбор подготовил Даниил Сухой

Душный NLP
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Information Retriever
Sampled Softmax for Large-Scale Retrieval.

В рекомендашках на стадии генерации кандидатов часто используются двухбашенные модели, в которых пользователи и айтемы отдельно кодируются в векторы нейросетевыми «башнями», и затем с помощью скалярного произведения определяется, насколько пользователю релевантен тот или иной айтем. Мы умеем быстро находить для пользователя примерный топ айтемов с максимальным скалярным произведением (например, с помощью HNSW), даже для очень больших каталогов с миллионами айтемов.

У таких моделей должна быть способность глобального сравнения — возможность для пользователя сравнивать между собой «скоры» всевозможных айтемов из каталога. Ранжирующие лоссы, на которые учатся верхние стадии, для обучения нам не подходят — при таком обучении у модели нет цели научиться ранжировать для пользователя все айтемы, ей важно научиться ранжировать только то, что обычно попадает к нему в выдачу. Если YouTube обычно показывает испанцам видео на испанском, а итальянцам на итальянском, то модели не нужно уметь сравнивать видео на испанском с видео на итальянском, и она может «наложить» (англ. folding) векторы айтемов из этих двух групп друг на друга в векторном пространстве.

А вот что нам подходит — это softmax-лосс. Можно сформулировать задачу рекомендации в виде экстремальной классификации, в которой каждому айтему соответствует свой класс (экстремальной — потому что много классов). Если пользователь лайкнул трек, то что это был за трек? Считаем для каждого трека некоторый скор (читай «логит»), затем превращаем скоры в вероятностное распределение, применив softmax. Учим модель максимизировать правдоподобие правильного класса — минимизируем кросс-энтропийную функцию потерь. При таком обучении в саму модель заложено, что мы должны уметь делать глобальное ранжирование между всеми айтемами в каталоге.

У такого лосса есть одна «большая» проблема — чем больше каталог, тем сложнее посчитать сам softmax. В знаменателе есть сумма экспонент от логитов по всему каталогу. Нам в целом не нужно считать сам лосс, важен только градиент, но в градиенте эта сумма тоже присутствует. Чтобы это побороть, можно использовать сэмплирование негативов — вместо суммы скоров по всему каталогу считать её по небольшому сэмплированному подмножеству. Популярные стратегии сэмплирования — равномерное (выбираем айтемы из каталога абсолютно случайно) и униграммное (пропорционально популярности айтема). Частный случай униграммного — in-batch сэмплирование: при обучении нейросетей мы набираем «батчи» из положительных пар (пользователь, айтем), и можно для каждого пользователя из батча использовать в качестве негативов чужие позитивы из этого же батча.

Почему же всё-таки недостаточно простого равномерного сэмплирования? Здесь поможет следующая интуиция: «полный» softmax-лосс неявно занимается майнингом негативов — у айтемов из каталога, которым модель даёт высокий скор, большой вклад в градиент. Это отличительное свойство softmax-а — например, у BPR-лосса, если модель сильно ошибается в каком-то айтеме, его вклад в градиент всё равно сильно ограничен. Поэтому, если мы хотим аппроксимировать softmax-лосс, нам важно сэмплировать как можно больше «сложных, информативных» негативов, в которых модель ошибается и у которых был бы большой вклад в градиент. А равномерное сэмплирование, особенно при больших каталогах, будет давать простые негативы. Добиться хорошего качества с равномерными негативами всё равно можно, но понадобится гораздо большее количество негативов, чем при использовании альтернативных, более «сложных» источников негативов.

А вот при униграммном сэмплировании мы получаем популярные айтемы, которые чуть ли не по определению имеют высокий средний скор у пользователей и поэтому представляют из себя более «сложные» негативы. Но и здесь не без проблем :) Что же идёт не так — я расскажу в следующем посте.

P.S.: это я вас так готовлю к посту про статью, которую у нас приняли на RecSys :) А ещё это небольшое переосмысление прошлого поста на ту же тему. Что-то похожее я рассказываю в рамках лекции про нейросетевой кандген в ШАД.
Forwarded from Information Retriever
Correcting the LogQ Correction: Revisiting Sampled Softmax for Large-Scale Retrieval.

А вот и наша статья, принятая на RecSys 2025, добралась до arxiv’а! Что мы сделали: улучшили logQ-коррекцию.

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

Улучшение связано с тем, как в формуле logQ-коррекции используется положительный айтем (далее именуемый “позитив”). Он появляется в двух местах — и в числителе, и в знаменателе софтмакса. К числителю вопросов нет. А вот в знаменателе есть странности. Например, в исходной статье от Google к позитиву в знаменателе применяется logQ-поправка; а в следующей статье от тех же авторов — уже нет. То есть для сэмплированных негативов в знаменателе logQ-поправка есть, для позитива — нет. А вывод такой формулы нигде не приводится / не обосновывается.

Более того, само использование позитива в знаменателе выглядит сомнительно. Оригинальный вывод формулы, который Bengio проделал в начале нулевых для доисторических языковых моделей, гласит: для оценки знаменателя софтмакса можно насэмплировать айтемы из произвольного распределения Q (обычного называемого proposal distribution) и добавить к ним ту самую “logQ-поправку”. Распределение Q — это как раз и есть то распределение, из которого мы сэмплируем негативы; которое чаще всего является in-batch распределением.

И когда мы рассматриваем конкретный обучающий пример, то есть конкретную пару (user, positive item), и для нее считаем сэмплированный softmax-лосс с logQ-коррекцией, мы не сэмплируем позитив из распределения Q — он приходит к нам детерминированно, с вероятностью 1. А в формуле он используется для Монте-Карло оценки в предположении, что мы сэмплируем его из Q.

Долгое время мы, как и все, просто плыли по течению и использовали logQ-коррекцию в том виде, в каком все ее применяют. Но потом я взялся сделать ту самую лекцию про нейросетевую генерацию кандидатов для ШАДа, в которой в том числе хотел осветить logQ-коррекцию — строго, с математическим выводом. Хотелось также обосновать формулы, использующие позитив в знаменателе, с logQ-поправкой и без.

Когда я в рамках математических выкладок отделил позитив от Монте-Карло сэмплирования, получилась совершенно другая формула! В которой позитива не было в знаменателе софтмакса вообще, но при этом появилось взвешивание сэмплов. Чем меньше модель ошибается на сэмпле (то есть предсказывает большую вероятность позитива), тем меньше вес этого сэмпла.

Мы поставили эксперименты — сначала на своих внутренних больших датасетах, а затем на небольших академических. И подтвердили, что наша формула хорошо работает, причем работает лучше стандартной! На полноценный long paper на RecSys времени не хватило (когда появилось время на написание статьи, до дедлайна было меньше двух недель), поэтому подались на short paper. Статья получила хорошие отзывы и была принята на RecSys, чему мы несказанно рады :)

Ещё хочется немного подсветить остальную ценность статьи. До этого я не видел в академической литературе замеры на публичных датасетах для logQ-коррекции. Мы эти замеры сделали и показали, что популярная в индустрии logQ-коррекция хорошо работает и в академическом сетапе. Кроме того, мы, возможно, первыми на этих датасетах показали пользу от mixed negative sampling (таких замеров я тоже раньше не встречал, но здесь уже меньше уверен).

И последнее — мы сделали две валидации. Было понимание, что без leave-one-out схемы, как бы я ее ни недолюбливал, есть большая вероятность не пройти ревью :) Но делать только leave-one-out валидацию тоже не хотелось. Поэтому сделали также temporal split валидацию. Получилось, что ранжирование моделей c точки зрения качества в этих двух сетапах заметно различается.

Остальные подробности — читайте в статье!
Forwarded from Information Retriever
Genrec.pdf
1.6 MB
Turbo ML Conf 2025.

Сегодня выступал на Turbo ML Conf 2025 с докладом про генеративные рексистемы. По сути, это был сиквел к докладу про Аргуса. Рассказывал про свое видение и про наши эксперименты. Cделал отсылку к РЛ :)

Как всегда, было приятно поделиться с коммьюнити мыслями и идеями.

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

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

P.S: а еще пост на линкедине про нашу logQ статью постепенно набирает обороты. Хочется, чтобы как можно больше людей увидели саму статью, поддержите отечественного производителя отечественную науку лайком! :)
Forwarded from Information Retriever
RecSys Substack.

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

Начинал я это делать еще внутри Яндекса, почти три года назад, в рамках IR семинара. В какой-то момент обнаружил, что уже есть рассылка с похожим дайджестом от инженера из бигтеха — Sumit Kumar’а. Мы с ним независимо продолжали делать эти рассылки (я — сначала для яндексоидов, потом для вас; а Sumit — для всех). Интересно было наблюдать, что они получались довольно разными. В итоге я писать дайджесты перестал, а Sumit вот все еще продолжает.

Статья про logQ попала в прошлый дайджест Sumit’а, а статья про Аргуса — в текущий, причем аж на первое место, что особенно приятно :) Забавно наблюдать, что на четвертом месте — статья с почти таким же названием от ByteDance.

А еще когда-то давно у меня уже была отчаянная попытка начать писать статьи про рекомендашки — тогда я описал наше первое внедрение трансформера в Маркет. На конференцию статья не прошла, а вот в Substack Sumit’а попала — и это было хорошим утешительным призом :) Статья была не очень хорошо написана (я тогда еще не умел писать статьи, особенно на английском), а вот доклад на Датафесте вышел очень даже неплохой. По ощущениям, именно с него началось мое влияние на рекомендательную индустрию вне Яндекса.

Sumit, кстати, на канал подписан и даже когда-то что-то комментировал. Если ты это читаешь — привет и спасибо :)

Если не успеваете листать архив и вам не хватает дайджестов — подписывайтесь на RecSys Substack Sumit’а. Ссылочка
Scaling law в рекомендательных системах

Законы масштабирования вышли за рамки NLP и успешно применяются в рекомендательных системах. В наших карточках исследователь Владимир Байкалов затронул последние работы на эту тему. С обзором прошлых статей можно ознакомиться в этом посте.

Работы, упомянутые в карточках:
- Language Models are Unsupervised Multitask Learners
- Scaling Laws for Neural Language Models
- Training Compute-Optimal Large Language Models
- Actions Speak Louder than Words: Trillion-Parameter Sequential Transducers for Generative Recommendations
- Scaling New Frontiers: Insights into Large Recommendation Models
- Unlocking Scaling Law in Industrial Recommendation Systems with a Three-step Paradigm based Large User Model
- Scalable Cross-Entropy Loss for Sequential Recommendations with Large Item Catalogs
- Разбор статьи HSTU в канале «Рекомендательная»

Обзор подготовил Владимир Байкалов
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM