Интересное что-то
517 subscribers
2.72K photos
253 videos
139 files
4.52K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.me/asisakov_channel
Чат: https://t.me/youknowds_chat
Download Telegram
OneRec разбор (часть 3): алайнмент

Прямо как по заказу к моменту, когда руки дошли написать пост про алайнмент в OneRec, вышла ещё одна статья от тех же авторов: OneLoc. В ней описывается в целом всё тот же OneRec (хотя в деталях различий немало), но применённый к поверхности Local Life Service. В OneRec Technical Report упоминалась выкатка на эту поверхность с точно такими же результатами AB-теста, так что это на самом деле один и тот же релиз. Разберём сегодня на примере всех 3 работ (OneLoc, OneRec и OneRec Technical Report) моё видение алайнмента генеративных рекомендательных моделей.

Я выделю следующие возможные подходы:
- Next token / item prediction (то есть отсутствие алайнмента)
- Supervised Fine-Tuning (SFT)
- Conditioning (например Prompt-based или P-tuning)
- Псевдо RL (например DPO)
- RL (например PPO и GRPO)

NTP
LLM обучается предсказывать следующий токен в последовательностях текстов (NTP), в результате чего выучивают "модель мира" (а точнее модель того, как люди пишут тексты). Мы в рекомендациях адаптируем эту идею, реализуя next item prediction. При этом практически все рекомендательные модели либо получают на вход только позитивные взаимодейтсвия (как SASRec или TIGER), либо на вход получают всё, а предсказывают только позитивы (как PinnerFormer или Actions...). Такие модели не выучивают логгирующую политику, их модель мира упрощённая. В Technical Report модель предобучают на exposed items, их базовая модель предобучена именно на NTP.

SFT
Часть цепочек можно назвать "хорошими" и научить модель такие цепочки генерировать. В LLM такие цепочки можно составлять с помощью разметчиков. В рекомендациях обычно используют логи прошлой системы и фидбэк пользователей. Pretrain первой версии OneRec это именно SFT - NTP loss там повесили только на high-quality sessions. Также в обеих версиях статьи используют SFT как дополнительный лосс на этапе алайнмента.

Conditioning
Похож на SFT, но здесь мы не доучиваем модель только на "хорошие" цепочки, вместо этого мы на них "обуславливаемся". В теории это очень мощный инструмент, который даёт возможность генерировать хоршие выдачи разного вида. Например можно поставить счётчик числа лайков перед сессией и уже в райнтайме генерировать "сессию, в которой будет 3 лайка". Такой подход используется в недавно вышедшем PinRec. Нам идея кажется перспективной и мы пробуем разные вариации.

Псевдо RL и RL
Эта группа методов позволяет напрямую оптимизировать выдачи, которые понравятся пользователям, а не иммитировать подмножество хороших выдач прошлой системы. Большая проблема рекомендаций - вы не можете показать 2 разные выдачи одному и тому же пользователю в один момент времени и узнать его реакцию на обе. Это приводит к необходимости обучения reward model. По аналогии с LLM такая модель оценивает, насколько хорошо ответ подойдёт на запрос. Имея reward model, можно сэмплировать различные выдачи для пользователя и либо составлять из них пары для DPO, либо оценивать value для RL алгоритмов.

Логичный вопрос: раз уж у нас есть reward model, зачем нам DPO? Я вижу 2 главных причины: он стабильнее и менее требовательный к "онлайновости" обучения. Основные RL алгоритмы, применяющиеся в генеративных моделях, учатся on-policy (то есть на своём собственном фидбэке). При обучении на логах другой системы приходтся вносить корректировки, которые всё равно работают плохо. В идеале модель должна обновлять веса сразу после получения фидбэка. На практике это недостижимо, поэтому чем "онлайновее" обучение, тем лучше.

Похоже, что 3 внедрения появлялись именно в таком порядке по мере усложнения инфраструктуры:
- OneLoc использует обычный DPO, обучаясь offline.
- OneRec использует Iterative DPO - модель чаще обновляет веса во время дообучения.
- OneRec Technical Report использует свою модификацию GRPO, обучаясь с минутными задержками.
Про нестабильности в обучении
(мемчик из внутреннего чата от Влада Тыцкого)

Недавно мы взялись написть архетип - библиотечный класс нашей генеративной модели. После лёгкого рефакторинга обучение начало "взрываться" (кто бы мог подумать).

Что мы обычно используем для стабилизации:
- Gradient clipping
- Лоссы и нелинейности - в fp32
- Learning rate warmup и аккуратный подбор пикового значения
- Pre-norm
- QK-нормализацию

До сих пор не используем, но в LLM применяют:
- AdamW
- Очистку датасета от "плохих" батчей
- Отключение bias
- RMSNorm вместо LayerNorm

Конкретно в этом случае не спасало вообще ничего. Локализовать проблему помогло только отслеживание std (!) активаций на разных слоях.

Дебаг занял недели, а фикс ровно 1 строку кода.
Как_создать_LLM_продукт.pdf
255.3 KB
Как строить LLM продукты

Аня Подображных написала классную и лаконичную инструкцию для продактов о том как строить LLM-продукты. Выгрузил вам её в pdf.

Ключевое отличие от обычных продуктов – работа с метриками качества. Кратко, путь таков:

1. Строим метрику качества – бенчмарк из вопросов и способ проверить правильность ответа
2. Определяем baseline – сколько по этой метрике выбивают альтернативы, включая людей
3. Только теперь строим продукт и считаем сколько выбили по метрике качества
4. Улучшаем пока не побьем baseline
5. Определяем ограничивающие метрики и добиваемся результата по ним

Теперь ваш продукт действительно нормально решает задачу. Можно запускать.

Следование этим принципам отличает любителей поделать красивые демки от реальных ребят из мира LLM-инженерии. Можно спрашивать на собеседованиях, например.
Forwarded from Data Blog
Немного мыслей про обучение и изучаемые методы

В октябре буду снова читать пару занятий по XAI на ФКН, и мне очень нравится строить занятия так — одно я посвящаю стареньким подходам, а одно — более новеньким.

Обычно, в рамках старенького я рассказываю про интерпретируемые модели, а в этом году на меняла "упала" идея рассказать в рамках дополнительных глав про GLM, GAM и MoE (потому что поток студентов тот же).

Generalized Linear Models, Generalized Additive Models и Mixture of Experts — методы ровно из 19XXх, когда активно задавались вопросами интерпретируемого решения нелинейных задач.

GLM (Generalized Linear Models) — расширение линейной регрессии, позволяющее целевой переменной быть распределенной как угодно.

GAM (Generalized Additive Models) шаг дальше — берут идеи GAM и вместо линейных зависимостей допускают аддитивные нелинейные функции признаков.

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

Сейчас эти методы не слишком популярны — у нас достаточный практический аппарат и ширина методов, чтобы, изучая ML, опустить эти детали.

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

а) Иметь в арсенале зоопарк всё ещё достаточно контроллируемых решений, а иногда и более быстрых — и это плюс для индустрии;

б) Иметь более расширенный кругозор для сборки новых методов — и это плюс для теоретиков;

Так, при сборке нового, MoE, например, вернулся в трансформерах (Switch, Mixtral) — и оказался эффективной идеей к обучению моделей с большим количеством параметров без взрывного роста Floating Point Operations Per Second. Проще говоря, больше параметров с культурной стоимостью вычислений. А GAM-модели заложили основу для попытки построить интерпретируемые по дизайну сетки — GamiNet.

И вот очень я радуюсь, когда вижу, что старенькие методы — иногда прямо-таки коробка нового. Таким мне это показалось красивым сегодня, что захотелось поделиться. А ещё теоретические блоки по этим методам в начале октября добавлю в бесплатную часть курса на степик, чтобы можно было удобно изучить.
Forwarded from Quant Valerian
Дочитал «Хорошая стратегия, плохая стратегия» Ричарда Румельта

