Как получить высокоэффективные модели на соревнованиях

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

1. Всегда просматривайте прошлые соревнования.

Хотя политика Kaggle заключается в том, чтобы никогда не показывать два раза одинаковых конкурента, часто встречаются переделки очень похожих задач. Например, некоторые организаторы ежегодно предлагают регулярные соревнования по одной и той же теме (например, Big Data Bowl NFL), с небольшими вариациями, или в некоторых областях (например, в области медицинской визуализации) проводится много соревнований с разными целями, но очень подобный дух.

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

  • Сверточные нейронные сети или более сложные ResNet или EfficientNet в задачах компьютерного зрения,
  • WaveNet в задачах обработки звука (которые также можно решить с помощью моделей распознавания изображений, если вы просто используете спектрограмму Мела),
  • BERT и его производные (RoBERTa и т. Д.) В задачах обработки естественного языка,
  • Метод усиления светового градиента (или другие стратегии усиления градиента или деревья) для табличных данных

Вы можете найти похожие соревнования непосредственно на платформе Kaggle или взглянуть на это замечательное резюме Сундалая Раджкумара.

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

2. Вы никогда не тратите достаточно времени на подготовку данных

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

  • Очистите данные: никогда не предполагайте, что хосты работали над предоставлением вам максимально чистых данных. В большинстве случаев это неправильно. Заполните NaN, удалите выбросы, разделите данные на категории однородных наблюдений ...
  • Проведите простой предварительный анализ данных, чтобы получить общее представление о том, над чем вы работаете (это поможет вам получить идеи и идеи). Это самый важный шаг на данном этапе. Без надлежащих знаний о том, как структурированы ваши данные, какая информация у вас есть, какие общие особенности поведения имеют тенденцию индивидуально или коллективно по отношению к цели, вы будете ходить вслепую и не будете интуитивно понимать, как построить свою модель. Нарисуйте графики, гистограммы, корреляционные матрицы.
  • Расширьте свои данные: это, вероятно, один из лучших способов повысить производительность. Однако будьте осторожны, чтобы не сделать его настолько огромным, что ваша модель больше не сможет его обработать. Вы можете найти дополнительные наборы данных в Интернете (будьте очень осторожны с правами, иначе вас может постигнуть участь победителей конкурса Deepfake Detection Challenge за 1 миллион долларов) или на платформе Kaggle (в аналогичных прошлых соревнованиях!) или просто поработайте с предоставленными вам данными: переворачивайте и кадрируйте изображения, накладывайте аудиозаписи, выполняйте обратный перевод или заменяйте синонимы в текстах…

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

3. Попробуйте поискать по гиперпараметрам.

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

Наиболее распространенные стратегии поиска гиперпараметров включают:

  • Поиск по сетке (пожалуйста, никогда этого не делайте): на мой взгляд, это наихудший метод, поскольку вы можете полностью пропустить шаблон или очень локальный пик производительности для некоторых значений, он состоит или тестирования значений гиперпараметров, равномерно распределенных по интервал возможных значений, который вы определили;
  • Случайный поиск (и его производные по методу Монте-Карло): вы пробуете случайные значения ваших параметров. Основная проблема заключается в том, что это параллельный метод, который может быстро стать очень дорогостоящим, чем больше параметров вы тестируете. Тем не менее, у него есть то преимущество, что вы можете включить предварительные знания в свое тестирование: если вы хотите найти лучшую скорость обучения между 1e-4 и 1e-1, но вы полагаете, что она должна быть около 1e-3, вы можете рисовать образцы. из логнормального распределения с центром 1e-3.
  • Байесовский поиск: в основном случайный поиск, но улучшенный, поскольку он является итеративным и, следовательно, гораздо менее затратным. Он итеративно оценивает перспективную конфигурацию гиперпараметров на основе текущей модели, а затем обновляет ее. Это лучший результат из трех.
  • Другие методы, включая градиентный поиск или эволюционную оптимизацию, более опасны и обычно не применяются. Их можно рекомендовать в некоторых особых случаях.

Существует множество инструментов AutoML, которые могут очень хорошо выполнить эту работу за вас. Просто взгляните на отличные ресурсы Medium & TowardsDataScience по этой теме:

Однако вы должны быть осторожны и четко понимать, что означают значения гиперпараметров. Если у вас нет надежного набора для проверки и однородных данных, чрезмерная оптимизация гиперпараметров может привести к переобучению. Всегда предпочитайте рационально объяснимый выбор параметров выигрышу в точности до миллидесятичности обучающих данных.

4. Простые практики могут изменить правила игры.

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

  • В процессе оптимизации не забудьте добавить Планировщик скорости обучения, который поможет получить более точное обучение (начиная с малого, постепенно увеличиваясь, когда ваша модель хорошо обучается, например, уменьшая шаг на плато).
  • Все еще в процессе оптимизации, вы можете обернуть Lookahead вокруг вашего оптимизатора; Алгоритм упреждающего просмотра состоит из продвижения вперед k-шагов оптимизации, нахождения того места, где была наилучшая производительность, затем перехода на один шаг назад в направлении этого оптимума и возобновления обучения с этого момента. Теоретически вы получаете лучшую производительность, хотя я никогда не обнаружил, что это правда; но он стабилизирует обучение, что хорошо, когда ваши данные очень зашумлены.
  • Найдите подходящую инициализацию для ваших весов перед началом тренировки: если вы используете популярную архитектуру, начните с базовых весов (например, ImageNet при распознавании изображений), если нет, попробуйте Layer Sequential Unit Инициализация дисперсии (LSUV, наилучшая инициализация - теоретически). Он состоит из инициализации ваших весов, чтобы они были ортогональными и с единичной дисперсией на всех обучаемых слоях.
  • Наконец, я часто обнаруживал, что обучение LGBM на основе весов последнего слоя нейронной сети вместо добавления softmax в качестве выходного слоя может работать на удивление хорошо.

5. Сумка, сумка, сумка, сумка!

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

Мой личный совет заключается в том, что я всегда сохраняю каждое предсказание модели, которое я выполнял, как из моих складок, так и из окончательных моделей, и я усредняю ​​их все (просто базовое усреднение, я никогда не находил никаких доказательств того, что «умное» ансамблирование, такое как взвешивание модели своим сольным исполнением ничего не добавляли в итоговую оценку). Не забудьте также смешать общедоступные ядра.

Чем больше моделей у вас будет в вашей стратегии ансамбля, тем больше у вас шансов пережить частную встряску таблицы лидеров. Действительно, диверсификация ваших моделей сделает ваш конечный результат более надежным. Это та же идея, что и диверсификация одного базового портфеля в финансах: вместо одного актива с заданной доходностью и заданной дисперсией возьмите много разных активов с одинаковой доходностью и одинаковой дисперсией, поскольку гораздо менее вероятно, что все они будут просыпаются одновременно, и проигрыши по одному будут компенсированы выигрышем по другим. В той же идее, вместо того, чтобы полагаться только на одну модель, заставьте голосовать множество разных моделей: цель, предсказанная большинством из них (в классификации), или среднее значение целей, предсказанных каждой из них (в регрессии), скорее всего, будет ближе к истинному ответу.

Надеюсь, вам понравилась эта статья, спасибо Тео Виль за обзор.