Введение в некоторые продвинутые темы нейронных сетей, такие как ансамбли моментальных снимков, отсев, коррекция смещения и циклическая скорость обучения.

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

В этой статье будут рассмотрены следующие темы:

  • Передача обучения
  • Настройка скорости обучения
  • Как решить проблему переобучения
  • Прекращение обучения
  • Обрезка

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









Передача обучения

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

В этой ситуации у вас есть (как минимум) две проблемы. Объем данных, к которым у вас есть доступ, тоже может быть ограничен, и вычислительная мощность также ограничена. Ясно, что невозможно подключить нейронную сеть с глубиной 150 уровней с несколькими десятками графических процессоров и обучить модель в течение нескольких недель, чтобы различать самые простые 1000 видов растений, для которых у вас есть данные в настоящее время, чтобы создать алгоритм своего стартапа с минимальными затратами. жизнеспособный продукт.

Что вы можете сделать в этой ситуации, чтобы немного облегчить жизнь?

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

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

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

Так, как это работает? Сначала мы строим архитектуру исходной модели с помощью Keras, а затем загружаем веса модели обученной сети (вам нужно сначала загрузить их; они обычно бывают в формате .h5).

Второе, что нам нужно сделать, это зафиксировать веса начальных слоев, установив для слоев параметр trainable=False. Причина, по которой это работает, заключается в том, что начальные слои сверточной нейронной сети (используемые для обработки изображений) содержат примитивную информацию об изображении, такую ​​как интерпретации линий, краев, форм и других низкоуровневых функций. По мере того, как мы углубляемся в сеть, объекты становятся более сложными и высокоуровневыми, и именно здесь сеть начинает более четко различать качества изображения.

Идея здесь в том, что мы не пытаемся научить сеть исследовать изображения, поскольку она уже хорошо обучена этому в Google или Microsoft. Нам просто нужно настроить его для нашего случая использования.

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

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

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

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

Обрезка

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

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

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

В исследовательской статье Подрезать или не обрезать: изучение эффективности отсечения для сжатия модели изучалась производительность нейронных сетей как функция разреженности (фактически процент удаленных нейронов) и обнаружили, что даже при сокращении 75% нейронов в сети производительность модели существенно не пострадала. Действительно, уменьшение количества параметров вдвое снизило точность только на 0,1%.

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

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

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

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



Чтобы увидеть реализацию кода сокращения в стандартной сети VGG16, я рекомендую посмотреть эту отличную статью:



Настройка скорости обучения

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

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

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

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

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

Циклическая скорость обучения для нейронных сетей

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

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

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

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

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

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

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

График ниже показывает экспоненциально возрастающую скорость обучения в зависимости от эпох.

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

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

SGD с теплым перезапуском

Идея горячего перезапуска очень проста: перезапустить обучение через определенное количество эпох. Например, скорость обучения изначально начинается с 0,1 и со временем экспоненциально снижается. После 30 итераций планировщик скорости обучения сбрасывает скорость обучения до того же значения, что и для эпохи 1, а затем планировщик скорости обучения повторяет то же экспоненциальное затухание. Лучшие оценки записываются каждый раз перед сбросом скорости обучения.

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

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

Ансамбли снимков: поезд 1, получите M бесплатно

Ансамбли моментальных снимков - прекрасная идея, и я предлагаю прочитать исследовательскую статью, если вам интересно.

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

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

Итак, как это работает?

В конце каждого цикла обучения модель достигает локального минимума в отношении потерь при обучении. Таким образом, перед повышением скорости обучения мы делаем «снимок» весов модели. После обучения M циклов у нас есть M снимков модели, f₁, f₂ ,. . . , каждый из которых будет использован в финальном ансамбле. В ансамблевой модели мы берем среднее значение всех снимков и используем его для получения наших результатов, получая нейронную сеть со сглаженными параметрами, тем самым уменьшая общий шум и, как следствие, общую ошибку.

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

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

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

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

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

Усреднение Поляка-Рупперта

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

Предположим, что в итерациях t у вас есть параметры θ¹, θ² и т. Д. Затем мы можем взять среднее по времени этих параметров, чтобы получить более гладкую оценку для истинного параметра.

Это можно использовать несколькими способами:

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

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

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

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

Хорошее пошаговое руководство по усреднению Поляка применительно к нейронным сетям можно найти здесь:



Как рассчитать ансамбль весов модели нейронной сети в Keras (усреднение по Поляку)
Процесс обучения нейронных сетей - это сложный процесс оптимизации, который часто может не сходиться. Это может… machinelearningmastery.com »



Как решить проблему переобучения

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

Оценщики

Точечная оценка - это попытка дать единственный «лучший» прогноз некоторой интересующей величины:

С частотной точки зрения θ фиксировано, но неизвестно, а данные случайны. Это означает, что наша оценка - случайная величина. Каждая случайная переменная подвержена смещению и дисперсии.

  • Смещение: ожидаемое отклонение от истинного значения.
  • Отклонение: отклонение от ожидаемой оценки.

Диагностика смещения-дисперсии

Итак, как мы можем проанализировать этот компромисс между смещением и дисперсией в нейронных сетях?

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

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

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

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

В Mc.ai есть замечательная аналогия с ручками, используемыми для настройки радио. Разработчики радио упорно трудились, чтобы одна конкретная ручка управляла одним конкретным аспектом сигнала, например громкостью или частотой. Намного проще настроиться на определенную радиочастоту и получить желаемый звук, если несколько параметров не изменяются одновременно.

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

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

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

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

Прекращение обучения

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

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

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

Цель: предотвратить совместную адаптацию детекторов признаков для набора нейронов и избежать переобучения.

  • Это заставляет нейроны самостоятельно развивать индивидуальную роль, учитывая поведение популяции в целом.
  • Рекомендуется распространять обучающие веса по нейронной сети, потому что ни один нейрон не является постоянным.

Интерпретация: обучающие примеры предоставляют градиенты из разных случайно выбранных архитектур.

Прямая реализация:

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

Обратный отсев

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

При инвертированном отсеве масштабирование применяется во время обучения, но в обратном порядке. Во-первых, исключите все активации по коэффициенту отключения p,, а во-вторых, масштабируйте их по коэффициенту обратного отключения 1 / p.

Преимущество обратного отсева состоит в том, что вам не нужно ничего делать во время тестирования, что ускоряет вывод.

Из-за этого более быстрого вывода в большинстве текущих реализаций используется перевернутый выпадение:

  • Взвешивание проводится во время тренировки.
  • Не требует повторного взвешивания во время тестирования.

В частности, для слоя l

Стратегии инициализации

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

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

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

Для полностью связанного слоя с m входами и n выходами мы можем выбрать из следующего равномерного распределения, чтобы получить наши начальные веса:

В качестве альтернативы популярная инициализация Xavier использует следующие параметры для равномерного распределения.

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

Полный список схем инициализации весов можно найти в разделе Инициализаторы документации Keras здесь. Есть дюжина или два инициализатора, и также можно использовать свой собственный инициализатор. См. Справочные материалы в разделе Дополнительная литература.

Заключительный комментарий

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

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

  • Пакетная / Слой / Экземплярная / Групповая нормализация
  • Блоки тензорной обработки (TPU)
  • DropConnect
  • Дробное объединение
  • Стохастическая глубина
  • Отрезать
  • Смешивать
  • Инициализация Kaiming / MSRA

Новостная рассылка

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



Дальнейшее чтение

Важные статьи о нейронных сетях

Обрезка статей

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

  • Понимание сложности обучения глубоких нейронных сетей с прямой связью по Glorot и Bengio, 2010.
  • Точные решения нелинейной динамики обучения в глубоких линейных нейронных сетях Саксе и др., 2013.
  • Инициализация случайного блуждания для обучения очень глубоких сетей с прямой связью по Sussillo и Abbott, 2014.
  • Углубляемся в выпрямители: Превосходя человеческий уровень производительности по классификации ImageNet Хе и др., 2015.
  • Зависящие от данных инициализации сверточных нейронных сетей, автор Krähenbühl et al., 2015.
  • Все, что вам нужно, это хорошая инициализация, Мишкин, Мэйтас, 2015.
  • Инициализация исправлений: остаточное обучение без нормализации, Чжан и др., 2019.
  • Гипотеза лотерейного билета: поиск редких обучаемых нейронных сетей, Франкл и Карбин, 2019.