Я собрал множество практических советов и передовых подходов в своем путешествии по машинному обучению. Они поступили из разных источников, хотя многие из них поступили от замечательных сообществ Fast AI (fast.ai) и Kaggle. Это, конечно, не исчерпывающий список, но я надеюсь, что вы найдете его полезным, особенно если вы только начинаете создавать и обучать свои первые модели.

Проблемный подход

  • Начните с малого. Экспериментируйте и быстро выполняйте итерации на небольших моделях и наборах данных перед масштабированием.
  • Ведите таблицу своих экспериментов с вещами, которые вы пробовали.
  • Делайте компы Kaggle. Определенно один из лучших способов обучения. Читайте форумы и обсуждения. Слушайте, что делают другие.
  • Найдите исследовательские работы, связанные с проблемой, которую вы пытаетесь решить. Скорее всего, они натолкнулись на решение и подход, которые будут актуальны.
  • При попытке найти базовые уровни хорошей скоростью обучения по умолчанию обычно является 3e-3. Попробуйте это в качестве начальной скорости обучения, особенно при сравнительном анализе основ, таких как изменения в обработке изображений.
  • Прежде чем погрузиться в самую большую модель, начните с чего-то подходящего, что соответствует вашему набору данных.

Как правильно выбрать предварительно обученную модель

  • https://forums.fast.ai/t/how-to-pick-the-right-pretrained-model/8481
  • Вы всегда хотите выбрать самую маленькую модель, которая хорошо работает с вашими данными. До начала этого года люди обычно начинали с VGG16 или VGG19, но Resnet также является отличным выбором для точной настройки. Начните с Resnet18, затем Resnet34 и Resnet50. Вы также можете попробовать новые модели в сетях ResNext или Nascent.
  • Большие модели не всегда лучше. Обычно они превосходят ваши данные о поездах. Что вас действительно волнует, так это потеря проверки. Сделать его небольшим, но приблизить к потерям на тренировке сложно, и может потребоваться некоторая регуляризация, такая как DropOut или WeightDecay и т. д. FastAI обеспечивает легкий доступ ко всем из них.
  • Нужно ли вам больше данных или нет, зависит от задачи. Если вы пытаетесь идентифицировать хот-дог или не хот-дог, вам может не понадобиться много данных. Но если вы пытаетесь прочитать уличные знаки и логотипы на своих фотографиях, вам может понадобиться больше данных.
  • tldr: при работе над новой проблемой всегда начинайте с простых сетей — Resnet18/34 или 50 — хороший выбор.

Данные

  • Хорошо знайте свои данные. Посмотрите на него вручную, разберитесь в его дистрибутивах.
  • Выделите дисбалансы. Вам нужна передискретизация/недостаточная выборка?
  • Очистка изображения
  • Иногда лучший способ получить максимальную отдачу от ваших моделей — это улучшить входные данные. Попробуйте различные способы улучшить качество изображения для вашей модели.
  • Попробуйте улучшения изображения, которые хорошо нормализуют наборы данных (например, последовательное кадрирование), или поэкспериментируйте с настройками освещения и контрастности, которые упростят задачу.
  • Нормализация экспозиции
  • Исследуйте эффекты выделения RGB-каналов изображения

Гиперпараметры, обучение и модели.

  • Определите, является ли ваша проблема проблемой классификации или регрессии. т.е. если регрессионные функции потерь, такие как MSE, вероятно, более актуальны. Для классификации вы можете посмотреть CrossEntropyLoss
  • Используйте трансферное обучение и предварительно обученные веса, когда это возможно.
  • Подходит один цикл отлично.
  • Тренироваться в течение большего количества эпох, чем вы думаете, неинтуитивно.
  • Исследуйте ансамбль, так как он имеет хорошие шансы повысить ваши баллы DL.
  • Затухание веса. Запустите средство поиска скорости обучения для нескольких значений уменьшения веса и выберите наибольшее из них, которое по-прежнему позволит нам тренироваться с высокой максимальной скоростью обучения.
  • Размер пакета должен быть установлен на максимально возможное значение, чтобы оно поместилось в доступной памяти.
  • Dropout можно настроить так же, как снижение веса, или просто примерив цикл и посмотрев, какие результаты они дают.
  • Количество эпох, необходимое для оценки поиска гиперпараметров: В зависимости от классификации изображений EG 5 будет достаточно (посмотрите на эксперименты ImageWoof), но если она табличная, может потребоваться меньше (2–3)https://forums.fast.ai /t/гиперпараметр-настройка-и-количество-эпох/54935/5

Переоснащение

  • Поэтому единственное, что говорит о переобучении, это то, что коэффициент ошибок на некоторое время снижается, а затем снова начинает ухудшаться. Вы увидите, как многие люди, даже те, кто утверждают, что разбираются в машинном обучении, скажут вам, что если ваши потери при обучении ниже, чем потери при проверке, то вы переобучаетесь. Как вы узнаете сегодня более подробно и во время остальной части курса, это абсолютно не так . — Джереми Ховард
  • Обнуление регуляризации при запуске.
  • Отключить увеличение данных
  • Отключить отсев
  • Отключить снижение веса
  • Как только вы обнулите регуляризацию, попробуйте использовать начальную архитектуру и убедитесь, что она может соответствовать вашему тренировочному набору.
  • Как только вы это сделаете, мы сможем начать возвращать некоторые улучшения проверки, добавляя регуляризацию в вашу модель.
  • Старайтесь избегать ранней остановки и полагайтесь на регуляризацию

Эпохи

  • Две несколько эпох, и мы не даем нашей сети достаточно времени/просматриваем данные для обучения.
  • Слишком много эпох, и мы начинаем переобучать.
  • Обычно я стараюсь избегать ранней остановки, а вместо этого использую регуляризацию (особенно отсев), чтобы позволить тренироваться столько эпох, сколько мы хотим. (https://forums.fast.ai/t/number-of-epochs-to-train-on/185/2)

Скорость обучения

Тонкая настройка

Постепенное изменение размера