Tricks (полная сводная версия) по многим советам по обучению нейронных сетей

искусственный интеллект глубокое обучение алгоритм Нейронные сети

Добро пожаловать в гостиБлог Олдпан, делитесь интересными новостями об искусственном интеллекте и продолжайте готовить качественные статьи о глубоком обучении.

предисловие

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

В этой статье мы попытаемся максимально подробно объяснить различные навыки, необходимые в тренировочном процессе. Будут несовершенства. Из-за ограничения места я не буду подробно описывать каждый пункт, но эти понятия — то, что нам всем нужно освоить. эти моменты в виду, в процессе обучения нейронной сети, это может быть удобно, так что алхимия больше не невежественна~

《关于训练神经网路的诸多技巧Tricks(完全总结版)》

избегать переоснащения

overfittingТо есть переобучение, которое обычно проявляется в том, что потери обучающего набора намного меньше, чем потери проверочного набора. Недообучение означает, что потери обучающего набора больше, чем потери тестового набора.
Судебная потеря.

Нам нужно четко понимать концепцию гораздо большего, если потеря обучающего набора лишь немного больше, чем потеря проверочного набора, тот же порядок величины (например, 0,8 и 0,9) не является переоснащением. Переоснащение, с которым мы обычно сталкиваемся, должно быть отношением потерь от 0,8 (потери тренировочного набора) до 2,0 (потери набора проверки), что не является порядком величины.

《关于训练神经网路的诸多技巧Tricks(完全总结版)》

《关于训练神经网路的诸多技巧Tricks(完全总结版)》

Связь между отсевом и переоснащением

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

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

《关于训练神经网路的诸多技巧Tricks(完全总结版)》

Обычно мы используем полносвязные слои в начале и в конце сети.hidden layersЭто сверточный слой в сети. Поэтому в целом в части полносвязного слоя используется более высокая вероятность отсева, а в сверточном слое используется низкая вероятность или отсутствие отсева.

Дополнительные сведения см. в соответствующих обсуждениях.

Набор данных поврежден?

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

Если есть поврежденный образ, если мы об этом не знаем, то в общем случае он сообщит об ошибке, когда мы его прочитаем с помощью кода, например:
raise IOError("image file is truncated) ".

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

《关于训练神经网路的诸多技巧Tricks(完全总结版)》

Так что, если эти изображения должным образом отфильтрованы?

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

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

Жесткий майнинг

В любой задаче глубокого обучения мы столкнемся с некоторыми «хитрыми» данными, которые труднее идентифицировать, чем другие обычные данные.Такой пример, который легко идентифицировать ошибки, называетсяhard-negative.

Возьмите каштан.

《关于训练神经网路的诸多技巧Tricks(完全总结版)》

Например, в задаче идентификации кораблей на изображениях ДЗЗ в конкурсе Kaggle используется набор изображений, вырезанных из большого изображения ДЗЗ, и размер каждого изображения составляет 768*768. При простой классификации изображений (только есть ли корабли на классификационном изображении), наиболее легко выявляемые ошибки при проверке следующие:

《关于训练神经网路的诸多技巧Tricks(完全总结版)》

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

И в fast-rcnn тоже используется этот метод:

《关于训练神经网路的诸多技巧Tricks(完全总结版)》

В Fast-RCNN изображение с IoU достоверности между [0,1, 0,5) помечается как отрицательный пример, а пример [0, 0,1) используется для жесткого отрицательного майнинга.Общий ввод во время обучения N =2 Для изображений выберите 128 RoI, то есть 64 RoI на изображение. Для каждого изображения RoI извлекается в соответствии с соотношением 1:3, соотношение положительных и отрицательных образцов составляет 1:3, а из отрицательных примеров должно быть извлечено 48 образцов.

Можно найти две связанные статьи

[17] P. Felzenszwalb, R. Girshick, D. McAllester, and D. Ramanan. Object detection with discriminatively trained part based models. TPAMI, 2010.
[37] K. Sung and T. Poggio. Example-based learning for viewbased human face detection. Technical Report A.I. Memo No. 1521, Massachussets Institute of Technology, 1994.

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

Найдите правильную скорость обучения

Скорость обучения является очень важным гиперпараметром.Что касается этого параметра, наиболее подходящее значение не определено из-за разных масштабов, разных размеров партий, разных методов оптимизации и разных наборов данных.Мы не можем полагаться только на опыт. определить точноlrЕдинственное, что мы можем сделать, это постоянно находить наиболее подходящую скорость обучения для текущего состояния во время обучения.

Например, на следующем рисунке используется функция lr_find() в fastai, чтобы найти подходящую скорость обучения.Согласно приведенной ниже кривой скорости обучения, соответствующая скорость обучения получается в это время.1e-2.

《关于训练神经网路的诸多技巧Tricks(完全总结版)》

Если хотите узнать больше, вот рекомендация главного конструктора фастай.Sylvain GuggerБлог от:How Do You Find A Good Learning Rate
и сопутствующие документыCyclical Learning Rates for Training Neural Networks.

Взаимосвязь между скоростью обучения и размером партии

Как правило, при больших размерах пакетов используются более высокие скорости обучения.

Принцип прост, чем большеbatch-sizeЭто означает, что когда мы учимся, направление конвергенцииconfidenceЧем больше, тем решительнее наше направление, и тем меньшеbatch-sizeЭто кажется более беспорядочным и нерегулярным, потому что по сравнению с большим пакетом он не может позаботиться о большем количестве ситуаций, когда пакет маленький, поэтому требуется небольшая скорость обучения, чтобы гарантировать отсутствие ошибок.

Вы можете увидеть картинку ниже损失Lossи学习率LrОтношение:

《关于训练神经网路的诸多技巧Tricks(完全总结版)》
《关于训练神经网路的诸多技巧Tricks(完全总结版)》

Изображение выше взято из этой статьи:Visualizing Learning rate vs Batch size

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

Поэтому при условии достаточного количества видеопамяти для обучения лучше использовать больший размер пакета.После нахождения подходящей скорости обучения скорость сходимости можно ускорить. Кроме того, больший размер партии может избежать некоторых небольших проблем с нормализацией партии:GitHub.com/py torch/Пак Ючон…

Больше похожих вопросов можно найти на Zhihu Ответы:Ууху. Call.com/question/64…

Дифференциальная скорость обучения и трансферное обучение

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

《关于训练神经网路的诸多技巧Tricks(完全总结版)》

Из рисунка выше беремmodel AТренированные веса моделей для обучения наших собственных весов моделей (Model B), где modelA может быть предварительно обученными весами для ImageNet, а ModelB — предварительно обученными весами, которые мы хотим использовать для идентификации кошек и собак.

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

Как правило, разрабатываемая нами нейронная сеть (как показано на рисунке ниже) обычно делится на три части: входной слой, скрытый слой и выходной слой.По мере увеличения количества слоев функции, изученные нейронной сетью, становятся более Аннотация. Следовательно, скорость обучения сверточного слоя и полносвязного слоя на рисунке ниже также должна быть установлена ​​по-разному.Вообще говоря, скорость обучения, установленная сверточным слоем, должна быть ниже, а скорость обучения полносвязного слоя может быть соответствующим образом увеличена.

《关于训练神经网路的诸多技巧Tricks(完全总结版)》

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

《关于训练神经网路的诸多技巧Tricks(完全总结版)》

Пример графика выше взят из:к data science.com/transfer-to…

Стохастический градиентный спуск с косинусным отжигом и горячим перезапуском

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

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

Комбинация этих двух факторов представляет собой график изменения скорости обучения ниже:

《关于训练神经网路的诸多技巧Tricks(完全总结版)》

Для более подробного ознакомления вы можете проверить ZhihuКак алгоритмы машинного обучения корректируют параметры? Вот руководство по настройке скорости обучения нейронной сети
и сопутствующие документыSGDR: Stochastic Gradient Descent with Warm Restarts

Инициализация веса

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

Зачем?

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

Итак, какой алгоритм начального веса вы предпочитаете использовать?

конечноkaiming_normalилиxavier_normal.

Связанные документы:
Delving deep into rectifiers: Surpassing human-level performance on ImageNet classification
Understanding the difficulty of training deep feedforward neural networks

многоуровневое обучение

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

Его также можно использовать для борьбы с эффектом переобучения.В случае, когда набора данных изображения недостаточно, вы можете сначала обучить изображение небольшого размера, затем увеличить размер и снова обучить ту же модель.Эта идея также упоминается в статье Yolo-v2. было:

《关于训练神经网路的诸多技巧Tricks(完全总结版)》

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

Об алгоритмах оптимизации

Понятно, что для разных задач подходят разные алгоритмы оптимизации, но большинство алгоритмов оптимизации, которые мы используем, по-прежнемуadamиSGD+monmentum.

Почему эти два полезны?

опыт~

Попытался переобучить небольшой набор данных.

Это классический маленький трюк, но многие люди его не делают, попробуйте.

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

Перекрестная проверка

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

Перекрестная проверка выполняется только на обучающих и проверочных наборах.

Перекрестная проверка - это метод, который особенно рекомендуется в соревнованиях Kaggle. Мы часто используем 5-кратную (5-кратную) перекрестную проверку. Обучающий набор разделен на 5 частей, и одна из них выбирается случайным образом в качестве набора проверки, а остальные это тренировочный набор Цикл 5 Во-вторых, это относительно распространенное вычисление не очень велико. Существует такжеleave-one-out cross validationОставьте перекрестную проверку, этот вид перекрестной проверки является n-кратным перекрестным, n представляет емкость набора данных, этот метод подходит только для случая, когда объем данных относительно невелик, и этот метод используется редко в случае очень большого объема расчета.

У Эндрю Нг есть классThe nuts and bolts of building applications using deep learningтакже упоминается в.

《关于训练神经网路的诸多技巧Tricks(完全总结版)》

О наборах данных

Если набор данных крайне несбалансирован, если у нас есть задача обнаружения кораблей, то из 100 000 изображений только 30 000 изображений содержат корабли, а остальные изображения — это изображения без кораблей.В это время, если мы непосредственно тренируемся на этом, эффект должно быть очень бедно. С этой целью для начального обучения можно выбрать набор изображений только с кораблями. Во-вторых, использовать обученную модель для обнаружения необученной части (за исключением лодок), выбрать ложные срабатывания, которые не удалось обнаружить (то есть обнаружить лодки на наборе изображений без лодок), и добавить их в предыдущий обучающий набор для повторного обучения.

увеличение данных

Расширение набора данных — старая тема, зачем нам столько данных? Зачем нам нужны методы увеличения данных?
Прочтите эту статью, чтобы узнать:Почему глубокому обучению нужно так много данных?

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

Например, ночной вид или освещение:

《关于训练神经网路的诸多技巧Tricks(完全总结版)》

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

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

TTA(Test Time Augmentation)

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

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

《关于训练神经网路的诸多技巧Tricks(完全总结版)》

Конечно, у этого метода есть свои плюсы и минусы.Точность использования TTA в наборе данных спутниковых изображений, который я использовал, была на 0,03 процентных пункта ниже, чем без его использования.

Эпилог

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

Справочная статья:

Блог Wooooooo.cn на.com/now good/afraid/H…
к data science.com/card преобразовано - потрепанное…

Статья взята из блога OLDPAN, добро пожаловать в гости:Блог Олдпан

Добро пожаловать, чтобы обратить внимание на общедоступную учетную запись блога Oldpan и продолжать готовить статьи о глубоком обучении: