Улучшение глубоких нейронных сетей — практические аспекты глубокого обучения

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

Ниже приведены заметки по ключевым моментам первой недели курса «Практические аспекты глубокого обучения» во второй части «Улучшение глубоких нейронных сетей: отладка, регуляризация и оптимизация гиперпараметров» в курсовом проекте DeepLearning.ai г-на Ву Энды. на Курсере. Поскольку баллы знаний в каждом разделе этого класса очень важны, эта заметка охватывает почти все записи короткого видеокурса. В то же время, читая следующие заметки, настоятельно рекомендуется изучить видеокурсы г-на Ву Энда, пожалуйста, перейдите на Coursera или NetEase Cloud Classroom.


1. Обучение, проверка и наборы тестов

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

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

Эпоха малых данных:

В эпоху небольших объемов данных, таких как: 100, 1000, 10000 объемов данных, вы можетеdataСделайте следующие деления:

  • Без набора валидации: 70% / 30%;
  • С набором проверки: 60%/20%/20%;

Обычно в эпоху малых объемов данных вышеуказанные пропорции вполне разумны.

Эпоха больших данных:

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

Цель проверочного набора состоит в том, чтобы проверить, какой алгоритм более эффективен, поэтому проверочный набор достаточно велик, чтобы проверить, какой из примерно 2-10 алгоритмов лучше, и нет необходимости использовать 20% данных в качестве проверочного набора. . Например, достаточно извлечь 10 000 данных из миллионов данных в качестве проверочного набора.

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

  • 1 миллион данных: 98%/1%/1%;
  • Более миллиона объемов данных: 99,5 % / 0,25 % / 0,25 % (или 99,5 % / 0,4 % / 0,1 %)

Обозначение:

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

2. Смещение, дисперсия

Для сегментации двух границ классификации классов на следующем рисунке:

Из рисунка видно, что в случае недообучения возникает высокое смещение, в случае переобучения возникает высокая дисперсия.

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

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

Поэтому компромисс между смещением и дисперсией является очень важным вопросом для модели.

пример:

Несколько разных ситуаций:

Вышеизложенное состоит в том, что когда ошибка распознавания человеческого глаза составляет 0%, оптимальная ошибка обычно называется «байесовской ошибкой».Если «байесовская ошибка» составляет около 15%, то второй случай на рисунке является лучшей ситуацией.

В случае высокого смещения и высокой дисперсии

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

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

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

3. Основные методы машинного обучения

В процессе обучения модели машинного обучения процесс решения Highbias и High variance:

  • 1. Существует ли он?High bias ?
    • Увеличьте структуру сети, например, увеличив количество скрытых слоев;
    • тренировки дольше;
    • Найдите подходящую сетевую архитектуру и используйте более крупную структуру NN;
  • 2. Существует ли он?High variance?
    • получить больше данных;
    • регуляризация;
    • Найдите подходящую структуру сети;

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

4. Регуляризация

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

Logistic regression

Добавьте функцию стоимости члена регуляризации:

J(w,b)=\dfrac{1}{m}\sum\limits_{i=1}^{m}l(\hat y^{(i)},y^{(i)})+\dfrac{\lambda}{2m}||w||_{2}^{2}

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

  • Регуляризация L2:\dfrac{\lambda}{2m}||w||_{2}^{2} = \dfrac{\lambda}{2m}\sum\limits_{j=1}^{n_{x}} w_{j}^{2}=\dfrac{\lambda}{2m}w^{T}w
  • Регуляризация L1:\dfrac{\lambda}{2m}||w||_{1}=\dfrac{\lambda}{2m}\sum\limits_{j=1}^{n_{x}}|w_{j}|

в\lambdaявляется фактором регуляризации.

Уведомление:lambda Это зарезервированное слово в Python, поэтому при программировании используйте "lambd” представляет здесь коэффициент регуляризации\lambda.

Neural network

Добавьте функцию стоимости члена регуляризации:

J(w^{[1]},b^{[1]},\cdots,w^{[L]},b^{[L]})=\dfrac{1}{m}\sum\limits_{i=1}^{m}l(\hat y^{(i)},y^{(i)})+\dfrac{\lambda}{2m}\sum\limits_{l=1}^{L}||w^{[l]}||_{F}^{2}

в||w^{[l]}||_{F}^{2}=\sum\limits_{i=1}^{n^{[l-1]}}\sum\limits_{j=1}^{n^{[l]}}(w_{ij}^{[l]})^{2},так какwразмер(n^{[l-1]},n^{[l]}), матричная норма называется «нормой Фробениуса».

Weight decay

После добавления члена регуляризации градиент становится:

dW^{[l]} = (form\_backprop)+\dfrac{\lambda}{m}W^{[l]}

Тогда формула обновления градиента становится такой:

W^{[l]}:= W^{[l]}-\alpha dW^{[l]}

Замените, чтобы получить:

W^{[l]}:= W^{[l]}-\alpha [ (form\_backprop)+\dfrac{\lambda}{m}W^{[l]}]\\ = W^{[l]}-\alpha\dfrac{\lambda}{m}W^{[l]} -\alpha(form\_backprop)\\=(1-\dfrac{\alpha\lambda}{m})W^{[l]}-\alpha(form\_backprop)

в,(1-\dfrac{\alpha\lambda}{m})для<1, отдам оригиналW^{[l]}затухающий параметр, поэтомуРегуляризация нормы L2Также известен как «распад веса».

5. Почему регуляризация снижает переоснащение

Предположим, что структура нейронной сети на следующем рисунке находится в состоянии переобучения:

Функция стоимости для нейронной сети:

J(w^{[1]},b^{[1]},\cdots,w^{[L]},b^{[L]})=\dfrac{1}{m}\sum\limits_{i=1}^{m}l(\hat y^{(i)},y^{(i)})+\dfrac{\lambda}{2m}\sum\limits_{l=1}^{L}||w^{[l]}||_{F}^{2}

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

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

Математическое объяснение:

Предположим, что функция активации, используемая в нейроне, равнаg(z)=\tanh(z), после добавления члена регуляризации:

когда\lambdaувеличиваться, в результате чегоW^{[l]}уменьшать,Z^{[l]}=W^{[l]}a^{[l-1]}+b^{[l]}будет уменьшаться, как видно из приведенного выше рисунка, вzна меньших площадях,\tanh(z)Функция приблизительно линейна, поэтому функция каждого слоя является приблизительно линейной функцией, и вся сеть становится простой приблизительно линейной сетью, так что переобучения не происходит.

6. Регуляризация отсева

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

Способ реализации Dropout:Инвертированный отсев

Сначала предположим отсев для слоя 3:

keep_prob = 0.8  # 设置神经元保留概率
d3 = np.random.rand(a3.shape[0], a3.shape[1]) < keep_prob
a3 = np.multiply(a3, d3)
a3 /= keep_prob

Вот почему последний шаг необходим:a3 /= keep_prob

Согласно примеру keep_prob = 0.8, то удаляется около 20% нейронов, т.е.a^{[3]}20% элементов обнуляются, а в расчете следующего слоя естьZ^{[4]}=W^{[4]}\cdot a^{[3]}+b^{[4]}, чтобы не влиятьZ^{[4]}ожидаемое значение, поэтому нужноW^{[4]}\cdot a^{[3]}Часть разделена keep_prob.

Инвертированное выпадение Сопоставление «a3 /= keep_prob» гарантирует, что независимо от того, сколько установлено значение keep_prob, оно не будетZ^{[4]}влияние на ожидания.

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

7. Понимание отсева

Другое понимание Dropout.

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

Таким образом, в процессе распространения отсев будет производить ту же норму L2.уменьшить весЭффект.

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

= 1.0, слой с большим количеством нейронов установит значение keep_prob меньше.

Недостатки отсева:

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

Используйте отсев:

  • Отключите функцию дропаута, то есть установите keep_prob = 1.0;
  • запустите код, убедитесьJ(W,b)Функция монотонно убывает;
  • Включите отсев снова.

8. Другие методы регуляризации

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

9. Нормализация ввода

Особенности набора данныхx_{1},x_{2}Процесс нормализации:

  • Рассчитайте среднее значение всех выборочных данных для каждой функции:\mu = \dfrac{1}{m}\sum\limits_{i=1}^{m}x^{(i)};
  • Вычтите среднее значение, чтобы получить симметричное распределение:x : =x-\mu;
  • Нормализованная дисперсия:\sigma^{2} = \dfrac{1}{m}\sum\limits_{i=1}^{m}x^{(i)^{2}},x = x/\sigma^{2}.

Причины использования нормализации:

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

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

10. Исчезновение градиента и взрыв градиента

Структура нейронной сети, показанная на рисунке ниже, использует в качестве примера два входа:

Здесь мы сначала предполагаемg(z) = z,b^{[l]}=0, поэтому для целевого вывода мы имеем:

\hat y = W^{[L]}W^{[L-1]}\cdots W^{[2]}W^{[1]}X

  • W^{[l]}Когда значение больше 1:

