Разделите набор данных: обучайте, разрабатывайте, тестируйте
-
Наборы поездов используются для обучения ваших алгоритмических моделей.
-
Наборы разработчиков используются для проверки производительности различных алгоритмов и выбора из них наилучшей модели алгоритма.
-
Тестовые наборы используются для проверки фактической производительности лучшего алгоритма в качестве объективной оценки алгоритма.
Эти 3 набора устанавливаются на 60%, 20%, 20% или 70% и 30% (без разработки), когда число небольшое, например: 100, 1000, 10000;
В эпоху больших данных для 1 миллиона выборок часто бывает достаточно всего 10 000. Для выборок больших данных соотношение обучающих/разработочных/тестовых наборов обычно можно установить на 98%/1%/1% или 99%. /0,5%/0,5%. Чем больше объем выборочных данных, тем меньшую долю соответствующих наборов Dev/Test можно установить.
Предпосылка приведенного выше разделения данных заключается в том, что обучающая выборка и тестовая выборка поступают из одного и того же распределения.
Например, предположим, что вы разрабатываете мобильное приложение, которое позволяет пользователям загружать изображения, и приложение распознает изображения кошек. В алгоритме распознавания приложений ваши обучающие образцы могут поступать из сетевых загрузок, а проверочные и тестовые образцы могут поступать из загрузок от разных пользователей. Изображения, загруженные из Интернета, обычно имеют большее количество пикселей и являются более регулярными, в то время как изображения, загруженные пользователями, часто имеют нестабильные пиксели и разное качество изображения. Следовательно, обучающие выборки и проверочные/тестовые выборки могут поступать из разных дистрибутивов.
Когда мы участвуем в конкурсе, нам, как правило, не нужно настраивать наборы тестов. Основная цель наборов тестов — выполнить объективную оценку. Мы можем обучать различные модели алгоритмов с помощью наборов Train, а затем проверять их соответственно на наборах Dev и выбирать лучшую модель алгоритма в соответствии с результатами.
Bias/Variance
-
высокий уклон. Метод уменьшения высокого смещения обычно заключается в увеличении количества скрытых слоев и нейронов нейронной сети, увеличении времени обучения и выборе других, более сложных моделей НС.
-
высокая дисперсия. Способ уменьшить высокую дисперсию обычно заключается в увеличении данных обучающей выборки, выполнении регуляризации, выборе других, более сложных моделей НС и т. д.
В традиционных алгоритмах машинного обучения смещение и дисперсия обычно противоположны: уменьшение смещения увеличивает дисперсию, а уменьшение дисперсии увеличивает смещение. В современном глубоком обучении, используя более сложные нейронные сети и массивные обучающие выборки, систематическая ошибка и дисперсия, как правило, могут быть одновременно эффективно уменьшены.
проблема | Оптимизация | |
---|---|---|
высокое отклонение | добавить сложности | |
высокая дисперсия | регуляризация, добавление данных |
Общие методы регуляризации
Регуляризация L2
Вопрос: Почему регуляризовать только w, но не b?
Ответ: Поскольку w имеет большую размерность, сложность намного превышает b.
Регуляризация L1
Преимущество L1: экономия места для хранения, поскольку большая часть w равна 0.
Недостаток: Дифференциальный вывод более сложен.
Вывод: выберите регуляризацию L2.
Анализ метода L2
В: Почему работает регуляризация L2?
О: Это можно понять таким образом.
После добавления регуляризации обновление параметра w становится:
Очевидно здесь
Это означает, что после добавления L2 происходит ускорение затухания параметра w, и мы вообще имеем функцию активации в нейросети.В качестве примера возьмем tanh:
Если w мало, это означает, что выход мал, а tanh близок к линейному около 0, что означает, что общая нелинейность сети снижается.
Но если w слишком мало, это означает, что некоторые нейроны не будут работать, и сеть станет:
В это время подгоночная способность сети становится слабой, поэтому нам нужно выбрать подходящее , чтобы предотвратить слишком быстрое затухание w.
Dropout
Dropout имеет разные методы реализации, которые описаны ниже:
Inverted dropout
keep_prob = 0.8# 保留0.8dl = np.random.rand(al.shape[0],al.shape[1])<keep_probal = np.multiply(al,dl)# scale up 操作al /= keep_prob
Масштабирование al должно гарантировать, что после исключения входное значение al в качестве следующего слоя нейронов останется неизменным в максимально возможной степени.
В: Почему отсев работает?
A: Путем случайного отключения определенных нейронов, чтобы результаты не зависели от конкретных нейронов, также предотвращается переобучение.
принцип настройки отсева
-
Для скрытых слоев с большим количеством нейронов значение keep_out может быть меньше, например 0,5;
-
Для скрытых слоев с меньшим количеством нейронов параметр keep_out можно установить больше, например, 0,8, а параметр равен 1.
другие обычные методы
-
Увеличьте количество обучающих выборок
-
Аугментация данных, например, в задаче распознавания изображений существующие изображения можно переворачивать по горизонтали, вертикали, поворачивать под любым углом, масштабировать или расширять и так далее.
-
early stopping
-
Закончите тренировку, когда ошибка dev set начнет расти.
Сравнение L2 и ранней остановки
Учебные модели машинного обучения преследуют две цели:
-
Один из них заключается в оптимизации функции затрат и минимизации J;
-
Во-вторых, предотвратить переоснащение.
Практика ранней остановки предотвращает переоснащение за счет уменьшения количества итераций обучения, так что J недостаточно мало.
Регуляризация L2, итеративное обучение достаточно для уменьшения J, а также может эффективно предотвращать переоснащение.
Предпочтение отдается регуляризации L2.
Входной де-усредненный, нормализованный
Примечание. Поскольку тренировочный набор нормализован, его следует нормализовать, используя то же самое и для тестового набора или на практике. Это гарантирует, что операция нормализации обучающего набора и тестового набора будет согласована.
Инициализация веса
В модели глубокой нейронной сети, взяв в качестве примера один нейрон, входной номер этого слоя (l) равен n, а его выходной
Идеи: чтобы z не было слишком большим или слишком маленьким, идея состоит в том, чтобы сделать w связанным с n, и чем больше n, тем меньше w должно быть. Это гарантирует, что z не слишком велико. Один из способов — инициализировать w с дисперсией .
Когда функция активации tanh, когда w инициализируется, пусть ее дисперсия будет:
w[l] = np.random.randn(n[l],n[l-1])*np.sqrt(1/n[l-1])
Функция активации — ReLU, и инициализация веса w обычно делает его дисперсию:
w[l] = np.random.randn(n[l],n[l-1])*np.sqrt(2/n[l-1])
Кроме того, Йошуа Бенжио предложил другой способ инициализации w, чтобы его дисперсия была равна:
w[l] = np.random.randn(n[l],n[l-1])*np.sqrt(2/n[l-1]*n[l])
mini-batch
Рекомендация: для мини-пакетного градиентного спуска можно обучить несколько эпох. Более того, в каждую эпоху лучше всего перемешивать общие обучающие данные и повторно делить их на T групп мини-пакетов, что способствует обучению лучшей модели нейронной сети.
Рекомендации для каждого размера партии:
Если общий размер выборки m не слишком велик, например , рекомендуется напрямую использовать пакетный градиентный спуск. Если общий размер выборки m велик, рекомендуется разделить выборку на множество мини-партий. Рекомендуемый размер мини-пакета — 64 128 256 512. Это все степени числа 2. Причина этого параметра заключается в том, что данные хранения компьютера обычно представляют собой степень 2, и этот параметр может повысить скорость работы.
Экспоненциальное средневзвешенное значение
формула
Приблизительные допустимые значения:
Метод градиентного спуска
Алгоритм градиентного спуска по импульсу
Оригинальный алгоритм градиентного спуска показан синей линией на рисунке выше. В процессе градиентного спуска колебания градиентного спуска велики, особенно в случае, когда диапазон значений между W и b сильно различается. В настоящее время градиент в каждой точке связан только с текущим направлением, создавая эффект полилинии и медленно перемещаясь. Если градиент экспоненциально взвешен и усреднен, так что текущий градиент не только связан с текущим направлением, но также связан с предыдущим направлением, эта обработка делает градиент в прямом направлении более плавным, уменьшает колебания и может достигать минимального значения быстрее .
Экспоненциально взвешенное среднее выражение для веса W и постоянного члена b выглядит следующим образом:
Весь алгоритм потока:
Первоначально пусть . Общая настройка представляет собой экспоненциально взвешенное среднее данных за первые 10 дней, и фактический эффект от применения лучше.
RMSprop
Формула обновления:
Значок:
Осциллирующий — общий градиентный спуск, пологий — RMSprop.
Принцип таков: в каком направлении колебание велико, скорость обновления направления уменьшается, тем самым уменьшая колебание.
Чтобы знаменатель не был равен 0, мы обычно фиксируем его следующим образом:
Adam
Алгоритм Адама (адаптивная оценка момента) сочетает в себе алгоритм градиентного спуска по импульсу и алгоритм RMSprop. Его алгоритм потока:
Поэтому мы обычно выбираем алгоритм Адама.
Настройки скорости обучения
Снижение скорости обучения:
Среди них деградация_скорость — это параметр (регулируемый), а эпоха — это количество раз для обучения всех выборок. По мере увеличения эпохи
будет продолжать уменьшаться.
Общая идея такова: по мере увеличения количества тренировок снижайте скорость обучения.
Шаги настройки
Существует множество гиперпараметров (Hyperparameters), которые необходимо отладить для глубоких нейронных сетей, в том числе:
-
: фактор обучения
-
: Коэффициент градиентного спуска по импульсу
-
: параметры алгоритма Адама
-
#layers: количество слоев нейронной сети
-
#скрытые единицы: количество нейронов в каждом скрытом слое
-
Затухание скорости обучения: параметр снижения коэффициента обучения
-
размер мини-пакета: количество образцов, содержащихся в пакетных обучающих образцах.
Мы можем грубо настроить параметры один за другим в соответствии с приведенным выше порядком до оптимального.
Эмпирическое правило для выбора количества слоев в нейронной сети:
Как и при оценке CTR, эффект трехслойной нейронной сети лучше, чем эффект двухслойной нейронной сети, но если количество слоев постоянно увеличивается (4, 5, 6 слоев), это не улучшит конечный результат, поэтому много прыгать.
Однако обработка изображений и аудио требует особого подхода и требует более глубокой сети для более точного извлечения информации об изображениях и аудио.
При выборе конкретных гиперпараметров мы случайным образом выбираем параметры:
Определив диапазон, а затем уменьшив площадь на этой основе, повторно выберите параметры случайным образом:
Batch Normalization
Прежде чем выходные данные функции активации будут использоваться в качестве выходных данных следующего слоя, выполните следующую обработку:
Однако с точки зрения функции активации, если входное среднее значение каждого скрытого слоя находится в области, близкой к 0, то есть в линейной области функции активации, это не способствует обученной нелинейной нейронной сети, и полученный модельный эффект будет не очень хорошим, поэтому следующие поправки:
Batch Normalization at test time
Как использовать пакетную нормализацию в тестировании? В прогнозе есть только одна выборка, и мы не можем найти среднее значение и дисперсию, поэтому мы должны оценить среднее значение и дисперсию в этом тестовом процессе.
Один из методов оценки: использовать среднее значение и дисперсию во время обучения;
Другой: экспоненциально взвешенное среднее.
Метод экспоненциально взвешенного среднего очень прост.Для l-го скрытого слоя рассмотрим сумму всех мини-партий под скрытым слоем, а затем используйте экспоненциально взвешенное среднее для прогнозирования суммы текущей одиночной выборки. Это позволяет получить оценки среднего значения и дисперсии для одной выборки процесса тестирования. Наконец, значения каждого слоя рассчитываются с использованием значений и , полученных в процессе обучения.
Суммировать
Эта статья представляет собой запись курса глубокого обучения Эндрю Нг. Заметки больше касаются записи списка для себя, чтобы вы могли следовать этому списку для отладки сети в будущем.
Кроме того, я рекомендую колонку Zhihu Дорога машинного обучения Red Stone. Видеокурс Wu Enda можно сказать, что это текстовая рукопись видео, что нам удобно для ознакомления с основным содержанием. Большое спасибо за Red Stone!
Отображение формул Markdown в заголовках не очень, можно посмотреть исходный адрес: https://www.zybuluo.com/zhuanxu/note/1014888