Чего хотят конференции: воспроизводимость экспериментов в data science

6d370f3e35ce4713a662100fc7d090bc.png

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

Ожидания растут, в 2021 уже 9 из 10 конференций предлагают авторам провериться на воспроизводимость. Сдать тест, заполнить опросник, привести свидетеля и т. д. 

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

Эксперименты в машинном обучении

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

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

Структура эксперимента

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

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

Так вот, анализ представленных статей на конференции AAAI 2014, AAAI 2016, IJCAI 2013 и IJCAI 2016 показывает, что доля экспериментальных работ составляет более 80% — в разы выше чисто теоретических!

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

Вот список конференций и требования по повторяемости результато на апрель 2021 года. Список получен по GuideToResearch (Top 100), поиском по категории Machine Learning, Data Mining & Artificial Intelligence. Уровни и ссылки собраны вручную.

В таблице указаны вот такие уровни требований:

  • Not found — требования по воспроизводимости не найдены в CFP или инструкциях автору.

  • Reminder — организаторы просят авторов предоставлять воспроизводимые результаты.

  • Encouraged — авторам предоставлен чеклист и настоятельно рекомендуется предоставить оценку соответствия ему, будет влиять на оценку работ.

  • Required — выполнение требований по воспроизводимости обязательно для подачи работы.

Что это значит и что такое воспроизводимость?  

Пока не заметно, чтобы от рецензентов требовали воспроизводить результаты авторов. На это, скорее всего, им не хватит времени, если только эксперимент изначально не автоматизирован. Могут попросить опубликовать код, заполнить чеклист, или уже отдельно проводят трек с повторением экспериментов. Наиболее распространены два чеклиста (пример раз от NeurIPS, пример два по мотивам исследований Gundersen et al.). 

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

При этом гипотеза, что соответствие чеклистам или устаналиваемым правилам повышает воспроизводимость все еще не подтверждена. Более того, по состоянию на 2020–2021 в области машинного обучения нет устоявшейся терминологии и, тем более, ее перевода на русский. Вот что используют в ACM при выдаче бейджей о воспроизводимости, в вольном переводе:

Повторяй за мной (repeatable experiment / повторяемый эксперимент)
Авторы могут получить те же результаты в пределах погрешности, используя заготовленные артефакты эксперимента.

Артефактами (artifact) здесь называются статья, экспериментальный стенд или его части, исходный код, инструкции к его запуску, данные или способ их получения и так далее, что можно идентифицировать и связать с экспериментом.

Делай вместо меня (reproducible / повторяемые результаты)
Другие исследователи могут получить те же результаты, используя артефакты от авторов.

Думай как я (replicable / воспроизводимые исследования)
По описанию эксперимента другие исследователи могут реализовать артефакты и сделать те же выводы из результатов.

Важно, что использование чеклистов для самопроверки поможет с «Повторяй за мной», но вряд ли с более высокими уровнями воспроизводимости.

Минутка философии.

Считается, что воспроизводимость — одна из основ научного метода познания https://en.wikipedia.org/wiki/Reproducibility

Постпозитивист и автор теории потенциальной фальсифицируемости Карл Поппер пишет в середине XX века:

«non-reproducible single occurrences are of no significance to science»

— Popper, K. R. 1959. The logic of scientific discovery. Hutchinson, London, United Kingdom.

То есть единичные невоспроизводимые события не имеют значения для науки. Так то.

Для чего еще — повторное использование

Воспроизводимость и повторная используемость эксперимента оказывается полезной не только при подготовке публикации.

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

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

Если мы повторно используем часть эксперимента или эксперимент целиком, получим ли мы ожидаемые результаты?

С другой стороны. Например, нашли очень интересную статью на том же arxiv.org или paperswithcode.org. Будет ли полезно для проекта? Есть ли код? Есть ли данные? Могу ли повторить? Не могу. «Без кода вообще не смотрю», — цитата с круглого стола по воспроизводимости экспериментов.

И еще — provenance

То есть прослеживаемость. Вообще важная вещь! Есть даже Prov-ML модель предметной области проведения экспериментов в науках о данных. Корректность UML 2 подтверждена (кроме указания стереотипов в двойных угловых скобках, вместо << нужно «).

Примеры вопросов про прослеживаемость. Откуда у вас это значение? Кто получил результаты? На каком сервере были расчеты? Сколько ресурсов потрачено? Какая точность измерений?

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

А в чем сложности — мой исследовательский код идеален?!  

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

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

Исследовательский код — демонстрирует результат статьи/отчета/анализа, не используется/не требуется для понимания (есть же статья), воспринимается как дополнение к ней. При этом часто нужные компетенции для написания индастриал кода отсутствуют в команде. Действительно, рецензенты же не код смотрят (см. выше).

86fbd1e7d5e6152a6c56e6f3138a2c5c.gif

Вот что пишут, какой исследовательский код «достаточно хороший» на StackOverflow или StackExchange. «Исследовательский код должен корректно реализовывать алгоритм, который является результатом в статье. Код эксперимента — не код программного продукта, к нему не нужно предъявлять тех же требований. С другой стороны, вряд ли получат много доверия результаты, в представлении которых честно сказано, что код не проверен, скорее всего содержит ошибки, работает не понятно, каким образом.»

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

Повторяемость результатов на практике

Что позволено Юпитеру, не позволено быку

В статье про воспроизводимость Jupyter Notebooks, найденных на GitHub, указывается, что без ошибок и с повторением сохраненных результатов выполнились только 4% из полутора миллионов тетрадок.

4%, Карл!

Среди запусков тетрадок, завершившихся с ошибкой, топ ошибок такой:  

График из статьи A Large-scale Study about Quality and Reproducibility of Jupyter Notebooks.

Первое место — проблемы с зависимостями в библиотеках и зависимостями в зависимостях. Часть репозиториев использовали requirements.txt, часть setup.py. Не всегда помогает из-за транзитивных зависимостей.

Второе место — порядок исполнения. Тетрадка сохранена без прогона вчистую, порядок не сохранен и некоторые переменные объявлены или иницилизированы после использования.

Третье место — нет нужных данных, например, указаны абсолютные пути или данных вообще нет в репозитории.

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

  • Неуправляемая случайность в данных или алгоритмах (40%)

  • Зависимость вывода и результатов от функций времени (13%)

  • Различия отображения на графиках (некорректное использование matplotlib в том числе) (52%)

  • Недоступны внешние данные (3%)

  • Различия в выводе чисел с плавающей запятой (3%)

  • Непостоянный порядок обхода словарей и др. контейнеров в python (4%)

  • Различия в среде исполнения (27%)

А что с неЮпитером? Например, исследование повторяемости на R показывает примерно 44% воспроизводимости результатов (это как сравнивать красное с квадратным, но тем не менее). Аналогично указывается список причин, почему не удалось повторить результаты.

Как быть?

Никак. Ждать пока появятся гайд и подробные инструкции.

Причем похоже, что для воспроизводимости уровня «Думай как я» нужно уметь писать хороший текст и еще его уметь читать (см. «навык чтения статей по DL» вакансия в сами знаете какой компании, google it). 

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

Если в индустрии — см. построение пайплайнов и версионирование (a.k.a. MLOps), разобраться с исследовательским анализом данных (Exploratory Data Analysis, EDA) и делать его автоматическим, изучать тему, помогая опен-сорс проектам.

Если в академической среде — см. постановка эксперимента, оформление статьи, архивирование и публикация результатов.

Что еще стоит узнать — структуры репозиториев, работа с системой контроля версий, внимание — тестирование (обзор раз, рассказ два)!

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

P.S. FAIR принципы

Несмотря на то, что принципы находимых (Findable), доступных (Accessible), переносимых (Interoperable) и повторно используемых (Reusable) результатов исследований (FAIR) были представлены еще в 2016 году, большинство опрошенных исследователей все еще не понимают или не применяют их в своих работах.

Ссылки и полезности

[1] Круглый стол по вопроизводимости экспериментов в науках о данных с научной конференции МФТИ.

[2] Статья про скрытый технический долг в системах машинного обучения.

[3] Статья по тестированию наукоемкого ПО.

[5] Доклад по анализу кода Jupyter Notebooks. 

[6] Полезные слайды про проведение экспериментов и воспроизводимость.

[7] Статья по разработке исследовательского кода, Best Practices for Scientific Computing. 

[8] Top Ten Reasons (not) to Share your Research Code .

[9] Статья с результатами опроса, что больше влияет на воспроизводимость, Understanding experiments and research practices for reproducibility: an exploratory study

© Habrahabr.ru