как:W^{[l]}=\left[ \begin{array}{l}1.5 & 0 \\\ 0 & 1.5\end{array} \right], то, наконец,\hat y = W^{[L]}\left[ \begin{array}{l}1.5 & 0 \\\ 0 & 1.5\end{array} \right]^{L-1}X, значение функции активации будет экспоненциально возрастать;

  • W^{[l]}Когда значение меньше 1:

как:W^{[l]}=\left[ \begin{array}{l}0.5 & 0 \\\ 0 & 0.5\end{array} \right], то, наконец,\hat y = W^{[L]}\left[ \begin{array}{l}0.5 & 0 \\\ 0 & 0.5\end{array} \right]^{L-1}X, значение функции активации будет уменьшаться экспоненциально.

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

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

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

Возьмем в качестве примера один нейрон:

Как видно из приведенного выше рисунка, при количестве входныхnбольше, мы хотим, чтобы каждыйw_{i}меньше, так что их суммаzТакже меньше.

Здесь для того, чтобы получить меньшеw_{i},настраиватьVar(w_{i})=\dfrac{1}{n}, здесь называетсяИнициализация Ксавьера.

Инициализируйте параметры:

WL = np.random.randn(WL.shape[0],WL.shape[1])* np.sqrt(1/n)

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

Инициализация Xavier для различных функций активации:

  • Функция активации использует Relu:Var(w_{i})=\dfrac{2}{n}
  • Функция активации использует tanh:Var(w_{i})=\dfrac{1}{n}

где n — количество входных нейронов, т. е.n^{[l-1]}.

12. Численная аппроксимация градиентов

Используйте метод двусторонней ошибки, чтобы аппроксимировать производную:

Из рисунка видно, что ошибка двусторонней аппроксимации составляет 0,0001, что значительно выше ошибки односторонней аппроксимации 0,03.

Использовались формулы:

  • Двусторонняя производная:

f'(\theta) = \lim\limits_{\varepsilon \to 0}=\dfrac{f(\theta+\varepsilon)-(\theta-\varepsilon)}{2\varepsilon}\\

ошибка:O(\varepsilon^{2})

  • Односторонняя производная:

f'(\theta) = \lim\limits_{\varepsilon \to 0}=\dfrac{f(\theta+\varepsilon)-(\theta)}{\varepsilon}\\

ошибка:O(\varepsilon)

13. Градиентный тест

Градиентный тест проводится с использованием метода, описанного в предыдущем разделе.

Параметры подключения:

Потому что наша нейросеть содержит большое количество параметров:W^{[1]},b^{[1]},\cdots,W^{[L]},b^{[L]}, чтобы сделать тест градиента, вам нужно соединить все эти параметры и преобразовать их в большой вектор\theta.

в то же времяdW^{[1]},db^{[1]},\cdots,dW^{[L]},db^{[L]}Повторяй:

Проведите градиентный тест:

Проведите градиентный тест, как показано на рисунке ниже.

судитьd\theta_{approx}\approx d\thetaЭто близко.

Формула суждения:

\dfrac {||d\theta_{approx}-d\theta||_{2}}{||d\theta_{approx}||_{2}+||d\theta||_{2}}

в,"||\cdot ||_{2}” обозначает евклидову норму, которая представляет собой сумму квадратов ошибок, а затем квадратный корень, в результате чего получается евклидово расстояние.

14. Реализация заметок по тестированию градиента

  • Не используйте градиентный тест во время обучения, используйте его только во время отладки и отключите функцию градиентного теста после использования;
  • Если в градиентном тесте алгоритма есть ошибка, проверьте каждый пункт, чтобы найти ошибку, то есть выяснить, какие $d\theta_{приблизительно}[i]$ и $d\theta$ имеют большую разницу в цене;
  • Не забывайте термин регуляризации;
  • Градиентное тестирование нельзя использовать одновременно с отсевом. Поскольку в процессе каждой итерации отсев будет случайным образом исключать разные нейроны единицы скрытого слоя, сложно рассчитать функцию стоимости J отсева при градиентном спуске;
  • Запустите градиентные тесты при случайной инициализации, возможно, после нескольких тренировок. (Не понял, что мастер имел в виду под этим пунктом?)

Эта статья будет обновлена ​​в то же время в моемБлог CSDN:

Ng Enda Coursera Deep Learning Course DeepLearning.ai Заметки об уточнении (2-1) — Практические аспекты глубокого обучения

Добро пожаловать, чтобы обратить внимание, учиться и прогрессировать вместе. ^_^