Что мне делать, если моя нейронная сеть плохо обобщается?

37

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


Что касается вопроса

Что мне делать, если моя нейронная сеть не учится?

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

Смотрите также отдельную ветку на Meta:

Есть ли общий вопрос, на который мы можем перенаправить вопросы типа «почему моя нейронная сеть не обобщается хорошо?»

DeltaIV
источник
4
Если вы планируете опубликовать свой собственный исчерпывающий ответ, то, возможно, было бы неплохо опубликовать Q и A одновременно (пользовательский интерфейс позволяет это). В противном случае вы поощряете других людей писать ответы, и мы можем получить несколько ответов, которые частично дублируют друг друга ... В любом случае, с нетерпением ждем вашего ответа.
говорит амеба: восстанови монику
@amoeba ах, я не знал этого: пользовательский интерфейс открывает всплывающее окно, когда я пытаюсь ответить на вопрос, поэтому я подумал, что вопросы и ответы нельзя публиковать вместе .... Хорошо, если кто-то пишет лучше / больше полный ответ, чем то, что я собирался написать, я просто не буду добавлять дубликаты.
DeltaIV

Ответы:

37

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

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

Почему ваша модель не обобщает должным образом?

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

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

Например, на изображении ниже мы видим, как синяя линия явно перекрывает.

Но почему это плохо?

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

Как предотвратить переоснащение?

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

  • Параметр норма штрафов . Они добавляют дополнительный термин к функции обновления веса каждой модели, который зависит от нормы параметров. Цель этого термина состоит в том, чтобы противостоять действительному обновлению (т. Е. Ограничить объем каждого веса). Это делает модели более устойчивыми к выбросам и шуму. Примерами таких регуляризаций являются регуляризации L1 и L2 , которые можно найти на регрессорах Лассо , Риджа и Эластичной Сети .
    Поскольку каждый (полностью связанный) слой в нейронной сети функционирует во многом как простая линейная регрессия, они используются в нейронных сетях. Наиболее распространенное использование состоит в том, чтобы упорядочить каждый слой индивидуально.
    реализация кераса .

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

  • Нейронные сети конкретных регуляризаций. Вот некоторые примеры:
    • Отключения . Dropout - интересная техника, которая работает на удивление хорошо. Выпадение применяется между двумя последовательными слоями в сети. На каждой итерации определенный процент соединений (выбранных случайным образом), соединяющих два слоя, отбрасывается . Это заставляет последующий уровень полагаться на все свои соединения с предыдущим уровнем.
      реализация кераса
    • Передача обучения . Это особенно используется в Deep Learning. Это делается путем инициализации весов вашей сети для весов другой сети с той же архитектурой, предварительно обученной для большого общего набора данных.
    • Другими вещами, которые могут ограничивать переоснащение в глубоких нейронных сетях, являются: нормализация партии , которая может выступать в качестве регулятора, а в некоторых случаях (например, начальные модули) работает так же, как и выпадение; партии сравнительно небольших размеров в SGD, которые также могут предотвратить переоснащение; добавление небольшого случайного шума к весам в скрытых слоях.

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

Практические предложения:

  • Безусловно, наиболее эффективный метод регуляризации - это отсев , то есть он должен использоваться первым. Однако вам не нужно (и, вероятно, не следует) размещать отсев везде! Наиболее склонными к переоснащению слоями являются слои Fully Connected (FC), поскольку они содержат большинство параметров. Выпадение должно быть применено к этим слоям (влияя на их связи со следующим слоем).
  • Пакетная нормализация , помимо эффекта регуляризации, помогает вашей модели несколькими другими способами (например, ускоряет конвергенцию, позволяет использовать более высокие скорости обучения). Это также должно использоваться в слоях FC.
  • Как упоминалось ранее, также может быть полезно остановить вашу модель на этапе обучения раньше, чем запланировано. Проблема с ранней остановкой состоит в том, что нет гарантии, что в любой момент модель не начнет улучшаться снова. Более практичным подходом, чем ранняя остановка, является сохранение весов модели, которые обеспечивают наилучшую производительность в наборе проверки. Однако будьте осторожны, так как это не объективная оценка производительности вашей модели (просто лучше, чем тренировочный набор). Вы также можете наложить на набор проверки. Подробнее об этом позже.
    реализация кераса
  • В некоторых приложениях (например, задачах, связанных с изображениями) настоятельно рекомендуется следовать уже установленной архитектуре (например, VGG, ResNet, Inception), для которой вы можете найти веса ImageNet. Общая природа этого набора данных позволяет функциям, в свою очередь, быть достаточно общими, чтобы их можно было использовать для любой задачи, связанной с изображением. Помимо того, что он крепок к переоснащению, это значительно сократит время обучения.
    Другое использование подобной концепции заключается в следующем: если ваша задача не имеет большого количества данных, но вы можете найти другую аналогичную задачу, которая выполняет, вы можете использовать трансферное обучение, чтобы уменьшить переоснащение. Сначала обучите свою сеть выполнению задачи с большим набором данных, а затем попытайтесь выполнить точную настройку.модель к той, которую вы изначально хотели. Первоначальное обучение в большинстве случаев сделает вашу модель более устойчивой к переоснащению.
  • Увеличение данных . Несмотря на то, что всегда полезно иметь больший набор данных, методы увеличения данных имеют свои недостатки. В частности, вы должны быть осторожны, чтобы не увеличивать слишком сильно , так как это может разрушить семантическое содержание данных. Например, при увеличении изображения, если вы слишком много переводите / смещаете / масштабируете или настраиваете яркость / контрастность изображения, вы потеряете большую часть содержащейся в нем информации. Кроме того, схемы расширения должны быть реализованы для каждой задачи специальным образом (например, при распознавании рукописных цифр цифры обычно выровнены и их не следует поворачивать слишком сильно; их также не следует переворачивать в любом направлении, так как они не симметричны по горизонтали / вертикали. То же самое касается медицинских изображений).
    Короче говоря, будьте осторожны, чтобы не создавать нереалистичные изображения с помощью увеличения данных. Кроме того, увеличенный размер набора данных потребует более длительного времени обучения. Лично я начинаю рассматривать использование дополнения данных, когда вижу, что моя модель достигает почти потерь в тренировочном наборе.0
Djib2011
источник
9

Существует множество эмпирических доказательств того, что достаточно глубокие нейронные сети могут запоминать случайные метки на огромных наборах данных (Чиюань Чжан, Сэми Бенджо, Мориц Хардт, Бенджамин Рехт, Ориол Виньялс, «Понимание глубокого обучения требует переосмысления обобщений»). Таким образом, в принципе, получая достаточно большой NN, мы всегда можем уменьшить ошибку обучения до чрезвычайно малых значений, ограниченных на практике числовой точностью, независимо от того, насколько бессмысленной является задача.

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

1. Установите свои ожидания правильно

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

Каковы современные сверточные нейронные сети?

найти текущее (на момент ответов) представление SOTA (State Of The Art) для CNN по различным задачам. Хорошей идеей будет попытаться воспроизвести такие результаты на этих эталонных наборах данных перед тем, как вы начнете тренироваться на своем собственном наборе данных, в качестве проверки правильности всей вашей инфраструктуры.

2. Убедитесь, что ваша процедура обучения безупречна

Все проверки описаны в ответах на вопрос

Что мне делать, если моя нейронная сеть не учится?

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

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

3. Попытайтесь получить суперсходимость

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

4. Настройка регуляризации на MAXXX

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

Самые старые методы регуляризации - это, вероятно, ранняя остановка и снижение веса. Некоторые из других:

  • уменьшить размер пакета: меньший размер пакета обычно ассоциируется с меньшей ошибкой обобщения, так что стоит попробовать. Тем не менее, обратите внимание, что некоторые оспаривают полезность мини-пакетов: по моему опыту, они помогают (если вам не нужно использовать сумасшедшие маленькие размеры, такие как ), но Elad Hoffer, Itay Hubara, Daniel Soudry Train дольше, лучше обобщать: закрыть разрыв в обобщении в крупномасштабном обучении нейронных сетей не согласен. Обратите внимание, что если вы используете пакетную норму (см. Ниже), слишком маленькие мини-пакеты будут весьма вредны.m=16
  • используйте SGD, а не адаптивные оптимизаторы: это уже было рассмотрено @shimao, поэтому я упоминаю это только для полноты картины
  • использовать выпадение: если вы используете LSTM, используйте стандартное выпадение только для входных и выходных единиц слоя LSTM. Для рекуррентных юнитов (ворот) используйте рекуррентный отсев, как впервые показал Ярин Гал в своей кандидатской диссертации. тезис . Однако, если вы используете CNN, выпадение используется сейчас реже. Вместо этого вы склонны ...
  • ... использовать пакетную нормализацию: самые последние архитектуры CNN избегают отсева в пользу пакетной нормализации. Это может быть просто причуда, или это может быть связано с тем, что, по-видимому, отсева и нормализации партии не играют вместе (Сян Ли, Шуо Чен, Сяолинь Ху, Цзянь Ян, Понимание дисгармонии между отсева и нормализации партии по дисперсии Сдвиг ). Так как пакетная норма более эффективна, чем увольнение, когда у вас есть огромные наборы данных, это может быть причиной того, что увольнение вышло из строя для архитектур CNN. Если вы используете пакетную нормализацию, убедитесь, что распределение весов и смещений для каждого слоя выглядит примерно стандартно нормальным. Для РНН внедрение нормы партии является сложным: нормализация веса (Тим Салиманс, Дидерик П. Кингма,Нормализация веса: простая репараметризация для ускорения обучения глубоких нейронных сетей ) является жизнеспособной альтернативой.
  • используйте увеличение данных: оно также имеет регуляризирующий эффект.

5. Гиперпараметр / архитектура поиска

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

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

DeltaIV
источник
5

Список часто используемых методов регуляризации, которые я видел в литературе:

  1. Использование пакетной нормализации, которая является удивительно эффективным регуляризатором до такой степени, что я редко вижу, чтобы выпадение использовалось больше, потому что это просто не нужно.
  2. Небольшое количество веса распадается.
  3. Некоторые более поздние методы регуляризации включают Shake-shake («Регуляризация Shake-Shake» Ксавье Гастальди) и Cutout («Улучшенная регуляризация сверточных нейронных сетей с вырезом» Терренса ДеВриса и Грэма У. Тейлора). В частности, простота реализации Cutout делает его очень привлекательным. Я считаю, что они работают лучше, чем отсева, но я не уверен.
  4. Если возможно, предпочтите полностью сверточные архитектуры архитектурам с полностью связанными уровнями. Сравните VGG-16, который имеет 100 миллионов параметров в одном полностью подключенном слое, с Resnet-152, который имеет в 10 раз больше уровней и еще меньше параметров.
  5. Предпочитаю SGD другим оптимизаторам, таким как Rmsprop и Adam. Было показано, что обобщать лучше. («Повышение производительности обобщения путем перехода от Адама к SGD» Нитиш Шириш Кескар и Ричард Сошер)
Симао
источник
0

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

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

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

  1. Обнаружение выбора функции : чем меньше число параметров и меньше функций в вашей модели, тем лучше. Таким образом, если вы включите только одну из 100 миллионов (возможно, вместо 75 миллионов), у вас будет лучшая обобщаемая модель. Проблема в том, что многие нейронные сети не идеальны в выборе функций, особенно когда присутствует №2. Bootstrap или Boosting принципиально не могут исправить оба варианта (может только версия с названием wild bootstrap). Проще говоря, если вы дадите вам ненужные данные нейронной сети, то это даст вам ненужные данные. (Нормализация L2, упомянутая выше, очень помогает в этом)

  2. Обнаружение и устранение аномалий: чем меньше «выбросов», тем более обобщаема модель. Под «выбросами» мы подразумеваем не только выбросы в данных. Выбросы в данных (например, вид, который вы видите на прямоугольнике) - слишком узкое определение для нейронных сетей. Необходимо учитывать также выбросы в ошибке в модели, которая упоминается как влияние, а также другие аномалии. Поэтому обнаружение аномалий перед запуском вашей сети очень важно. Нейронная сеть может быть устойчивой к одному типу аномалий, но устойчивой не ко всем другим типам. Методы Counter Counter, методы Criticism, методы Adversarial example и графики Influence отлично помогают вам выявлять выбросы, а затем выяснять, как их учитывать. (Т.е. изменить параметры или даже удалить некоторые данные)

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

PS Должен ли я включить больше ссылок?

mlane
источник