Книга крайне занятная. Думаю, что её действительно стоит почитать, чтобы усвоить, что является стратегией, какими характеристиками она обладает. Но гораздо важнее, что она объясняет, что стратегией не является!

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

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

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

Самая главная идея, идущая красной нитью через всю книгу: стратегия должна быть сфокусирована на одном направлении. Идея в том, чтобы не распылять свои силы, а сосредоточить всё в одной точке, таким образом получив преимущество перед конкурентами. Это не значит, что должна быть только одна цель, но это означает, что все цели должны быть согласованы между собой. Нужна синергия. Чтобы одна цель усиливала другую.

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

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

У хорошей стратегии должно быть трёхчастное ядро. Каждая часть важна, нужны все эти части.
1. Постановка диагноза. Это, собственно, тот самый угол зрения или выбор ментальной модели, в которой четко видны проблемы, которые мы будем решать. Здесь нужно четко определить причины этих проблем.
2. Направляющая политика. Это рамки, общий подход для решения задачи. На какие рычаги будем давить?
3. Согласованные меры. Это уже план. Не просто цели, но и шаги для их достижения. Как именно мы будем давить на рычаги?

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

Кроме того, на примерах показаны способы поиска конкурентных преимуществ и выявления гредущей волны изменений.

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

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

Из интересного отмечу:
1. Румельт рекомендую вести списки дел
2. Выгружать все идеи на бумагу, записывать
3. Всегда ставить под сомнение собственные устанвоки и знания
4. Использовать для генерации идей деструктивный метод: почему предложенная идея не сработает, покритиковать её, поменять, придумать новую. Он даже представляет у себя в голове целую комиссию, которой отдает на оценку свои идеи
5. Помнить, что миллионы мух всё-таки могут ошибаться
Forwarded from Руковожоп
Она вернулась! 😎

Или из Руковожопа в руководителя: шаг 5

Напоминаю, что это как сериал: лучше посмотреть всё с начала
Шаг 1, шаг 2, шаг 3, шаг 4


Мы прошли долгий путь, который начался с простого осознания: «Да, именно я хочу в психушку через пару лет рулить этой канителью» 💯
Осознали мотивацию, огляделись, убедились, что шанс на рост есть, и даже переварили факт — идеальным руководителем не станешь.
Мы уже начали потихоньку захватывать
власть — стали негласным лидом: брали задачки, ответственность, давали советы и поддержку. Расширяли свое влияние внутри команды, будто паук плетет свою сеть, только с лучшими намерениями 🔪

И вот оно — самое важное, шаг#5
Пришло время для очной ставки с боссом.
Предлагаю выбрать сразу позицию не «хочу», а «готов». Это ключевой момент ✔️

Идём бодрым шагом к лиду не с просьбой-подачкой, а с конкретным предложением

Тактика проста:

🔻Расскажите, что уже сделано. Все эти мини-подвиги и негласное лидерство
🔻Покажите, как этот рост поможет команде.
Ведь вы не просто свои амбиции тешите, а о благе общем печетесь
🔻Попросите обозначить конкретные шаги.
Что именно нужно сделать, чтобы получить эту вожделенную роль? Четкий план, а не просто иди туда, не знаю куда
🔻Если разговор уйдёт в сторону компетенций — сделайте
мини-SWOT: покажите сильные и слабые стороны и спросите, каких качеств ждут от будущего лида
🔻В идеале — обговорить сроки. Ближайшее ревью? Ближайший сложный проект?

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

Если совсем кратко
Пора говорить со своим +1.
Не «дайте мне повышение», а «смотрите, я уже делаю эту работу — что ещё нужно, чтобы оформить это официально?

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

Если вы такое уже проворачивали, поделитесь опытом: чем этот разговор закончился? Истории без цензуры интересуют особенно
А если только собираетесь,
какие у вас мысли: чем всё это обернётся? 😘
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Aspiring Data Science (Anatoly Alekseev)
#trading #backtesting #bestpractices #tradinggems

Узнал сегодня что-то новое.

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

do a system/backtesting framework sanity check. ensure:

