Бывала у вас такая ситуация. Выходит новая нейронная сеть и все руководство начинает требовать внедрить её? Половина коллег восторженно рассказывает о новом слое который позволил повысить точность сети? YoloV(N+1)? LLAMA100?
Изначальную версию статьи я публиковал на Медиуме. Так что в каком-то смысле перевод с улучшениями, но авторский.
Вот недавно вышел Qwen2 и YOLOV10. Пора менять? Нет больше хайпа с ML чем выход новых моделей. Каждый ролик про выход новой YOLO собирает массу просмотров. Все хотят менять свои модели! Как быть? Внедрять?
В этой статье я попробую рассказать как не поддаваясь хайпу и принимать взвешенные решения. Поговорим про ситуацию замены сети на аналогичную. Если сеть умеет что-то принципиально новое - скорее относится к компетенции продакт оунеров. И вопрос там стоит: "Нужен ли нам новый функционал"?
Так что говорить будем о ситуациях типа:
YOLOv(N)->YOLOv(N+1)
MobileNetV(N)->MobileNetV(N+1)
LLAMA->LLAMA2
Цель
Начнём с самого важного. Определить цель внедрения новой сети. Цель "новизна ради новизны" - очень плохо окупается. Когда приходит ресерчер с горящими глазами - это не очень хорошо выглядит для бизнеса. Какие могут быть более адекватные цели?
Ваша текущая нейронная сеть плохо работает, вам нужно минимум X, чтобы система заработала, а у вас Y?
Вы всегда стараетесь оптимизировать ваши модели. На это есть отдельный бюджет заложенный сверху (тут может не быть логики).
Ваша точность напрямую связана с вашим доходом/расходами.
Вы хотите оптимизировать вашу скорость, у вас есть бюджет времени на проверку нескольких дополнительных моделей
LLM based модели - знание о окружающем мире, о новых объектах и событиях
Вам нужно надувать щёки и эмитировать AI деятельность.
Вы ещё не выбрали модели и вам нужно проанализировать возможные варианты.
Может есть ещё пару-тройка адекватных причин. Но в целом всё упирается в ситуации где есть прямая связь точности с деньгами. Причины 2 и 6 - не будем даже рассматривать. К ML это не имеет отношения. Но часто встречается...
Про знание об окружающем мире тоже нечего добавить. Если это критично - то надо менять.
Начнём с кейсов завязанных на точность.
Точность всегда напрямую связана с скоростью. Вам нужно сравнивать и принимать решения для одинаковых моделей.
Если вы видите что вышел новый супер большой трансформер - то вам нужно его тестировать только если в вашем проде крутиться такая же большая модель. Сравнивать с ResNet-18, конечно, можно. Но главный вопрос - а почему вы раньше этого не сделали, если можете утяжелить модель.
Для достижения продуктовой точности не хватает ΔX%
Бывает что у вас есть явное понимание: "улучшение точности на ΔX поможет продукту работать лучше!". Но...
Нужно понимать что смена модели на аналогичную по перформансу примерно того же поколения никогда не даст значительный буст.
Замена ResNet (2015) на ConvNext (2023) может уменьшить ошибку на классификации. Но почти никогда это не будет “уменьшить ошибку в 2 раза”. Для сравнимого размера модели это где-то 5%-10%. Если вы меняете аналогичные модели соседних лет - разница будет минимальной. Для моделей с большой разницей лет:
ResNet-50 (76.1) vs ConvNeXt-T (82.1). Много ли это?
Это уменьшает ошибку на 6% от первоначальных ~24%. При этом ¾ ошибки останутся прежними. Значит ошибок будет примерно на 25% меньше. Это хорошо, но обычно не x2 или x3 от точности. Ещё более грустно если ваше точность уже больше 99%. Было 99,6% точности для ResNet-50, стало, вероятно, 99,7%.
Но как же красивые графики? Yolov10 лучшая!!
Но. Посмотрите многочисленные сравнения YOLOv8|YOLOv9|YOLOv10, etc (1, 2). Эта точность не там где вы ожидаете:
Граница детекции чуть чуть более аккуратная
Чуть чуть лучше детекция работает для очень маленьких объектов
Чуть чуть стабильнее работают болшие объекты
С LLM может быть то же самое. Лучше метрики на каком-то специфическом датасете? Может быть за счет поддержки других языков, которые вам не нужны в проде. А для 95% распределения ничего не меняется. И детекция в первую очередь определяется дататсетом. LLM модель не будет разбираться лучше в медицине если у вас не было медицинских датасетов в обучении.
Результат. Очень редко улучшения точности на dX можно добиться через смену модели. Это может чуть чуть улучшить метрики но и всё. Есть ли способы улучшить более ощутимо? См ниже.
Улучшения точности как процесс
Вы хотите улучшить перформанс модели так как ошибки напрямую влияют на ваш доход. Я вас поздравляю! Это очень редкая задача у Data Sientist'ов. Когда можно тратить время на оптимизацию сетей и процессов. Хотел бы напомнить, что перед тем как выбирать более мощную модель надо проверить несколько других подходов которые часто докидывают больше:
Исследовали ли вы ошибки? Можно ли собрать больше примеров с характерными ошибками? Часть добавление в датасет системных ошибок - это самый лучший способ улучшения точности. Так ошибку можно понизить даже на несколько порядков.
Пробовали ли вы тренировать более мощные модели? Это дает возможность оценить максимальную точность/насколько вы к ней близки. И если такая модель сильно точнее - настроить дистилляцию.
Пробовали ли вы оптимизировать аугментации под вашу задачу? Часто люди забывают что смотря на ошибки можно через аугментации качественно бустануть точность. Или наоборот, отключить аугментации которые ухудшают качество.
-
Пробовали ли вы оптимизировать LR/оптимайзер/функции потерь? Опять же, часто это забывают но тут может таиться больше точности чем в смене модели.
Если вы уже пробовали все эти вещи - имеет смысл заняться тестированием других моделей.
Выбор модели с нуля/оптимизиация перформанса для существующего пайплайна
По сути это два единственных места где осмысленно перебрать несколько моделей. Но опять же. Я бы советовал хотя бы оптимизировать работу с датасетом и аугментациями прежде чем сюда лезть.
Что ещё не надо забывать
Квантизация - очень часто разные модули будут иметь разную точность после квантизации. И топовая модель может перестать топово перформить. Не забудьте проверить всё после квантизации.
Разные архитектуры. Бывает что для какой-то задачи лучше работает какая-то другая архитектура. Для классификации я это редко встречал, но для детекции и сегментации, особенно пару лет назад это было распространено. Так же в пример можно привести LLM где происходит генерация текста против энкодинга-декодинга.
Препроцессинг. Иногда правильный выбор подготовки данных может влиять на скорость/точность. Стандартный препроцессинг YOLOv8, YOLOv5 вот такой:
А если использовать на прямоугольниках и учить на них - будет быстрее:
Есть много других штук как пропроцессинг данных может улучшить вам модель.
Отличие теста от прода. Помните что корректная обучающая выборка куда важнее чем правильная модель. Следите за актуальностью обучающего датасета.
Хотите максимизировать качество при фиксированном перформансе? Помните что есть способы поиска оптимальной архитектуры на железки. Есть несколько компаний которые специализируются на этом. Есть несколько OpenSource решений. Но первое обычно дорого, а второе муторно и нестабильно.
Небольшое саммари
Нужно ли обновлять вашу модель? В целом нужно. Но хайпа тут реально больше чем реальной работы.
И немного подвала
Эта статья есть в формате видео, если кому-то так проще воспринимать:
А больше на тему ML, железа и оптимизаций я пишу вот тут.
Комментарии (16)
IamSVP
26.06.2024 02:30+1Раз уж тут в пример привели YOLOv5\v8 и rect window size, то так же скажу, что в наследнице v5 и промежуточкой между v8 - YOLOv7 модели (которую я использовал), с прямоугольным окном не все аугментации доступны, а значит на квадратном окне будет лучше качество (это видно по примерам изобр. батчей, что сохраняются в папку обучения)
Octoslav
26.06.2024 02:30Для fully CNN моделей есть разница на каком ascpect ratio работать? Сверткам главное такой же размер объектов в пикселях подавать, как при обучении
ZlodeiBaal Автор
26.06.2024 02:30Аугментациям в теории есть.
Но на практике всё то что в йолах используется - это мозаик, несколько кропов и цветовых. Так что не думаю что будет серьезная разница в статистике при обучении.
flancer
26.06.2024 02:30+1Ну вот, а я-то думал, что ИИ по экспоненте развивается - каждая следующая модель на голову выше предыдущей. Походу, с технологической сингулярностью не всё так скоро, как обещалось.
kuza2000
26.06.2024 02:30В своей задаче эти сети уже превзошли человека, дальше особо некуда. Но это всего лишь маленькая крошка сильного ИИ.
kuza2000
26.06.2024 02:30+3Разверну свой ответ.
Сети распознования изображений делают задачу сопоставления изображений и меток. Вот эту задачу они уже делают лучше человека. Поэтому особого прогресса именно этой задачи я не жду.
Несколько лет назад пробегало описание интересного случая. Тренировали сеть на чтение адреса дома по табличке. Процент ошибок на тесте был высоковат. Стали разбираться - нашли кучу ошибок в датасете, где человек прочитал неверно, а сеть - верно))Но на фото реальных объектов человек распознает их лучше. Я думаю, это потому, что используется не только анализ изображений. Например, человек знает другие свойства предполагаемых объектов, соотношение размеров, и т.д. Так же человек имеет знания о свойствах пространства, объемных формах объектов, свойствах перспективы и др. Поэтому, из нескольких гипотез, что подсовывает ему зрительная кора, он выбирает верную. А эти сети - это всего лишь аналог кусочка зрительной коры, сигналы пришли, тупо выбираем максимум, и все.
ZlodeiBaal Автор
26.06.2024 02:30+1Какие сети превзошли? Детекция?:)
Есть примерный паритет на очень больших датасетах на очень сложных задачах (какие-нибудь нетривиальные рентгены, многоклассовые задачи где человек плохо перформит). В первую очередь когда можно датасет собрать без разметки людьми и очень-очень большой..
Если у вас была невысокая точность разметки - может да, уперлось в датасет. Так бывает. Но это было то же самое 8 лет назад:)
Автономера качество лучше чем у человека - пока не реально. Трекинг - нереально. Распознавание большого числа товаров - нереально. И так в десятках задач.
Главная проблема - это корнеркейсы и аномалии. В сегодняшнем мире большей частью эта проблема и будет определять качество...
Squoworode
26.06.2024 02:30+1Почему на КДПВ так бурно реагируют на обратную сторону монитора? Я понимаю, что это нейро-КДПВ ради КДПВ, но что-то же она должна иллюстрировать?
ZlodeiBaal Автор
26.06.2024 02:30Восхищение от новой модели в проде!
Все же написано под картинкой:)Squoworode
26.06.2024 02:30Тогда бы они смотрели на рабочую часть дисплея, где видно модель...
ImagineTables
26.06.2024 02:30+2что-то же она должна иллюстрировать?
Она иллюстрирует Бессмысленность. И, по-моему, очень неплохо с этим справляется.
petlab
Текст статьи тоже нейронка писала? Не верю, что такое может накатать живой человек.
snakers4
Ссылка в шапке сразу ведёт на ресурс заблокированный за фейки о ВС РФ, а текст получен с помощью нейросетевого переводчика.
Контент который мы заслужили.