Я собрал множество практических советов и передовых подходов в своем путешествии по машинному обучению. Они поступили из разных источников, хотя многие из них поступили от замечательных сообществ 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)
Скорость обучения
- об искателе скорости обучения, самый сильный нисходящий наклон, который задерживается на бит 16 (после разморозки)
- примечание: прежде чем разморозить, мы получим вот такую форму, получим самый крутой склон, а не дно
- После разморозки вызовите еще раз, вы получите другую форму, жестче… Делайте только до того, как она выстрелит, и минус 10 х 1
- Слишком высокая скорость обучения -› потери при проверке становятся очень высокими 4
- Скорость обучения слишком низкая -> частота ошибок улучшается очень медленно, и потери при обучении будут выше, чем потери при проверке 2
- q: зачем использовать 3 в скорости обучения: хорошее значение по умолчанию для начальной тонкой настройки. Learn.fit_one_cycle(4, 3e-3) … разморозьте, затем узнайте больше, возьмите то, что я сделал в прошлый раз, и разделите на 10, и значение из средства поиска скорости обучения 5
- Как выбрать скорость обучения: (из https://docs.fast.ai/callbacks.one_cycle.html#What-is-1cycle?)
- Статья Sebastian Gruggers о выборе хорошей скорости обучения: https://sgugger.github.io/how-do-you-find-a-good-learning-rate.html
Тонкая настройка
- разморозить модель, подогнать еще… 1
- примечание: прежде чем разморозить, мы получим вот такую форму, получим самый крутой склон, а не дно
- После разморозки вызовите еще раз, вы получите другую форму, жестче… Делайте только до того, как она выстрелит, и минус 10 х 1
- Как мне сделать это лучше, чем 9.29, топ 10%
- q: зачем использовать 3 в скорости обучения: хорошее значение по умолчанию для начальной тонкой настройки. Learn.fit_one_cycle(4, 3e-3) … разморозьте, затем узнайте больше, возьмите то, что я сделал в прошлый раз, и разделите на 10, и значение из средства поиска скорости обучения 5
- об искателе скорости обучения, самый сильный нисходящий наклон, который задерживается на бит 16
Постепенное изменение размера
- уловка, поэкспериментируйте с меньшим размером, у меня есть модель, которая хорошо распознает 128x128, как получить 256… использовать перенос обучения из 128 — это enw datase, я теряю переоснащение, создаю новый пакет данных 3
- как сделать ^^ тогда мы начнем с нашей предварительно обученной модели … заморозить 1
- разморозься и потренируйся еще немного 2
- q: должны ли мы намеренно создавать меньшие наборы данных => да, это помогло нам выиграть испытание imagenet 2