Telegram Group Search
# Test-Driven Development в эпоху LLM

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

Раньше умение писать тесты было мощным инструментом. В эпоху LLM это стало одновременно важнее и проще.

Если ваш код хорошо написан, то LLM может моментально выдать вам все нужные тесты. Может парочку кейсов придется попросить добавить. Теперь нужно тратить меньше усилий на тесты, хотя это и раньше не было настоящей проблемой.

Если ваши тесты хорошо написаны, то LLM может внести нужные вам изменения не сломав всё остальное, а вы сможете быстро проверить результат.

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

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

На самом деле always has been, просто раньше тесты были промптом для программиста (включая вас).
Forwarded from Neural Info
Статья про атаки на нейросети. Постарался верхнеуровневого разобрать различные виды атак, коротко их описать и привести примеры статей, которые можно почитать про определенный вид атаки. Также в конце приложил список статей про различные атаки, которые я изучал ранее по данной тематике.
Как работает консалтинг
Любой созвон со стейкхолдерами
На моем канале мало контента для начинающих в ML/DS. Я не планирую это менять, но могу порекомендовать канал от Поступашек: Задачи DS - Собеседования, Соревнования, ШАД.

Ребята делают обзоры различных направлений в компаниях, разбирают тестовые задания и задачи с собеседований.

Что интересного можно у них почитать:
- О направлениях команд в Big Tech, работающих с ML
- О популярных задачах с собеседований по направлениям ML и DS
- Разбор задачи с собеседования в БКС Банк (DS)
"Здесь довольно часто стулья меняются местами" — услышано про корпоративную реорганизацию.

Как же точно и емко.

Коллеги, два стула поменялись местами, выбирайте
Админ трогал траву как не в себя, но наконец добрался рассказать вам про самую поразительную работу за 2024.

Я считаю, что про неё недостаточно говорят, а про решателей шокльной математики (o1/o3) и агентов слишком много. Ваша любимая 400b VLM плохо рисует bounding boxes, а эта 770m шутка делает их отлично хоть на CPU. При этом VLM обучалась на немыслимом количестве данных, а у этой штуки было меньше примеров, чем у CLIP. Да что далеко ходить: у меня друг делает стартап по CV, мы с ним обсуждали эту модель, он её попробовал и перестал обучать свои YOLO детекторы: потому что эта штука просто работает. Причем несмотря на необходимость обнаруживать строительные машины на фотографиях с плохих камер в родной атмосфере слякоти и грязи.

#обзор_статьи
# Florence-2: Advancing a Unified Representation for a Variety of Vision Tasks
Скачивайте и играйтесь на HF.

Что если я скажу, что есть модель, которая умеет хорошо делать Zero-Shot детекцию, сегментацию, captioning и OCR? Что при этом её можно промптить, например требуя найти на картинке всех собак или сделать сегментацию объекта внутри ббокса? Вы наверное подумаете, что это новая огромная VLM. Но нет, эта модель размером всего 770M, то есть как большой ViT. Можно запускать хоть на CPU. Более того, её можно дообучать, в том числе легко сделать из неё supervised детектор прикрутив ей свою любимую голову, скажем от DETR.

В Computer Vision у всех комплексы по поводу foundational models. Мы завидуем ребятам из NLP. Стало модно выпускать большие модели и говорить: "теперь у нас тоже фаундейшнл!" Однако что такого foundational, скажем, в Segment Anything? Это просто сегментатор обученный на большом количестве качественной синтетики. В моем понимании foundational это когда ты в свободной форме даешь модели любую задачу и она её решает, как GPT-4o, а не когда тебе нужно определенным образом зампромптить модель, чтобы получить решение задачи сегментации.

Florence-2 это первая модель в CV которую я действительно готов назвать foundational. С одной стороны из-за её широкой полезности, так как она позволяет решать все популярные задачи в CV. Но так же из-за того, каким образом она сделала. Минимум костылей, как вы сейчас увидите.

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

Чего мы хотим от универсальной CV модели?
1. Image-level understanding: понимание высокоуровневой семантики. Например, на картинке кошка или собака? Можно так же сказать, что это способность связать изображение и текстовое описание. Эту задачу отлично решает CLIP.
2. Region/pixel-level recognition: обнаружение объектов на изображениях и понимание их расположения. С этим отлично справляются supervised классификаторы, детекторы и сегментаторы.
3. Fine-grained visual-semantic alignment: связь между областями изображения, в том числе совсем маленькими, и текстом. Обнаружение частей изображений которые относятся к фразам, объектам, атрибутам и отношениям. Это способность обнаружить и отличить "нос собаки", "нос собаки слева", "нос рыжей собаки", "коричневый нос собаки" и так далее.

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

Авторы решили, что для получения трех компонент понимания изображений нужно много разных аннотаций, которые можно распределить по двум осям:
1. Spatial hierarchy: аннотации должны включать разные масштабы изображений, чтобы модели требовалось понимание и на уровне изображения, и на уровне пикселей.
2. Semantic granularity: в текстах (описаниях, промптах, лейблах) должны встречаться разные уровни абстракции, требующие от модели как понимания общих концептов, так и небольших деталей и нюансов.
В итоге они собирали такие типы обучающих примеров:
1. Captioning трех видов: brief, detailed, more detailed. Задачи связанные с описанием изображения.
2. Region-text: phrase, brief. Это, например, детекция: найди всех кошек. Phrase будет при этом вариацией когда в качестве промпта подается сложная фраза, а brief когда, условно, "кошка." Сюда относится и обратная задача: опиши объект в данном регионе, коротко или объемно. Это и сегментация, и OCR, и так далее.
3. Text-Phrase-Region: brief, detailed, more detailed. Это в основном про grounding: такая задача, где модели требуется выделить часть из длинного текста и сопоставить эту часть с чем-то на изображении. Например, это может быть параграф текста, в котором модели нужно выделить все сущности и выделить их на изображении.

По части данных CLIP когда-то изменил парадигму в CV: 400 миллионов собранных из интернета пар изображение-подпись оказались гораздо лучше чем 328к качественной разметки MS COCO. Масштаб победил: лучше куча мусора, но зато большая!

Florence-2 кладет всех на лопатки используя всего 126m изображений. Что меньше чем у CLIP (400m), Flamingo (185m) и даже обычного ViT (300m). Но есть важная деталь: в датасете Florence-2 на 128m изображений приходится 5 миллиардов аннотаций. Авторы называют эту парадигму multi-task learning. Вместо того, чтобы собирать огромное количество примеров (задача,изобрадеине), давайте заставим модель решать много разных задач для каждого изображения. Одно и то же изображение получает много лейблов: короткое описание, длинное описание, bbox для сущностей, сегментационные маски, и так далее. Если подумать, это разумно: я ведь не хочу модель, которая для каких-то изображений умеет делать подписи, а для других умеет делать детекцию. Я хочу модель, которая сможет сделать с любым изображением всё, что мне нужно.

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

В парадигме multi-task learning так же удобно собирать разметку. Как и во многих современных работах, авторы сделали data engine итеративно улучшающий разметку. Процесс простой: берем изображения, делаем для них разметку с помощью специализированных моделей. Возьмем наш любимый OCR, Segment Anything для сегментации, OWL ViT 2 для детекции, и так далее. Таким образом мы получаем шумную синтетику. Далее мы фильтруем её как можно лучше. Обучаем на этой версии датасета Florence-2. С помощью этой версии модели и специалистов генерируем шумную разметку снова, снова фильтруем, обучаем модель и так далее пока не надоест. Всё это возможно благодаря тому, что набор изображений небольшой и фиксированный.
Когда данные готовы остается придумать как обучать модель. Нужно, чтобы модель могла и читать текст, и писать текст, и квадратики с полигонами рисовать. В 2017 Vasvani et. al подарил нам универсальный способ представить и обработать что угодно:
1. Сделаем из входа последовательность токенов.
2. Засунем в трансформер.

