Kaggle-подходы для CV в проде: внедрить нельзя выпилить |
||
МЕНЮ Искусственный интеллект Поиск Регистрация на сайте Помощь проекту ТЕМЫ Новости ИИ Искусственный интеллект Разработка ИИГолосовой помощник Городские сумасшедшие ИИ в медицине ИИ проекты Искусственные нейросети Слежка за людьми Угроза ИИ ИИ теория Внедрение ИИКомпьютерные науки Машинное обуч. (Ошибки) Машинное обучение Машинный перевод Реализация ИИ Реализация нейросетей Создание беспилотных авто Трезво про ИИ Философия ИИ Big data Работа разума и сознаниеМодель мозгаРобототехника, БПЛАТрансгуманизмОбработка текстаТеория эволюцииДополненная реальностьЖелезоКиберугрозыНаучный мирИТ индустрияРазработка ПОТеория информацииМатематикаЦифровая экономика
Генетические алгоритмы Капсульные нейросети Основы нейронных сетей Распознавание лиц Распознавание образов Распознавание речи Техническое зрение Чат-боты Авторизация |
2019-02-22 02:13 Среди дата сайнтистов ведется немало холиваров, и один из них касается соревновательного машинного обучения. Действительно ли успехи на Kaggle показывают способности специалиста решать типичные рабочие задачи? Арсений arseny_info (R&D Team Lead @ WANNABY, Kaggle Master, далее в тексте A.) и Артур n01z3 (Head of Computer Vision @ X5 Retail Group, Kaggle Grandmaster, далее в тексте N.) отмасштабировали холивар на новый уровень: вместо очередного обсуждения в чате взяли микрофоны и устроили публичное обсуждение на митапе, по мотивам которого и родилась эта статья.
Метрики, кернелы, лидерборд A: Ты упомянул “кернелы”, и к ним у меня есть отдельная претензия. Многие соревнования превратились в kernel driven development. Я не стану заострять внимание на вырожденных случаях, когда золотая медаль могла достаться благодаря удачному запуску публичного скрипта. Тем не менее, даже в соревнования по deep learning теперь можно получить какую-то медаль, почти не писав код. Можно взять несколько публичных решений, особо не разбираясь покрутить какие-то параметры, проверить себя на лидерборде, усреднить результаты и получить неплохую метрику. Раньше даже умеренные успехи в “картиночных” соревнованиях (например, бронзовая медаль, т.е. попадание в топ 10% итогового рейтинга) показывали, что человек на что-то способен — нужно было как минимум самому написать нормальный пайплайн от начала и до конца, не допустить критических багов. Сейчас эти успехи девальвировались: Kaggle вовсю продвигает свою платформу кернелов, которые снижают порог входа и позволяют как-то экспериментировать без осознания, что к чему. N: Бронзовая медаль никогда не котировалась. Это и есть уровень “я что-то там запустил, и оно обучилось”. И это не так уж и плохо. Понижение уровня входа за счет кернелов и наличие GPU в них создает конкуренцию и поднимает общий уровень знаний выше. Если год назад можно было получить золото с помощью ванильного Unet’a, то теперь без 5+ модификаций и трюков просто не обойтись. И эти фокусы работают не только на Kaggle, но и за его пределами. Например, на aerial-Inria наши чуваки из ods.ai зашли с ноги и показали state of the art просто своими сильными пайплайнами по сегментации, наработанными на Kaggle. Это показывает применимость таких подходов и в реальной работе. A: Проблема в том, что в реальных задачах нет лидерборда. Обычно нет одного числа, которое показывает, что все пошло не так или, наоборот, все отлично. Часто есть несколько чисел, они противоречат друг другу, увязывать их в одну систему — тот еще вызов. N: Но метрики так или иначе важны. Они показывают объективный перфоманс алгоритма. Без алгоритмов с метриками выше некоторого юзабельного порога невозможно создавать сервисы на базе ML. A: Но только если они честно отражают состояние продукта, что не всегда так. Бывает, что нужно дотащить метрику до какого-то гигиенического минимума, а дальнейшие улучшения “технической” метрики уже не очень соответствуют продуктовым улучшениям (пользователь не заметит эти +0.01 IoU), корреляция между метрикой и ощущениями пользователя теряется. Кроме того, классические kaggle способы наращивать метрику неприменимы в обычной работе. Не нужны искать “лики”, не нужно воспроизводить разметку и находить правильные ответы по хешам файлов. Надежная валидация и ансамбли жирных моделей N: Понятие “простой сингл модели” в Kaggle-тусовке и для продакшен-окружения могут разительно отличаться. В рамках соревнования это будет одна архитектура, обученная на 5/10 фолдах, с развесистым енкодером, в инференсе можно ожидать test time augmentation. По меркам конкурсов это действительно простое решение. Но для продакшена часто нужны решения на пару порядков проще, особенно если речь идет о мобильных приложениях или IoT. Например, у меня Kaggle-модели обычно занимают 100+ мегабайт, а в работе модели больше нескольких мегабайт часто даже не рассматриваются; аналогичная разбежка есть и в требованиях к скорости инференса. N: Однако если дата сайнтист умеет обучить тяжелую сетку, то все те же приемы подходят и для обучения легковесных моделей. В первом приближении можно взять просто аналогичную сетку полегче или mobile версию той же архитектур. Квантизация весов и прунинг за пределами компетенций кэгглеров – тут спору нет. Но это уже очень специфичные навыки, которые далеко не всегда остро необходимы в проде. Зато куда более частая ситуация в реальных задачах, что есть маленький A: Псевдолейблинг бывает полезен, но в конкурсах его используют не от хорошей жизни — только из-за того, что доразмечать данные нельзя. Данные, полученные при помощи псевдолейблинга, хоть и улучшают метрику, не так полезны, как ручная доразметка недостающих данных. Что из себя представляет псевдолейблинг? Мы берем существующие модели, смотрим, где они дают уверенные предсказания, эти семплы вместе с предсказаниями закидываем в наш датасет. При этом сложные для модели семплы остаются неразмеченными, т.к. сейчас эти предсказания недостаточно хороши. Замкнутый круг! На практике гораздо полезнее найти те семплы, которые заставляют сеть выдавать неуверенные предсказания, и доразметить именно их. Это требует много ручного труда, но эффект того стоит. О красоте кода и командной работе A: Качество кода — спорная вещь на кэггле, я согласен. Однако я встречал и людей, которые писали очень достойные пайплайны, которые могли переиспользоваться и для других задач. Но это скорее исключение: в пылу борьбы качество кода приносится в жертву в пользу быстрых проверок новых идей, особенно ближе к концу соревнования. Зато Kaggle учит командному взаимодействию. И ничто так не сплачивает людей, как общее дело, общая понятная цель. Можно попробовать поучаствовать в соревнованиях с кучей разных людей, понетворкаться и развить soft-скиллы. A: Команды в стиле Kaggle тоже бывают очень разными. Хорошо, если там действительно есть какое-то разделение задач по ролям, конструктивное взаимодействие, и каждый вносит свою лепту. Тем не менее, команд, в которых каждый делает свой big ball of mud, а в последние дни соревнования все это неистово смешивается, тоже хватает, и ничему хорошему это тоже не учит — настоящая разработка софта (в т.ч. data science) так не делается уже очень давно. Summary Давайте подведем итог. Источник: habr.com Комментарии: |
|