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

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

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

Теперь, прежде чем переходить к теме глубокого обучения, давайте посмотрим на это с человеческой точки зрения. Давайте рассмотрим человека, который никогда в жизни не видел собак (просто для примера). Теперь мы покажем этому человеку 10 пород собак и расскажем, что это собаки. После этого, если мы покажем им другие 2 породы, смогут ли они сказать, что они тоже собаки? Надеюсь, им хватит 10 пород, чтобы понять и определить уникальные особенности собаки. Эта концепция обучения на одних данных и правильного применения полученных знаний к другим данным называется обобщением.

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

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

Теперь у нас фактически нет свободы разделять все наши данные на основе, например, по породе, вместо этого мы просто разделим все данные. Одна часть данных, обычно большая часть (около 80–90%), будет использоваться для обучения модели, а остальная часть - для ее тестирования. Наша цель - убедиться, что производительность данных тестирования примерно такая же, как производительность данных обучения. Мы используем такие показатели, как потери и точность, чтобы измерить эту производительность.

Есть определенные аспекты нейронных сетей, которые мы можем контролировать, чтобы предотвратить переоснащение. Давайте рассмотрим их один за другим. Во-первых, количество параметров.

Количество параметров

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

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

Здесь W1, W2 и W3 - весовые матрицы этой нейронной сети. Теперь нам нужно обратить внимание на функции активации в уравнении, которое применяется на каждом уровне. Благодаря этим функциям активации каждый слой нелинейно связан со следующим слоем.

Выход первого слоя - f (W_1 * X) (Пусть это будет L1), выход второго слоя - f (W_2 * L1). Как вы можете видеть здесь, из-за функции активации (f) выход второго уровня имеет нелинейную взаимосвязь с первым уровнем. Таким образом, в конце нейронной сети конечное значение Y будет иметь определенную степень нелинейности по отношению к входу X в зависимости от количества слоев в нейронной сети.

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

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

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

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

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

Выпадающие нейроны

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

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

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

Вот как нейроны с выпадением работают в нейронной сети, но почему предотвращает переобучение? На это есть две основные причины:

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

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

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

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

Регуляризация веса

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

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

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

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

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

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

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

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

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

Прочтите больше статей о глубоком обучении на https://deeplearningdemystified.com