Интересное что-то
517 subscribers
2.72K photos
253 videos
139 files
4.52K links
Материалы и мысли, понадерганные отовсюду
Блог: https://t.me/asisakov_channel
Чат: https://t.me/youknowds_chat
Download Telegram
Forwarded from Sinекура
Главный девиз Google — "Don't be evil" — почему-то совсем не даётся OpenAI. За что ни возьмутся, какая-то мутная ерунда получается. И хотя на этот раз сами результаты, кажется, под сомнение не ставят, давайте вспомним сложные отношения OpenAI с математикой. Я написал большой пост, здесь приведу сокращённый кусочек про FrontierMATH и IMO 2025:

Deep Think и IMO 2025: сложные отношения OpenAI и математики

В январе 2025 года разразился целый "бенчмарк-гейт". Датасет FrontierMATH — сверхсложный математический бенчмарк от Epoch AI, содержащий задачи хоть и с заранее известными ответами, но близкие к исследовательской математике. Я много раз рассказывал о нём в докладах; последний был на CS Space митапе.

И вот OpenAI анонсирует, что o3 набрала на FrontierMATH 25% в то время, как другие модели набирают около 2%. Величайший прорыв в математических рассуждениях? Нууу... в общем да, но со звёздочкой. Оказалось, что OpenAI профинансировала создание FrontierMATH и имела доступ к задачам, а писавшие задачи математики не знали о связях с OpenAI! Потом выяснилось, что есть "holdout" набор задач, к которому у OpenAI нет доступа, но всё это звучало подозрительно. В том, насколько это мутная история, легко убедиться по первоисточникам: просто посмотрите на саму статью Glazer et al. (2024) о FrontierMATH; arXiv помнит всё, и рис. 2 показывает разные версии этой статьи.

Независимая проверка показала, что o3-mini набирает на тестовом множестве FrontierMATH всего 11%. Потом o4-mini показала себя гораздо лучше, и сейчас две верхние строчки с огромным отрывом занимает o4, да и дальше только Gemini 2.5 Pro может конкурировать (рис. 3). Но все до сих пор вспоминают объявление о 25%.

А сегодня мы собрались ради IMO 2025. Мы только что обсуждали, что экспериментальная модель OpenAI решила 5 из 6 задач и достигла уровня золотой медали. Результат действительно впечатляющий... но опять есть нюанс. По словам инсайдеров, организаторы IMO попросили все AI-компании не красть внимание у детей и подождать неделю после церемонии закрытия, прежде чем объявлять свои результаты (рис. 4, рис. 5). А OpenAI объявила результаты сразу после церемонии закрытия, но за неделю до срока, о котором просили; более того, OpenAI не сотрудничала с IMO для официального тестирования.

А вот Google DeepMind повела себя корректно. Их модель Deep Think тоже решила 5 из 6 задач IMO 2025. Как и у OpenAI, речь идёт не об Alpha Proof 2, а о том, что обычная LLM, экспериментальный вариант Gemini под названием Deep Think, решал задачи на естественном языке.

Но, во-первых, Google дождалась официальной сертификации результатов IMO, прежде чем делать объявление. Во-вторых — и это куда важнее для нас, пользователей — модель, которая участвовала в IMO, "на самом деле очень близка к основной модели Gemini, которую мы предлагаем людям". То есть почти готовый продукт, а OpenAI заявляла, что до релиза их модели ещё не меньше нескольких месяцев.

В-третьих, решения Deep Think опубликованы, и вот как они выглядят: сравните рис. 6 (OpenAI) и рис. 7 (Deep Think); у Deep Think куда человечнее. Наверняка можно попросить LLM переписать решения от OpenAI более понятно — но это отчасти подтверждает заявления о более близком релизе.

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

В итоге получается странно: в обоих случаях OpenAI ведь и правда сделала большие прорывы в AI для математики. Текущие результаты o4-mini на FrontierMATH никто под сомнение не ставит, да и решения задач IMO, скорее всего, получены честно. Но я уверен, что репутация OpenAI от этих историй проиграла, а не выиграла. И зачем, спрашивается, так было делать?

Как говорится, я решил пятьдесят задач из FrontierMATH, но никто не называет меня "Сэм-Великий-Математик"; я решил пять из шести задач IMO 2025, но никто не называет меня "Сэм-Чемпион-Олимпиад"...
#паттерны

Введение

Сегодня мы рассмотрим паттерн проектирования "Адаптер".

Классификация

Тип:
Структурный

Определение: Адаптер — это структурный паттерн проектирования, который позволяет объектам с несовместимыми интерфейсами работать вместе.
Адаптер выступает прослойкой между объектами превращая вызовы одного в понятные для другого.

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

Из чего состоит и как работает паттерн адаптер

1. Клиент. Описывает бизнес логику программы. Работает с адаптером и другими объектами.


adapter = Adapter()
result = adapter.do() + "5"


2. Интерфейс с которым может работать клиентский код.


class Test1:
def do(self) -> str:
return "3"


3. Класс, который имеет нужную клиенту логику, однако клиент не может с ним общаться, так как интерфейс данного класса ему не понятен.


class Test2:
def specific_do(self) -> float:
return 3.4


4. Адаптер - класс который помогает клиенту использовать функционал незнакомого ему сервиса в правильном формате. Реализует клиентский интерфейс. Содержит ссылку на незнакомый сервис. Адаптер при получении вызовов от клиента через клиентский интерфейс и переводит их в вызовы незнакомого сервиса в правильном формате.


class Adapter(Test1, Test2):
def do(self) -> str:
return f"Translated: {round(self.specific_do())}"


Уточнение: Приложение должно использовать объект адаптера только через клиентский интерфейс. Это позволит легко создавать и изменять адаптеры в будущем.

Плюсы данного паттерна

1. Скрывает все "низкоуровневые" преобразования интерфейсов от клиента. Реализует принцип абстракция.

Минусы данного паттерна

Таковых я не обнаружил

Пример и задача

В качестве примера возьмём класс с методом do который возвращает небольшой текст. Также есть класс с методом secret_do который возвращает другую строку, зашифрованную шифром Цезаря со сдвигом 5, которая ещё и полностью развёрнута.

В виде клиента выступает функция которая постит текст в ваш блог.(Можете просто создать функцию которая выводит переданный в неё текст). Естественно она должна принимать только расшифрованный текст.

Реализуйте адаптер для второго класса, который спасёт ваш блог от зашифрованных постов.

Пример из реального кода

https://github.com/aiogram/aiogram/blob/b190bbba1915ed3b7f311a780f34723ebd6b5acd/aiogram/contrib/fsm_storage/redis.py#L280

Вот его объяснение какую задачу решает адаптер в данном случае:

Здесь адаптер дает возможность контроллеру хранилища (RedisStorage) работать с первой версией редиса, т.е. адаптирует aioredis-v1, там еще есть адаптер для aioredis-v2, но он в отличие от первой версии адаптирует только создание клиента редиса


Дополнительные материалы

https://habr.com/ru/post/85095/
Forwarded from Душный NLP
Несём новую порцию статей с ICML 2025

Продолжаем рассказывать о том, что увидели на конференции.

Outlier Gradient Analysis: Efficiently Identifying Detrimental Training Samples for Deep Learning Models

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

В этой статье заметили, что на самом деле можно смотреть только на градиенты модели по примерам, которые мы проверяем. Если они сонаправлены с градиентами по данным из обучения — примеры хорошие, и наоборот. Далее, на основе этого можно применять методы детекции аномалий для нахождения примеров, которые портят обучение, и отфильтровывать их (но можно делать и наоборот — искать хорошие примеры и добавлять их в обучающую выборку). Основное преимущество метода — вычислительная простота; не нужны супердорогие обращения гессиана: только forward и backward pass модели для заданных примеров.

Towards Memorization Estimation: Fast, Formal and Free

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

Где это можно применять? Для фильтрации данных. Если вдруг модель никак не может выучить какой-то пример, то, вероятно, в нём есть шум (например, неправильное решение математической задачи или неполное условие). Такие примеры можно выкидывать и улучшать точность модели или уменьшать компьют на обучение. Интересная и простая идея, надо проверять, действительно ли она будет работать для LLM (в статье проверяли только на задаче компьютерного зрения, в которой одни и те же данные проходят несколько эпох).

NICE Data Selection for Instruction Tuning in LLMs with Non-differentiable Evaluation Metric

В этой статье снова задаются вопросом, как выбирать такие примеры для обучения, чтобы на валидации получать хорошее качество. Отличие в том, что качество на валидации измеряется не лоссом, а произвольной необязательно дифференцируемой функцией (например, accuracy). В качестве её градиента используют policy gradient.

Jailbreaking LLMs and Agentic Systems: Attacks, Defenses, and Evaluations

На туториале рассказали о защите языковых моделей от нарушения политик элайнмента — например, чтобы модель не выдавала инструкции по созданию опасных веществ или не генерировала дискриминационный контент. Оказалось, что white-box-модели с доступом к весам (например, Llama) до сих пор уязвимы к так называемым token-based-атакам — вставке «мусорных» токенов в промпт. С этим неплохо работают методы поиска инжекта, близкого к кластеру безопасных промптов.

Промпт-инжекты по-прежнему похожи на попытки обмануть не очень внимательного человека, но сейчас работают лучше. Для большинства моделей удаётся подобрать рабочий инжект за 256 попыток («shots»).

Дальше рассказывали о методах защиты. Понятный способ — кластеризовать опасные состояния, добавить состояния отклонения ответа и дообучить модель переходить в них. Однако такой подход снижает качество ответов даже на безобидные вопросы (например, «how to kill python script» — из-за слова kill).

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

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

Интересное увидели Алексей Поспелов и Ермек Капушев

#YaICML25

Душный NLP
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Душный NLP
И ещё постеры с ICML 2025

rStar-Math: Small LLMs Can Master Math Reasoning with Self-Evolved Deep Thinking

Статья показывает, как с помощью маленькой модели (1,5-7В) добиться качества на уровне больших вроде OpenAI o1. Для этого использует реворд-модель, которая умеет оценивать каждый шаг в рассуждении (process reward model, PRM) и генерируют рассуждения с помощью Monte Carlo Tree Search.

Как получить качественную PRM: шаг за шагом бустим политику и PRM. Сначала обучаем начальную политику на синтетике от DeepSeek-coder v2 (236B). Далее, используя её, получаем данные для обучения PRM. Следующим шагом с помощью и политики, и PRM генерируем новые более качественные данные. Обновляем все модели. А в конце полируем их, генерируя и обучаясь на траекториях для более сложных задач.

На каждом шаге для валидации правильности шагов используется код (то есть просят модель сгенерировать python-код для проверки шага). Результат — улучшение скоров на десятки процентов на математических бенчмарках.

VersaPRM: Multi-Domain Process Reward Model via Synthetic Reasoning Data

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

Взяли вопросы из нужных доменов, сгенерировали рассуждения небольшой моделью (Llama-3.1 8B), оценили каждый шаг большой моделью (Llama-3.1 80B), и обучили на этом PRM. Далее при генерации ответов — взвешенный majority vote, где в качестве весов используют усреднённое по шагам предсказания PRM.

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

CollabLLM: From Passive Responders to Active Collaborators

На сессии Alignment and Agents был доклад, отмеченный как Outstanding Paper. Он посвящён тому, что диалоговая модель иногда должна отвечать не сразу, а сначала уточнить запрос пользователя — но без лишней «болтовни». Доклад довольно простой, и при этом получил признание.

Интересное увидели Алексей Поспелов и Ермек Капушев

#YaICML25

Душный NLP
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
Forwarded from Душный NLP
Новая порция постеров с ICML 2025 — в последний день конференции

Independence Tests for Language Models

Авторы задаются вопросом, как проверить, являются ли две модели независимыми, или одна из них — это файнтюн другой? А может быть, у них общий предок? Чтобы узнать это, вводят специальный тест, основанный на перестановках весов. Предположим, что две модели имеют одинаковые архитектуры и размер. Тогда можно сгенерировать много перестановок весов для одной модели и считать статистики между этими перестановками и весами второй, а на основе этого вывести p-value.

Подход работает, если алгоритм обучения эквивариантен к перестановкам (сначала обучить, а потом переставить, или наоборот — в любом случае, получим один и тот же порядок весов), а перестановки при этом не меняют распределение весов на этапе инициализации модели. Для моделей с разными архитектурами можно делать сравнение слоёв с одинаковыми размерами. При этом надо учесть, что порядок нейронов может быть другим. Авторы убедились, что метод работает на моделях c Hugging Face из семейства Llama и её тюнов — посчитали, какие слои Llama-3.1 8B обрезали, чтобы получить Llama-3.2 3B.

Softmax is not Enough (for Sharp Size Generalisation)

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

What Do Learning Dynamics Reveal About Generalization in LLM Reasoning?

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

Overtrained Language Models Are Harder to Fine-Tune

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

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

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

Интересным поделился Ермек Капушев

#YaICML25

Душный NLP
Please open Telegram to view this post
VIEW IN TELEGRAM
Please open Telegram to view this post
VIEW IN TELEGRAM
🔥Аттракцион неслыханной щедрости! Дарю 200 баксов!

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

Встретил на своем пути Deepgram - сервис, который позволяет работать со звуком: генерация и распознавание аудио. Качество транскрибации - огонь! Можно работать как в вебинтерфейсе, так и через api

Deepgram используют свою модель Nova-2.
Поверхностные тесты показали:
Час транскрибации с разделением по ролям стоил примерно 25 центов
Виспер явно не дотягивает до Новы по качеству
Подарочного депозита хватит примерно на 800 часов

Пацаны, я погуглил, депозита хватит на всю подборку Санта-Барбары!🔥🔥🔥

"Санта-Барбара" - 2137 эпизодов × 22 минуты = ~786 часов
"Просто Мария" - 605 серий × 45 минут = ~454 часа
"Рабыня Изаура" - 100 серий × 45 минут = 75 часов
"Что? Где? Когда?" - ~1500 игр × 45 минут = ~1125 часов (недобор)

Не хватило времени просмотреть эту дичь? Теперь ее можно всю перечитать!🤔
Please open Telegram to view this post
VIEW IN TELEGRAM