1) random entry/exit signals produce very bad trading metrics (PnL, PF, Sharpe)
2) faked perfect entry/exit signals produce amazing trading metrics (PnL, PF, Sharpe)
3) your real trading policy on valid data is somewhere in the middle

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

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

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

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

Выяснилось следуюющее:

Стратегия на барах и лимитных ордерах (для контроля проскальзывания), решение об изменении позиции принимается в конце текущего бара.
Я хотел открывать/закрывать позицию в течение следующего бара по цене не сильно хуже чем цена close последнего известного бара.
Если же такая не была доступна на рынке, я предпочитал позицию не менять, до следующего сигнала.

Покажу проблему на примере закрытия позиции. ИИ транслировал мои пожелания вот в такой невинный код

expected_fill_price=prev_close*(1+slippage_pct*np.sign(current_position)) #  для реалистичности закладываем проскальзывание
close_ok= l<= expected_fill_price <=h

if close_ok:
#здесь закрываем позу
else:
# сохраняем позу


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

Ну и действительно, такая небрежность в принятии решения, когда всё делается красивым универсальнынм однострочником close_ok= l<= expected_fill_price <=h, приводила к тому, что случайные позиции быстро закрывались с небольшими убытками, но оставались открытыми для "хороших баров", причём факт хорошести брался из будущего.

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

Вот какой код был правильным:

# close_ok= l<= expected_fill_price <=h leads to a fatal future leak, so that even random backtest becomes positive!

if pos_units[tk] > 0: # Closing long (sell limit)
close_ok = h >= expected_fill_price # Fill if market reaches limit or better (higher prices)
expected_fill_price = max(expected_fill_price, l) # Conservative: lowest price in range >= limit (worst PNL for seller)
else: # Closing short (buy limit)
close_ok = l <= expected_fill_price # Fill if market reaches limit or better (lower prices)
expected_fill_price = min(expected_fill_price, h) # Conservative: highest price in range <= limit (worst PNL for buyer)


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

Что интересно, ИИ (не платный) оказался не способен найти верное решение.
Будьте внимательны, калибруйтесь и делайте "защиту от дурака", в общем. От себя то есть ) Часто помогает.
Forwarded from КПД
На канале GPU MODE пару недель назад вышла интересная лекция от Кристофера Де Са (один из чуваков, стоявших за QuIP/QuIP#/QTIP/YAQA, а точнее за теоретической подоплекой всего перечисленного).

В ней он дает некоторую базу про задачу квантизации, квадратичные приближения, откуда берется GPTQ и Incoherence Processing. В частности, я сам наконец понял, как можно было дойти до разложения Холески в GPTQ 😄.

Базарит дядька довольно забавно и корчит физиономии, так что не заскучаете.
Всем привет!🤟

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

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

Всем приятного чтения! Жду ваших комментариев, а пока продолжу писать вторую часть:)

https://telegra.ph/Delta-metod-v-AB-testah-CHast-1-09-14
Как развить насмотренность и расширить датавиз-кругозор?

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

Чтобы этот опыт получить, нужно много смотреть😊

Собрала подборку сайтов с разными интересными визуализациями:

1. Information is beautiful
Огромное количество визуализаций по разным тематикам (есть фильтр).

2. Dataviz-inspiration
Подборка самых красивых и впечатляющих проектов в области визуализации данных (на момент написания поста их 221).

3. The pudding.cool
Сайт от онлайн-издания The Pudding с исследованиями на разные темы и подачей в виде визуальных историй.

4. Datawrapper
Еженедельные подборки визуализаций от Datawrapper.

5. Блог storytellingwithdata
В этом блоге можно встретить много разборов диаграмм.

6. Visualisingdata
Cсылка ведет на страницу со всеми публикациями проекта — новости, подкасты, ежемесячная рассылка.

7. FlowingData
Сайт, на котором регулярно публикуются статьи с исследованиями и графиками.

8. Каталог дашбордов Tableau Public
На портале можно найти много интересных визуализаций и дашбордов.

9. Блог с обзором дашбордов в Tableau
В блоге давно не было ничего нового, но может быть интересно почитать то, что есть.

10. Рубрика "График дня" от Mckinsey
Здесь можно подсмотреть примеры графиков.

Может, у вас есть чем дополнить?

Не бойтесь таких длинных списков! Необязательно тратить много времени и регулярно мониторить все вышеперечисленные сайты. Можно по случаю возвращаться к подборке и посматривать только часть из неё☺️

#dataviz #подборка
Forwarded from Dataism
😉😉 35 задач на алгоритмы для аналитиков

Это самые популярные задачи.
Если вы сейчас готовитесь к собеседованиям, то помимо бота @DataismPrepBot советую пройтись по этому списку.

1. Two Sum [https://leetcode.com/problems/two-sum/]
2. Fibonacci Number [https://leetcode.com/problems/fibonacci-number/]
3. Product of Array Except Self [https://leetcode.com/problems/product-of-array-except-self/]
4. Longest Common Prefix [https://leetcode.com/problems/longest-common-prefix]
5. Longest Palindromic Substring [https://leetcode.com/problems/longest-palindromic-substring/]
6. Longest Substring Without Repeating Characters [https://leetcode.com/problems/longest-substring-without-repeating-characters/]
7. Valid Parentheses [https://leetcode.com/problems/valid-parentheses/]
8. Remove Duplicates from Sorted Array [https://leetcode.com/problems/remove-duplicates-from-sorted-array/]
9. Maximum Subarray [https://leetcode.com/problems/maximum-subarray/]
10. Best Time to Buy and Sell Stock [https://leetcode.com/problems/best-time-to-buy-and-sell-stock/]
11. Minimum Size Subarray Sum [https://leetcode.com/problems/minimum-size-subarray-sum/]
12. Contains Duplicate [https://leetcode.com/problems/contains-duplicate/]
13. Summary Ranges [https://leetcode.com/problems/summary-ranges/]
14. Напиши функцию, которая берет на вход положительное целое число и проверяет, является ли оно простым.
15. Remove Element [https://leetcode.com/problems/remove-element/]
16. Third Maximum Number [https://leetcode.com/problems/third-maximum-number/description/]
17. Дан массив, состоящий из целых чисел. Напишите функцию, которая возвращает два максимума этого массива.
18. Implement Rand10() Using Rand7() [https://leetcode.com/problems/implement-rand10-using-rand7/description/]
19. Find First and Last Position of Element in Sorted Array [https://leetcode.com/problems/find-first-and-last-position-of-element-in-sorted-array/description/]
20. Valid Palindrome [https://leetcode.com/problems/valid-palindrome/]
21. Move Zeroes [https://leetcode.com/problems/move-zeroes/]
22. Intersection of Two Arrays [https://leetcode.com/problems/intersection-of-two-arrays/]
23. One edit distance [https://leetcode.com/problems/one-edit-distance/]
24. Group Anagrams [https://leetcode.com/problems/group-anagrams/description/]
25. Find Common Characters [https://leetcode.com/problems/find-common-characters/]
26. Search Insert Position [https://leetcode.com/problems/search-insert-position/]
27. Interval List Intersections [https://leetcode.com/problems/interval-list-intersections/]
28. Single Number [https://leetcode.com/problems/single-number/]
29. String Compression [https://leetcode.com/problems/string-compression/]
30. Permutation in String [https://leetcode.com/problems/permutation-in-string/description/]
31. Squares of a Sorted Array [https://leetcode.com/problems/squares-of-a-sorted-array/]
32. Top K Frequent Elements [https://leetcode.com/problems/top-k-frequent-elements/]
33. Sqrt(x) [https://leetcode.com/problems/sqrtx/]
34. Majority Element [https://leetcode.com/problems/majority-element/]
35. Find All Anagrams in a String [https://leetcode.com/problems/find-all-anagrams-in-a-string/]

Всем хорошей рабочей недели 🐾

P.S. Если кому-то недавно давали интересную задачу с литкода и ее нет в этом списке, то поделитесь плиз в комментах 👨‍💻
Please open Telegram to view this post
VIEW IN TELEGRAM