Как выигрывать Kaggle соревнования: LLM-анализ выигрышных решений

Примерно год назад энтузиаст с Kaggle по имени Дарек Клечек провел интересный эксперимент: он собрал все доступные описания (writeups) побеждавших на Kaggle за последние годы решений, пропустил их через LLM и свел по ним общую статистику о том, какие механики и алгоритмы оказываются «наиболее победными». Отчет у парня получился достаточно объемный, интересный, а местами и непредсказуемый. Эта статья — свободный авторский пересказ его эссе. Пусть прологом к ней послужит цитата Дарека:

«Я люблю побеждать. Когда я присоединяюсь к соревнованию, я изучаю победные решения из прошлых подобных конкурсов. На их чтение и осмысление уходит много времени, но это невероятный источник идей и знаний. Но что, если бы мы могли обучиться на всех соревнованиях? Это кажется невозможным, ведь их так много! Что ж, оказывается, что c LLM мы можем это сделать…»

Механика  

Для начала давайте разберемся с тем, как все это было реализовано. В основе анализа Дарека — API GPT-4 от OpenAI. Он использовал эту модель в два этапа: сначала для извлечения из описаний решений структурированный данных, а затем для очищения извлеченных из решений списков методов от шума. В качестве входных данных использовался этот датасет.

На первом шаге каждое описание подается в LLM, чтобы модель извлекла из него список упомянутых методов машинного обучения. Казалось бы, этого должно быть достаточно. Однако оказывается, что на выходе мы получаем довольно шумный список, поэтому мы переходим к следующему этапу. Здесь все извлеченные методы объединяются и снова направляются в LLM, задача которой — стандартизировать этот список, то есть каждому методу сопоставить более чистую категорию или, если угодно, кластер. Например, «размытие» и «вращение» объединяться в единую категорию «аугментация».

Получившаяся таблица. Столбец methods содержит шумный исходный метод, а столбец cleaning_methods – стандартизированную категорию.

Получившаяся таблица. Столбец methods содержит шумный исходный метод, а столбец cleaning_methods — стандартизированную категорию.

Автор упоминает, что в последствии также проводил дополнительную ручную чистку данных: в ходе нее он исправлял некоторые галлюцинации LLM и удалял шум, с которым модель не справилась. Весь код Дарек выложил здесь. Получившимся датасетом он, кстати, тоже поделился. Так что можно поэкспериментировать с ним самостоятельно :)

Самые популярные методы и приемы

Ну, а теперь перейдем к самому интересному — посмотрим, какими приемчиками и методами чаще всего пользуются победители Kaggle соревнований. Кстати, если какие-то из представленных ниже на графике методов вам не знакомы — подписывайтесь на наш тг-канал Data Secrets: там мы ежедневно выкладываем разборы свежих статей, полезные материалы и новости из мира ML.

8ed65e5b7496ee04b917e45464d1e79d.png

Итак, гистограмма выше иллюстрирует, что уверенное первое место в нашем рейтинге занимают ансамбли (Ensemble Methods). Пожалуй, неудивительно. Ну правда, кто из нас не пытался застекать или сблендить 100500 моделей?

Мем взят из тг-канала Data Secrets

Мем взят из тг-канала Data Secrets

Дальше — интереснее. На втором месте в рейтинге применяемых техник оказалась… аугментация. А вот всеми любимый бустинг спустился аж на четвертую позицию, его обогнали сверточные нейросети.

Аугментация — это важно?

А может, и не стоит так удивляться тому, что аугментация заняла почетное второе место? В реальной жизни самый важный аспект построения хорошей модели — это данные. На Kaggle данные нам уже даны, и основной способ их разнообразить и сделать датасет больше — аугментация. Если посмотреть на эту категорию «под микроскопом», получается такая картина:

023e20987b72309cc9b5567d9eef6691.png

Тут, помимо общей категории, мы видим популярный подход TTA (test-time augmentation — аугментация во время теста), целую кучу методов для преобразования изображений, и наконец, дополнение данных из внешних источников. Да-да, этого тоже не стоит стесняться. Особенно сейчас, когда под рукой LLM.

Кстати про Deep Leaning

А что там на счет CNN? Свертки то что забыли на третьем месте? Тут нужно помнить о том, что соревнования по компьютерному зрению были невероятно популярны на Kaggle в 2018–2023 годах. Поэтому, возможно, они просто преобладали в исходном наборе данных, по которым собирался анализ. Тем не менее, автора тоже заинтересовала такая статистика, и он решил сравнить динамику популярности трех основных архитектур нейросетей: сверток, рекуррентных сетей и трансформеров, которые сейчас считаются по умолчанию наилучшей архитектурой почти для любой задачи. Вот что вышло:

a29c6deb1197a7977e9d8f4a79c5113f.png

На графике видно, как глубокое обучение выходит на сцену Kaggle в 2016 году. Сначала мы пристрастились к CNN, а вскоре за ними последовали и RNN. Трансформеры были изобретены в 2017, на Kaggle начали появляться в 2019, а к 2022 году достигли пика. По мере роста популярности трансформеров, любовь к RNN заметно пошла на спад, но CNN поначалу продолжили процветать. Только в 2022, когда трансформер обрел настоящую славу, их популярность начала падать.

Градиентный бустинг

Вот еще один график, где к нашей Deep Learning троице присоединяется градиентный бустинг:

20157915eeccdab5816f2556245c5267.png

Что тут скажешь, настоящий dramatic fall. Доминирование градиентного бустинга до эпохи глубокого обучения, вероятно, неудивительно, особенно учитывая популярность табличных соревнований в то время. Конечно, потом, по мере того, как Kaggle добавлял все больше соревнований по CV и NLP, метод перестал быть настолько распространенным.

Но обратите внимание на 2022 год — в это время популярность бустинга снова начинает расти (на диаграмме, кстати, логарифмическая шкала). Дело в том, что многие участники приноровились использовать GBDT в сочетании с трансформерами или другими DL архитектурами. Например, в соревнованиях по NLP. Если хотите посмотреть на то, как такие коллаборации реализуются на практике, можете залезть в приведенный выше датасет и воспользоваться этим скриптом:

combined_methods = df.groupby(['year', 'competition_name', 'place', 'link']).agg({'cleaned_methods' : list}).reset_index()
combined_methods['both'] = combined_methods.cleaned_methods.apply(lambda x: 'Gradient Boosting' in x and ('Transformers' in x or 'CNNs' in x or 'RNNs' in x))
sample = combined_methods[combined_methods.both == True].sample(n=5, random_state=1)
for i, (_, row) in enumerate(sample.iterrows()):
    print(f'[{14 + i}] {row.place}st place in {row.competition_name} ({row.year}): {row.link}')

Лоссы и оптимизаторы

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

fdc7bb923767db5ea6ba75e1706772c9.pnga668a8334727dc65790e6a1fab75922d.png

Получается довольно интересная картина: дефолтные лоссы и оптимизаторы оказываются самыми надежными! Наверное, не зря они считаются дефолтными :) Так, семейство Адам полностью захватило власть в мире оптимизаторов. Примерно то же самое и с лоссами: за исключением focal loss (почитать о нем можно здесь) большинство решений используют стандартные CE/BCE/MSE.

Лейбелинг и пост-обработка

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

3ef82a262628c7bd02e170426ad22f70.pngba93fabb4c19ea64b634ae815cfd98e6.png

Не удивительно, что самой излюбленной фишкой победителей оказывается pseudo-labeling и label smoothing. Они действительно работают хорошо. Ну, а что касается пост-обработки, то в этом топе магия точно есть: трешхолд, averaging, weighted averaging — все это определенно стоит иметь в виду.

Выводы

Итак. Вот чему нас учит все перечисленное AKA ваш чек-лист для следующего Kaggle соревнования:

  • Данные — это ключ: правильно их обработайте и грамотно дополните

  • Не забывайте про GBDT, CNN и RNN! О трансформерах всегда вспомнить успеете:)

  • Не игнорируйте дефолтные конфиги (оптимизаторы, функции потерь)

  • Попробуйте псевдо-лейбелинг

  • Уделите много времени и сил пост-обработке

  • Ну и, конечно, используйте старые добрые ансамбли!

Больше новостей, мемов и пасхалок из мира ML в нашем тг‑канале. Подпишись, чтобы ничего не пропустить!

© Habrahabr.ru