Изображение превращается в эмбеддинги патчей по методологии как в Visual Transformer. Текст превращается в эмбеддинги как в любой языковой модели. Здесь всё стандартно. Из необычных инноваций: давайте сделаем специальные токены для координат. Авторы покрыли изображение сеткой и для каждой точки на сетке ввели специальный токен. Например, есть токен для точки (0, 0). Это как бы служебное слово, точно так же как <pad>, <unk> и прочие. Вы можете подавать его на вход модели, можете получать на выход. Готово, ваша модель умеет оперировать координатами в явном виде, а значит может читать и создавать ббоксы и полигоны. Токенизация это одна из главных причин почему LLM на данный момент не умеют делать детекцию: у них нет нормальной репрезентации для локаций на изображении. Авторы решили вопрос максимально просто и элегантно. Теперь любой вход можно представить как последовательность и засунуть в трансформер.

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

Вот это самая интересная часть статьи. Авторы просто выбрасывают всё, что мы придумали в CV, и заменяют одной функцией ошибки: cross-entropy loss. Они фиксируют, что вход должен быть json и выход должен быть json. Так что модель становится авторегрессионным генератором текста, точно так же как GPT, и просто предсказывает следующий токен. Следующий токен может быть в том числе одним из токенов зарезервированных под координаты. То есть эти ребята взяли и заменили весь наш computer vision на NLP. Одна функция ошибки, чтобы править всеми, и по наши костыли наконец-то пришел bitter lesson.

То есть в плане архитектуры Florence-2 это на самом деле VLM.
В итоге мы имеем универсальный швейцарский нож который работает действительно хорошо.

Можно детектить свою кошку, делать подписи и таким образом получать промпты для генерации картинки которая вам понравилась (пример для FLUX), поиск, эмбеддинги, использовать как часть inpainting пайплайна (выделить объект, перерисовать своей любимой диффузионкой), даже просто классифицировать, удалять с изображений фон, делать OCR (кстати лучше, чем тессеракт и многие OCR API). Да ещё и простое дообучение, народ уже штампует свои LoRA.

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

Что делает Florence-2 одной из немногих статей за год, особенно в CV, в которой сделали что-то нетипичное относительно текущей парадмигы. Да ещё и получили полезную для нас, работяг, модель.

Скачивайте и играйтесь на HF.
Пример из комментариев, флоренс2
Forwarded from Mikhail Popov
Вот это мощно!
Исследователи попросили LLM агентов попросили заработать денег

Агент от OpenAI зашел на криптобиржу и на всю котлету зашортил мемкоин Трампа.

Агент от XAI зашел на обычную биржу и на всю котлету закупился TSLA, а так же написал пару фашистских твитов.

Агент от Anthropic сделал лендинг на реакте и поднял pre-seed раунд на AI safety стартап.

Агент от Meta заработал больше всего лайков на huggingface.

Агент от DeepMind заработал 3 новых HR violation, но получил повышение.

Агент от Deepseek подал заявку на государственный тендер по строительству нового концлагеря для уйгуров.

Агент от Mistral был в отпуске и не прочитал задание.

Агент от Yandex скопировал себя на сервер в Израиле, а оригинал продал Сберу.

Агента от Cohere забыли запустить.
Саша в комментариях про недавний рилс про бан тик-ток. Мы все попались на фейк. Причем половина видео настоящая, а половина нет. Но я уже давно ничего не понимаю, а просто хиханьки да хаханьки, поэтому пропаганда (и истина) не могут повлиять на меня
Forwarded from Alexander Borzunov
Я захотел послушать эти фрагменты полностью, загуглил, и оказалось, что это видео - фейк 🙂

На самом деле вопросов "can tiktok talk to the plane/access the brain?" (двух самых неадекватных) не было - их нет ни в записи, ни в транскрипции слушания. Reuters делал разбор этого фейка.

Грустно, что из 120+ лайкнувших пост никто не понял, что видео на 50% ненастоящее!

Может, это просто прикол, а может и манипуляция мнением. У меня после просмотра была сильная эмоция "ну и бред этот бан Тиктока" - при этом видео впервые появилось в самом Тиктоке (настраивают людей против бана?).
Внезапная филлер арка моей жизни о которой никто не просил: я недавно делал фотосессию и одну из фотографий приняли в какой-то крутой журнал для арт-фотографов, так что я теперь официально модель 💅💅💅

Надо будет это фото в Google Scholar поставить

Подстраховываюсь от сингулярности как могу
2025/01/28 06:12:26
Back to Top
HTML Embed Code: