Увеличить регуляризация в слоях нейросети weight decay

Обновлено: 05.07.2024

Вы когда-нибудь рассматривали термин регуляризации L² функции стоимости нейронной сети и задавались вопросом, почему она масштабируется как 2, так им?

Уравнение 1: регуляризованная по L2 версия функции стоимости, используемой в SGD для NN

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

янедавно столкнулся с термином снова при работе черезУлучшение глубоких нейронных сетей курс (2-й курс в превосходной специализации глубокого обучения Coursera Эндрю Нг /deeplearning.ai), где на самом деле не было дано никакого объяснения этим коэффициентам масштабирования, поэтому я решил поискать в паутинах. Следующий мини-пост является суммой того, что я узнал во время этого поиска.

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

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

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


Рисунок 1: Нерегулярная модель может соответствовать шуму / выбросам в данных обучения

«Регуляризация - это любая модификация, которую мы вносим в алгоритм обучения, предназначенный для уменьшения его ошибки обобщения, но не ошибки обучения».
- Ян Гудфеллоу

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

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

Рисунок 2: Применение регуляризации может помочь предотвратить наложение тренировочных данных.

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

Добавление термина L² обычно приводит к гораздо меньшим весам по всей модели Другие типы регуляризации на основе терминов могут иметь разные эффекты; например.,L¹регуляризация приводит к более редким решениям, где большее количество параметров будет иметь нулевое значение.

Регуляризация, как с L¹, так и с L², также имеет красивую вероятностную интерпретацию: она эквивалентна добавлению априора к распределению матрицы весовW; гауссовский априор в случае L² и лапласовский априор в случае L¹. Это превращает проблему оптимизации от выполненияоценка максимального правдоподобия(MLE)для выполнениямаксимум апостериорный(КАРТА)предварительный расчет; то есть переход от использованиячастый выводвБайесовский вывод, Подробный обзор этой интерпретации можно найти вотличный пост Брайана Кенга,

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

Уравнение 2: добавление регуляризации L² к функции стоимости

где ∥ ∙ ∥ - норма L². Это, действительно, форма, с которой мы сталкиваемся в классическойТихоновская регуляризация,

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

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

Идея снижения веса проста: чтобы избежать перегрузки, каждый раз, когда мы обновляем весвесс градиентом∇jчто касаетсявесмы от этого тоже вычитаемλвес, Это дает весам тенденцию к снижению до нуля, отсюда и название.

На самом деле это довольно ранняя концепция в истории глубокого обучения.Упрощение нейронных сетей с помощью мягкого распределения веса, статья Новлана и Хинтона 1992 года, небрежно ссылающаяся на снижение веса на статью июня 1986 года, названнуюЭксперименты по обучению методом обратного распространенияПлаут, Новлан и Хинтон. Поскольку ни одна из немногих статей, на которые есть ссылки, похоже, не использует эту концепцию, это может быть место, где эта концепция была представлена ​​в контексте нейронных сетей. ЧетноеХансон и Пратт (1988)кажется, предлагают в сноске, что они не могли найти в то времяопубликованныйбумага для цитирования, чтобы ссылаться на эту концепцию.

При взгляде на регуляризацию с этой точки зрения, общая форма начинает проясняться. Чтобы добавить этот термин в обновление веса, мы «похитили» функцию стоимостиJи добавьте термин, который, когда получено, даст желаемое-λ ∙ ш; термин для добавления, конечно,-0,5 λ ∙ w², Принимая производнуюJ -0,5 λ ∙ w²таким образом, даст∇j-λвес, к чему мы стремились.

Уравнение 4: регуляция L² с точки зрения снижения веса

Плаут и др. Уже указывают на это отношение к норме L² в вышеупомянутой статье:

«Один из способов увидеть терминч ∙ шявляется производной 0,5ч ∙ w²Таким образом, мы можем рассматривать процедуру обучения как компромисс между минимизациейЕ(Ошибка) и минимизировать сумму квадратов весов ».

Действительно, регуляризация L² и регуляризация распада веса эквивалентны для стандартного стохастического градиентного спуска (при пересчете на скорость обучения). Это не обязательно верно для всех алгоритмов обучения на основе градиента, и былонедавно показанныйне подходить для алгоритмов адаптивного градиента, таких какАдам,

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

Вариант 1: побочный эффект градиентного спуска

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

Вариант 2: Масштаб одного веса

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

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

Вариант 3: Репрезентативность тренировочного набора

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

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

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

Вариант 4: Изготовлениеλ сопоставимый

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

Вариант 5: эмпирическая ценность

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



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

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

Пост является краткой версией доклада «Convolutional neural network weights regularization via orthogonalization», представленного в ноябре 2019 года на международной конференции ICMV 2019, г. Амстердам, Нидерланды.

Идея регуляризации с помощью ортогонализации

Так как предлагаемый метод относится к регуляризации, сначала напомним вкратце что это такое. Регуляризация заключается в накладывании на модель некоторых ограничений на основе наших представлений о том, как должна решаться поставленная задача. Как результат – повышается обобщающая способность сети. Например, L1 регуляризация способствует занулению части весов делая сеть разряженной, L2 – сдерживает значения коэффициентов в пределах малых чисел, Dropout устраняет зависимости отдельных нейронов, и т.д. Эти методы являются неотъемлемой частью процесса обучения многих современных сетей, особенно если они содержат большое число параметров – регуляризация позволяет достаточно неплохо бороться с переобучением.

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

Ортогонализация сверточных фильтров


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



Проекция вектора fg на fk может быть вычислена как . Тогда, чтобы ортогонализировать фильтры fa и fb, мы заменяем первый шаг из алгоритма Грама-Шмидта:



где η это скорость обучения и wort коэффициент ортогонализации, значения которого лежат на отрезке [0.0, 1.0]. Введение коэффициента ортогонализации обусловлено тем, что “мгновенная” ортогонализация фильтров сильно ломает процесс обучения, сводя на нет планомерные изменения весов за прошлые итерации. Малые значения wort сохраняют динамику обучения и способствуют плавному уменьшению линейной зависимости между фильтрами в каждом слое по отдельности. Отметим еще раз важный момент в методе: за одну итерацию мы модифицируем только один вектор, чтобы не навредить алгоритму оптимизации.



Рис. Визуализация одной итерации.

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

Эксперименты

Перейдем от теории к практике. Для экспериментов мы решили использовать 2 самых популярных датасета для оценки нейросетей в области компьютерного зрения – MNIST (классификация изображений рукописных цифр) и CIFAR10 (фотографии 10 классов – лодки, грузовики, лошади, и т.д.).

Так как мы предполагаем, что ортогонализация будет полезна в первую очередь для компактных сетей, мы взяли LeNet подобную архитектуру в 3 модификациях, отличающихся друг от друга количеством фильтром в сверточных слоях. Архитектура нашей сети, которую для удобства назовем LeNet 1.0, приведена в таблице 1. Производные от нее архитектуры LeNet 2.0 и LeNet 3.5 отличаются большим числом фильтров в сверточных слоях, в 2 и в 3.5 раза соответственно.

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

Таблица 1. Архитектура сети LeNet 1.0, используемая в экспериментах.

Мы пробовали 3 значения коэффициента ортогонализации wort: 0.01, 0.05, 0.1. Все эксперименты были проведены по 10 раз, а результаты усреднены (среднеквадратичное отклонение (std) для error rate приведено в таблице c результатами). Также мы посчитали, на сколько процентов уменьшилось число ошибок (benefit).

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

Таблица 2. Результаты экспериментов для MNIST

MNIST LeNet 1.0 (52k params) LeNet 2.0 (179k params) LeNet 3.5 (378k params)
error rate std benefit error rate std benefit error rate std benefit
baseline 0.402% 0.033 - 0.366% 0.026 - 0.361% 0.028 -
wort=0.01 0.379% 0.027 5.72% 0.355% 0.01 3.01% 0.359% 0.026 0.55%
wort=0.05 0.36% 0.022 10.45% 0.354% 0.018 3.28% 0.356% 0.034 1.39%
wort=0.1 0.368% 0.015 8.46% 3.53% 0.024 3.55% 0.353% 0.018 2.22%
CIFAR10 LeNet 1.0 (52k params) LeNet 2.0 (179k params) LeNet 3.5 (378k params)
error rate std benefit error rate std benefit error rate std benefit
baseline 22.09% 0.65 - 18.49% 1.01 - 17.08% 0.47 -
wort=0.01 21.56% 0.86 2.38% 18.14% 0.65 1.89% 17.33% 0.49 -1.46%
wort=0.05 21.59% 0.48 2.24% 18.30% 0.57 1.03% 17.59% 0.31 -3.02%
wort=0.1 21.54% 0.41 2.48% 18.15% 0.53 1.85% 17.53% 0.4 -2.63%

Однако, LeNet сети сейчас встречаются редко и обычно используются более современные модели. Поэтому, мы также экспериментировали с облегченной по количеству фильтров моделью ResNet, состоящей из 25 сверточных слоев. Первые 7 слоев содержали по 4 фильтра, следующие 12 по 8 фильтров, и последние 6 по 16 фильтров. Общее число обучаемых параметров такой модели составило 21 тыс. Результат получился аналогичным: ортогонализация улучшает качество сети.



Рис. Сравнение динамики обучения ResNet на MNIST с ортогонализацией и без.

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



Рис. Динамика изменений максимальной длины проекции фильтров в сверточном слое на примере ResNet.

Регуляризация на основе ортогонализации крайне проста в имплементации: на питоне с помощью модуля numpy она занимает меньше 10 строк кода. При этом, она не замедляет обучение и совместима с другими методами регуляризации.

Заключение

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

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

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

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

Базовая модель.

Задача будет у нас достаточно типичканая : Классификация картинок (самолет, автомобиль, птица, кошка, олень, собака, лягушка, лошадь, корабль и грузовик). Для этого мы будем использовать CIFAR-10, датасет который входит в библиотеку Keras.

База CIFAR-10 это набор цветных изображений 32 x 32 x 3 и имеет десят классов ( самолет, автомобиль, птица, кошка, олень, собака, лягушка, лошадь, корабль и грузовик ) 50 000 тренировочных картонок,10 000 тестовых.

from keras.datasets import cifar10

Модель будет выглядеть так :

  • Сверточный слой ( 32 карты, ядро 3х3, функция активации RuLu).
  • Сверточный слой ( 32 карты, ядро 3х3, функция активации RuLu).
  • МаксПуллинг слой ( ядро 2х2).
  • Сверточный слой ( 64 карты, ядро 3х3, функция активации RuLu).
  • Сверточный слой ( 64 карты, ядро 3х3, функция активации RuLu).
  • МаксПуллинг слой ( ядро 2х2).
  • Создаем вектор для полносвязного слоя( Flatten() ).
  • Полносвязный слой (512 нейронов вход , 10 классов выход)

Запускаем обучение, 30 эпох. Результат конечно печальный.

-регуляризация.

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

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

Обратите внимание, что крайне важно правильно выбрать λ. Если коэффициент слишком мал, то эффект от регуляризации будет ничтожен, если же слишком велик — модель обнулит все веса. Здесь мы возьмем λ = 0.0001; чтобы добавить этот метод регуляризации в нашу модель, нам понадобится еще один импорт, после чего достаточно всего лишь добавить параметр к каждому слою, где мы хотим применять регуляризацию.

Первоначальные параметры.

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

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

Метод инициализации Завьера (Xavier) (иногда — метод Glorot’а). Основная идея этого метода — упростить прохождение сигнала через слой во время как прямого, так и обратного распространения ошибки для линейной функции активации (этот метод также хорошо работает для сигмоидной функции, так как участок, где она ненасыщена, также имеет линейный характер).

Метод инициализации Ге (He) — это вариация метода Завьера, больше подходящая функции активации ReLU, компенсирующая тот факт, что эта функция возвращает нуль для половины области определения.

Указать способ инициализации для слоя не сложно: вам всего лишь надо указать параметр kernel_initializer , как описано ниже. Мы будем использовать равномерную инициализацию Ге ( he_uniform ) для всех слоев ReLU и равномерную инициализацию Завьера ( glorot_uniform ) для выходного softmax слоя (так как по сути он представляет собой обобщение логистической функции на множественные сходные данные).

Батч-нормализация (batch normalization).

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

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

В Keras добавить батч-нормализацию к вашей сети очень просто: за нее отвечает слой BatchNormalization , которому мы передадим несколько параметров, самый важный из которых — axis (вдоль какой оси данных будут вычислять статистические характеристики). В частности, во время работы со сверточными слоями, нам лучше нормализовать вдоль отдельных каналов, следовательно, выбираем axis=1 .

Заключение.

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

Весь код полностью :

Если вы нашли ошибку, пожалуйста, выделите фрагмент текста и нажмите Ctrl+Enter.


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

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

Существует два распространенных способа решения проблемы переоснащения:

  • Получить больше данных
  • Используйте регуляризацию

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

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

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


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

Следовательно, уравнение становится:


гделямбдаэтопараметр регуляризации, Обратите внимание на добавление нормы Фробениуса, обозначенной индексомF, Это фактически эквивалентно квадрату нормы матрицы.

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

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

Почему регуляризация работает?

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

Напомним, что мы снабжаем функцию активации следующей взвешенной суммой:


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

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

Конечно, входной слой и выходной слой остаются одинаковыми.

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

Например, если вы установите пороговое значение 0,7, существует вероятность 30%, что узел будет удален из сети.

Следовательно, это приведет к гораздо меньшей и простой нейронной сети, как показано ниже.


Слева: нейронная сеть перед выпадением. Справа: нейронная сеть после отсева.

Почему выпадение работает?

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

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

Следовательно, веса распределяются по всем элементам, делая их меньше. Это эффективно сжимает модель и упорядочивает ее.

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

Обратитесь к полной записной книжкеВот,

Создать образец набора данных

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


И мы должны получить:


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

Нерегулярная модель

Теперь мы определим шаблон модели для размещения регуляризации:

Потратьте время, чтобы прочитать код и понять, что он делает. Обратите внимание наlambdпеременная, которая будет полезна для регуляризации L2. Так жеkeep_probпеременная будет использоваться для отсева.

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



Неплохо! Давайте наметим границы решения:


И вы должны увидеть:


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

Регуляризация L2

Перед использованием регуляризации L2 нам нужно определить функцию для вычисления стоимости, которая будет учитывать регуляризацию:


Наконец, мы определяем обратное распространение с регуляризацией:


Большой! Теперь мы можем использовать наш шаблон модели с регуляризацией L2! НастройкалямбдаЗначение 0,7 получаем:



Потрясающе! Мы улучшили точность теста, и вы заметили, что модель больше не соответствует данным!

Теперь давайте посмотрим, может ли отсев сделать еще лучше.

Выбывать

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

Конечно, теперь мы должны определить обратное распространение для отсева:

Большой! Давайте посмотрим, как модель работает с выпадением с использованием порога 0,8:



Удивительно! Мы достигли еще большей точности с отсева!

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

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

Читайте также: