Волна искусственного интеллекта захлестывает мир, и многие слова всегда звучат у нас в ушах: искусственный интеллект (Artificial Intelligence), машинное обучение (Machine Learning), глубокое обучение (Deep Learning). Эта статья предназначена в основном для того, чтобы разобраться в примечаниях к содержанию курса Ли Хунъи, и в конце статьи дана справочная ссылка.
6- Введение в глубокое обучение
Три шага к глубокому обучению
- Шаг 1: Нейронная сеть
- Шаг 2: Оценка модели (качество функции)
- Шаг 3: выберите лучшую функцию (выберите лучшую функцию)
Нейронные сети
Узлы в нейронной сети похожи на наши нейроны.
Нейронная сеть также может иметь много разных методов соединения, которые будут создавать разные структуры.В этой нейронной сети у нас есть много функций логистической регрессии, каждая из которых имеет свой собственный вес и свое смещение.Эти веса и смещения являются параметрами, а эти нейронные соединения проектируются вручную.
Полностью подключенная нейронная сеть с прямой связью
концепция:Feedforward (прямая связь) также может называться прямой С точки зрения потока сигналов это означает, что после того, как входной сигнал поступает в сеть, поток сигналов является односторонним, то есть сигнал поступает от предыдущего слоя к следующему слою. , до выходного слоя, любые два слоя которого Связь между собой не имеет обратной связи (обратной связи), то есть сигнал не возвращается со следующего слоя на предыдущий слой.
После ввода соответствующего значения нейронная сеть напрямую умножает соответствующий вес в каждом слое, а затем вводит его в заданную функцию активации для получения ввода следующего слоя, а затем снова повторяет предыдущую операцию, добавляя сигнал слой за слоем. .Пройти вниз и, наконец, получить выход из сети.
Для структуры сети глубокого обучения ее следует разделить на следующие слои:
- Входной слой: 1 слой
- Скрытый слой: слой N
- Выходной слой: 1 слой
Понимание полного соединения:Существует соединение между уровнем 1 и уровнем 2, поэтому оно называется «Полное подключение».
Упреждающее понимание:Теперь передается направление спереди назад, поэтому оно называется прямой связью.
Глубокое понимание:Глубокий = Много скрытых слоев относится к наличию множества скрытых слоев.
Зачем вводить матричный расчет:По мере увеличения количества слоев частота ошибок уменьшается, а объем вычислений увеличивается, обычно на сотни миллионов вычислений. Для такой сложной структуры мы не должны рассчитывать по одному, для сотен миллионов вычислений эффективность использования циклов очень низкая. Здесь мы представляемМатричная операцияЭто может сделать нашу работу намного быстрее и эффективнее. Преимущество написания матричных операций таким образом заключается в том, что вы можете использовать ускорение графического процессора.
Природа
Преобразование объектов через скрытые слои. Скрытый слой заменяется извлечением признаков, чтобы заменить исходную разработку признаков, так что выходные данные последнего скрытого слоя представляют собой набор новых признаков (эквивалент операции черного ящика), а для выходного слоя — выходные данные предыдущего. скрытый слой фактически используется в качестве входных данных (набор лучших функций, полученных путем извлечения функций), а затем передается мультиклассификатор (который может быть функцией softmax), чтобы получить окончательный результат y.
Оценка модели
Для потери нам нужно не только рассчитать отдельные данные, но и рассчитать потери всех обучающих данных в целом, а затем сложить потери всех обучающих данных, чтобы получить общую потерю L. Следующим шагом является поиск набора функций в наборе функций, который может минимизировать общие потери L, или найти набор параметров нейронной сети, чтобы минимизировать общие потери L.
Лучший способ рассчитать потери в нейронной сети — этообратное распространение, мы можем использовать множество фреймворков для расчета потерь, таких как TensorFlow, theano, Pytorch и т. д.
Выберите лучшую функцию
Как найти оптимальную функцию и лучший набор параметров, что мы используемградиентный спуск.
конкретный процесс:Это набор параметров, включая веса и смещения, случайным образом находим начальное тестовое значение, затем вычисляем частный дифференциал, соответствующий каждому параметру, и получаем набор частных дифференциалов.Это градиент.С помощью этих частных дифференциалов мы можем постоянно обновлять градиент для получения новых параметров.Таким образом, мы можем получить лучший набор параметров, чтобы минимизировать значение функции потерь, повторяя его.
Этапы строительства проекта
Для создания проекта глубокого обучения с нуля его следует разделить на следующие этапы:
- Часть 1. Запуск проекта глубокого обучения
- Часть 2: Создание набора данных для глубокого обучения
- Часть 3: Проектирование глубоких моделей
- Часть 4. Визуализация моделей и метрик глубокой сети
- Часть 5: Отладка в сетях глубокого обучения
- Часть 6. Повышение производительности модели глубокого обучения и настройка сети
Эти шесть частей будут объяснены ниже.
Часть 1. Запуск проекта глубокого обучения
исследование проекта: Мы начинаем с изучения существующих продуктов, чтобы изучить их слабые стороны.
теоретическое проектное исследование: Далее нам нужно понять соответствующие исследования и проекты с открытым исходным кодом, многие люди просматривают как минимум десятки статей и проектов, прежде чем приступить к практике. Код глубокого обучения (DL) лаконичен, но в нем сложно устранять ошибки, и многие исследовательские работы часто не учитывают детали реализации. Многие проекты начинаются с реализации с открытым исходным кодом и решают схожие проблемы, поэтому мы можем искать проекты с открытым исходным кодом.
Часть 2: Создание набора данных для глубокого обучения
мы можем использоватьобщедоступный набор данныхилипользовательский набор данных. Публичные наборы данных могут предоставить более аккуратные образцы и базовую производительность модели. Если у вас есть несколько доступных общедоступных наборов данных, выберите наиболее подходящий и качественный образец для вашей проблемы; если в соответствующем поле общедоступных наборов данных нет, мы можем собрать данные и создавать наборы данных в соответствии с фактическими потребностями проекта.
Качественный набор данных должен включать следующие функции:
- баланс классов
- достаточные данные
- Высококачественная информация в данных и разметке
- Ошибки данных и разметки очень малы
- связанный с вашим вопросом
Меры предосторожности:
- По возможности используйте общедоступные наборы данных;
- Найдите лучшие сайты для качественных, разнообразных образцов;
- Анализировать ошибки и отфильтровывать образцы, не относящиеся к реальной проблеме;
- Создавайте свои образцы итеративно;
- Сбалансируйте количество образцов в каждой категории;
- Сортировать образцы перед тренировкой;
- Соберите достаточно образцов. Если образцов недостаточно, применяется трансферное обучение.
Часть 3: Проектирование глубоких моделей
Первая гибкая и простая модель:Начните с меньшего количества сетевых слоев и настроек, а затем выполните некоторые необходимые схемы тонкой настройки гиперпараметров позже. Все это требует проверки того, что функция потерь все время уменьшается, и в первую очередь не тратьте время на более крупные модели.
Приоритизация и поэтапный дизайн:Разбивайте сложные проблемы на более мелкие и решайте их шаг за шагом. В процессе проектирования модели нас ждет много сюрпризов. Вместо долгосрочного плана постоянных изменений лучше составить план, ориентированный на приоритеты. Используйте более короткие и мелкие итерации проектирования для поддержания управляемости проекта.
Избегайте случайных улучшений:Начните с анализа слабых сторон ваших собственных моделей, а не с их произвольного улучшения. Внесение улучшений по желанию контрпродуктивно, пропорционально увеличивая затраты на обучение с минимальным вознаграждением.
предел:Мы применяем ограничения к дизайну сети, чтобы обеспечить более эффективное обучение. Построение глубокого обучения — это не просто набор сетевых слоев. Добавление правильных ограничений может сделать обучение более эффективным или разумным.
распланируйте детали:Выбор программной среды для глубокого обучения Передача обучения, многие предварительно обученные модели могут использоваться для решения задач глубокого обучения, мы можем смоделировать наши идеи на исходной модели, чтобы увидеть, каков эффект.
Функция стоимости:Не все функции стоимости эквивалентны, и это влияет на сложность обучения модели. Некоторые функции стоимости довольно стандартны, но некоторые проблемные области требуют тщательного рассмотрения.
- Проблема классификации: перекрестная энтропия, функция потерь при складывании (SVM)
- Регрессия: среднеквадратическая ошибка (MSE)
- Обнаружение или сегментация объектов: пересечение над объединением (IoU)
- Оптимизация политики: Дивергенция KL
- Вложения слов: оценка контрастности шума (NCE)
- Векторы слов: сходство косинусов
Метрики:Хорошие метрики помогают лучше сравнивать и настраивать модели.
Регуляризация:Как регуляризация L1, так и регуляризация L2 распространены, ноРегуляризация L2 более популярна в глубоком обучении. Каковы преимущества регуляризации L1? Регуляризация L1 может создавать более разреженные параметры, что помогает распутать лежащее в основе представление. Поскольку каждый ненулевой параметр добавляет штраф к стоимости, L1 предпочитает нулевые параметры регуляризации L2, т. е. предпочитает нулевые параметры многим крошечным параметрам регуляризации L2. Регуляризация L1 делает фильтр более чистым и простым для интерпретации, поэтому это хороший выбор для выбора признаков. L1 также менее уязвим для выбросов и работает лучше, если данные не слишком чистые. Однако регуляризация L2 по-прежнему предпочтительна, поскольку решение может быть более стабильным.
Градиентный спуск:Всегда внимательно следите за исчезновением или взрывом градиентов, проблемы с градиентным спуском имеют много возможных причин, которые трудно доказать. Не переходите к настройке скорости обучения или слишком быстрому изменению дизайна модели, небольшие градиенты могут быть просто вызваны программными ошибками, такими как неправильное масштабирование входных данных или весовые коэффициенты, инициализированные нулем. Применяйте усечение градиента при взрыве градиентов (особенно для НЛП), если устранены другие возможные причины. Пропускные соединения - это распространенный метод смягчения проблем градиентного спуска. В ResNet остаточный модуль позволяет вводу обходить текущий уровень на следующий уровень, что эффективно увеличивает глубину сети.
Масштаб:Масштабировать входные функции. Обычно мы масштабируем объекты, чтобы иметь нулевое среднее значение в определенном диапазоне, например [-1, 1]. Неправильное масштабирование объектов является одной из наиболее распространенных причин взрыва или уменьшения градиентов. Иногда мы вычисляем среднее значение и дисперсию по обучающим данным, чтобы приблизить данные к нормальному распределению. При масштабировании проверочных или тестовых данных повторно используйте среднее значение и дисперсию обучающих данных.
Выбывать:Dropout можно применять к слоям для нормализации модели. После роста серийной нормализации в 2015 году отсев стал менее популярным. Пакетная нормализация масштабирует выходные данные узла, используя среднее значение и стандартное отклонение. Это действует как шум, заставляя слой более надежно изучать переменные во входных данных. Поскольку нормализация партии также помогает при градиентном спуске, она постепенно заменяет Dropout. Преимущества сочетания Dropout и регуляризации L2 зависят от предметной области. Часто мы можем протестировать отсев во время настройки и собрать эмпирические данные, чтобы продемонстрировать его преимущества.
функция активации:В DL ReLU является наиболее часто используемой нелинейной функцией активации. Если скорость обучения слишком высока, активация многих узлов может быть нулевой. Если изменение скорости обучения не помогает, мы можем попробовать дырявый ReLU или PReLU. В дырявом ReLU, когда x
Разделите набор данных:Чтобы проверить производительность в реальных условиях, мы разделили данные на три части: 70 % для обучения, 20 % для проверки и 10 % для тестирования. Убедитесь, что выборки достаточно перемешаны в каждом наборе данных и каждой партии обучающих выборок. Во время обучения мы используем обучающий набор данных для построения моделей с различными гиперпараметрами. Мы запускаем эти модели в наборе данных проверки и выбираем модель с наивысшей точностью. Если результаты вашего теста значительно отличаются от результатов проверки, вам следует более тщательно перетасовать данные или собрать больше данных.
Пользовательский слой:Встроенные слои в пакетах глубокого обучения были лучше протестированы и оптимизированы. Тем не менее, если вы хотите настроить слой, вам необходимо:
- Модульное тестирование прямого и обратного кода с неслучайными данными;
- Сравните результат обратного распространения с наивной проверкой градиента;
- Добавьте небольшую сумму к знаменателю или используйте логарифмические вычисления, чтобы избежать значений NaN.
Нормализованный:Большой проблемой глубокого обучения является воспроизводимость. Во время отладки трудно отладить, если исходные параметры модели продолжают меняться от сеанса к сеансу. Поэтому мы явно инициализируем начальные значения для всех генераторов случайных чисел. Мы инициализируем seed для python, NumPy и TensorFlow в нашем проекте. Во время тонкой настройки мы отключили инициализацию начального числа, в результате чего для каждого прогона использовалась другая модель. Чтобы воспроизвести результаты модели, мы проверим ее и перезагрузим позже.
Оптимизатор:Оптимизатор Адама — один из самых популярных оптимизаторов в области глубокого обучения. Он подходит для многих видов задач, включая модели с разреженными или зашумленными градиентами. Его легкая тонкая настройка позволяет быстро достичь отличных результатов. На практике конфигурация параметров по умолчанию обычно работает нормально. Оптимизатор Adam сочетает в себе преимущества AdaGrad и RMSProp. Адам использует одинаковую скорость обучения для каждого параметра и адаптируется независимо по мере обучения. Адам — это алгоритм, основанный на импульсе, который использует историю градиентов. В результате градиентный спуск может работать более плавно и устранять проблему колебаний параметров, вызванную большими градиентами и большими скоростями обучения.
Настройка оптимизатора Адама
У Адама есть 4 настраиваемых параметра:
- скорость обучения (по умолчанию 0,001);
- β1: скорость экспоненциального затухания оценки первого момента (по умолчанию 0,9);
- β2: экспоненциальная скорость затухания второй оценки момента (по умолчанию 0,999), это значение должно быть установлено близко к 1 в задачах с разреженным градиентом;
- (по умолчанию 1e^-8) — маленькое значение, чтобы избежать деления на ноль.
β (импульс) сглаживает градиентный спуск, накапливая историческую информацию о градиенте. Обычно на ранних этапах настройки по умолчанию уже хорошо работают. В противном случае наиболее вероятным параметром для изменения должна быть скорость обучения.
Часть 4. Визуализация моделей и метрик глубокой сети
Когда дело доходит до устранения неполадок глубоких нейронных сетей, люди всегда делают выводы слишком быстро и слишком рано. Прежде чем мы узнаем, как устранять неполадки, нам нужно подумать о том, что искать, и потратить часы на отслеживание проблемы. В этом разделе мы обсудим, как визуализировать модели глубокого обучения и показатели производительности.
Тензорборд:
Важно отслеживать каждое движение и проверять результаты на каждом этапе. С помощью готовых пакетов, таких как TensorBoard, легко визуализировать модели и показатели производительности, а вознаграждение практически мгновенно.
Визуализация данных (ввод, вывод):
Проверка входных и выходных данных модели. Прежде чем вводить данные в модель, сохраните несколько обучающих и проверочных образцов для визуальной проверки.
Метрики (потери и точность):
Помимо регулярной регистрации потерь и показателей точности, мы также можем записывать их и отображать в виде графиков для анализа их долгосрочных тенденций. На рисунке ниже показаны точность и кросс-энтропийные потери, показанные на TensorBoard.
Построение графика потерь может помочь нам скорректировать скорость обучения. Произвольный долгосрочный рост потерь указывает на то, что скорость обучения слишком высока. Если скорость обучения низкая, скорость обучения медленнее.
Вот еще один реальный пример, когда скорость обучения слишком высока. Мы видим внезапный рост функции потерь (вероятно, вызванный внезапным ростом градиента).
Мы используем график точности для настройки коэффициента регуляризации. Если существует большой разрыв между точностью проверки и обучения, модель переоснащается. Чтобы уменьшить переоснащение, нам нужно увеличить коэффициент регуляризации.
Часть 5: Отладка в сетях глубокого обучения
Этапы решения проблем для глубокого обучения
В начале разработки мы столкнемся с несколькими проблемами одновременно. Как упоминалось ранее, обучение глубокому обучению состоит из миллионов итераций. Ошибки трудно найти и легко сломать. Начните с простого и постепенно вносите изменения. Оптимизация модели, такая как регуляризация, может быть выполнена после дегугирования кода. Проверьте модель в функциональном стиле:
- установите коэффициент регуляризации равным 0;
- отсутствие другой регуляризации (включая отсев);
- оптимизатор Adam с настройками по умолчанию;
- использовать РеЛУ;
- Нет увеличения данных;
- Меньше слоев глубокой сети;
- Расширьте входные данные, но не подвергайте их предварительной обработке без необходимости;
- Не тратьте время на длительные итерации обучения или большие партии.
Переоснащение модели небольшим объемом обучающих данных — лучший способ отладки глубокого обучения.Если значение потерь не снижается в течение тысяч итераций, выполните дальнейшую отладку кода. Выйдите за пределы понятия догадок, и вы достигли своей первой вехи. Затем внесите последующие изменения в модель: добавьте сетевые слои и настройки, начните обучение с полными обучающими данными, увеличьте регуляризацию, чтобы контролировать переоснащение, отслеживая разницу в точности между обучающими и проверочными наборами данных.
Инициализировать гиперпараметры
Многие гиперпараметры более важны для оптимизации модели. Отключите гиперпараметры или используйте значения по умолчанию. Используйте оптимизатор Adam, который быстр, эффективен и имеет хорошую скорость обучения по умолчанию. Ранние проблемы в основном были связаны с ошибками, а не с дизайном модели и тонкой настройкой. Перед тонкой настройкой просмотрите контрольный список ниже. Эти проблемы более распространены и их легко проверить. Если значение потерь не упало, отрегулируйте скорость обучения. Если значение потерь падает слишком медленно, увеличьте скорость обучения на 10. Если значение потерь увеличивается или градиент взрывается, скорость обучения уменьшается на 10. Повторяйте этот процесс до тех пор, пока значение потерь постепенно не уменьшится. Типичная скорость обучения составляет от 1 до 1e-7.
Контрольный список
данные:
- визуализировать и проверять входные данные (после предварительной обработки данных, перед вводом в модель);
- Проверить правильность введенных меток (после возмущения данных);
- Не передавайте один и тот же пакет данных снова и снова;
- Соответствующим образом масштабируйте входные данные (обычно до интервала (-1, 1) с нулевым средним значением);
- Проверьте диапазон вывода (например, между интервалом (-1, 1));
- Всегда используйте среднее значение/дисперсию обучающего набора для масштабирования проверочного/тестового набора;
- Все входные данные в модель имеют одинаковую размерность;
- Получите общее качество набора данных (есть ли слишком много выбросов или плохих выборок).
Модель:
- Точная инициализация параметров модели, а не установка всех весов на 0;
- Активация отладки или градиентное исчезновение/взрыв слоев (от крайнего правого до крайнего левого);
- Отладить сетевой уровень, вес которого равен 0 или вес которого слишком велик;
- Проверьте и протестируйте функцию потерь;
- Для предварительно обученных моделей диапазон входных данных должен соответствовать диапазону, используемому в модели;
- Выпадение при выводе и тестировании всегда должно быть отключено.
Инициализация веса
Инициализация всех весов равными 0 — самая распространенная ошибка, а глубокие сети ничему не учатся. Веса инициализируются согласно распределению Гаусса:
Масштабирование и нормализация
Масштабирование и нормализация хорошо изучены, но по-прежнему являются одним из самых недооцененных вопросов. Модель легче обучить, если нормализованы как входные функции, так и выходные данные узла. Если сделать это неточно, значение потерь не будет уменьшаться со скоростью обучения. Мы должны отслеживать входные функции и гистограммы выходных данных узла на каждом слое. для соответствующего масштабирования ввода. А для вывода узла идеальной формой является нулевое среднее и не слишком большое (положительное или отрицательное). Если это не так и в этом слое есть проблема с градиентом, нормализация пакета выполняется на сверточном слое, а нормализация слоя выполняется на блоке RNN.
функция потерь
Проверьте и проверьте точность функции потерь. Значение потерь модели должно быть ниже значения случайного предположения.
Ошибка анализа
Проверьте на плохую производительность (ошибку) и улучшите ее, а также визуализируйте ошибку.
тонкая настройка регуляризации
关掉正则化(使得模型过拟合)直到做出合理的预测。
После того, как код модели заработал, следующим параметром, который необходимо настроить, является коэффициент регуляризации. Нам нужно увеличить размер обучающих данных, а затем увеличить регуляризацию, чтобы уменьшить разницу между точностью обучения и проверки. Не заходите слишком далеко, потому что мы хотим немного подогнать модель. Внимательно следите за данными и затратами на регуляризацию. Потеря регуляризации не должна контролировать потерю данных в длительных масштабах времени. Если разрыв между двумя значениями точности не может быть уменьшен с помощью большой регуляризации, то сначала следует устранить код или метод регуляризации.
Подобно скорости обучения, мы изменяем значение теста в логарифмической шкале, например, на 1/10 в начале. Обратите внимание, что каждый фактор регуляризации может иметь совершенно другой порядок величины, и мы можем итеративно настраивать эти параметры.
Множественные функции потерь
В первой реализации избегают множественных функций потери данных. Веса каждой функции потерь могут быть разных порядков, а также требовать некоторых усилий для корректировки. Если у нас есть только одна функция потерь, мы можем заботиться только о скорости обучения.
фиксированная переменная
Когда мы используем предварительно обученную модель, мы можем зафиксировать параметры модели для определенного слоя, тем самым ускорив вычисления. Обязательно дважды проверьте наличие ошибок закрепления переменных.
Часть 6. Повышение производительности модели глубокого обучения и настройка сети
Увеличить вместимость модели
Чтобы увеличить емкость модели, мы можем постепенно добавлять слои и узлы в глубокую сеть (DN). Более глубокие слои выводят более сложные модели. Процесс настройки является более практическим, чем теоретическим. Мы постепенно добавляем слои и узлы, которые могут привести к переобучению модели, потому что мы можем снова упорядочить ее. Повторяйте этот итеративный процесс до тех пор, пока точность больше не будет улучшаться, и это больше не будет стоить снижения производительности обучения и вычислений.
对于非常深层的网络,梯度消失问题很严重。我们可以添加跳跃连接(类似 ResNet 中的残差连接)来缓解该问题。
Изменения в дизайне модели и набора данных
Вот список проверок для повышения производительности:
- Анализ ошибок (плохих результатов прогнозирования) в наборе данных проверки;
- Функции активации монитора. Рассмотрите возможность пакетной нормализации или нормализации слоя, когда функция активации не центрирована на нуле или не имеет нормального распределения;
- Отслеживайте долю недействительных узлов;
- Используйте усечение градиента (особенно в задачах NLP), чтобы контролировать проблему взрыва градиента;
- Перемешивать наборы данных (вручную или программно);
- Сбалансированный набор данных (одинаковое количество образцов на класс).
Мы должны внимательно следить за гистограммой активации перед функцией активации. Если их масштабы сильно различаются, то градиентный спуск будет неэффективен. Используйте нормализацию. Если глубокая сеть имеет большое количество недействительных узлов, то нам следует отследить проблему дальше. Это может быть вызвано ошибками, инициализацией веса или исчезающими градиентами. Если нет, поэкспериментируйте с некоторыми расширенными функциями ReLU, такими как дырявый ReLU.
Сбор и очистка набора данных
Если вы хотите создать свой собственный набор данных, лучший совет — внимательно изучить, как собирать образцы. Найдите самые качественные ресурсы, отфильтруйте все данные, не относящиеся к вашей проблеме, и проанализируйте ошибки.
увеличение данных
Сбор размеченных данных — дорогое удовольствие. Для изображений мы можем использовать методы улучшения данных, такие как вращение, случайное кадрирование и смещение, чтобы изменить существующие данные и создать больше данных. Цветовые искажения включают оттенок, насыщенность и сдвиг экспозиции.
контролируемое обучение
Мы также можем дополнить обучающие данные неразмеченными данными. Используйте модель для классификации данных. Добавьте образцы с прогнозами высокой достоверности в набор обучающих данных с соответствующими прогнозами меток.
регулировать
Регулировка скорости обучения
Давайте начнем с краткого обзора того, как настроить скорость обучения. Во время ранней разработки мы отключаем или устанавливаем на 0 любые некритические гиперпараметры, включая регуляризацию. С оптимизатором Adam скорость обучения по умолчанию обычно работает хорошо. Если мы уверены в своем коде, но потери не падают, нам нужно настроить скорость обучения.Типичная скорость обучения составляет от 1 до 1e-7..Уменьшайте скорость обучения на 10% каждый раз, и протестируйте его на коротких итерациях, внимательно отслеживая потери. Если она продолжает расти, то скорость обучения слишком высока. Если он не падает, скорость обучения слишком низкая. Увеличивайте скорость обучения до тех пор, пока потеря не сгладится раньше времени.
Настройка гиперпараметров
После того, как дизайн модели станет стабильным, мы также можем дополнительно настроить модель. Наиболее часто настраиваемые гиперпараметры:
- размер мини-партии;
- скорость обучения;
- фактор регуляризации;
- Гиперпараметры конкретного слоя (например, отсев).
Размер мини-партии
ОбщийРазмер лота: 8, 16, 32 или 64 шт.. Если размер партии слишком мал, градиентный спуск не будет плавным, модель будет обучаться медленно, а потери могут колебаться. Если размер пакета слишком велик, выполнение одной обучающей итерации (один раунд обновлений) займет слишком много времени, что приведет к меньшим результатам. Мы внимательно следим за общей скоростью обучения и потерями. Если потери сильно колеблются, мы знаем, что размер партии слишком сильно уменьшился. Размер партии влияет на такие гиперпараметры, как коэффициент регуляризации. Как только мы определились с размером пакета, мы обычно фиксируем значение.
Скорость обучения и фактор регуляризации
Мы можем дополнительно настроить скорость обучения и коэффициент регуляризации, используя методы, описанные выше. Мы отслеживаем потери, чтобы контролировать скорость обучения и разрыв между проверкой и точностью обучения, чтобы скорректировать коэффициент регуляризации. Тюнинг не является линейным процессом. Гиперпараметры связаны, и мы будем настраивать гиперпараметры итеративно. Скорость обучения и фактор регуляризации сильно коррелированы, и иногда их необходимо настраивать вместе. Не делайте точную настройку слишком рано, вы рискуете потерять время. Если дизайн изменится, эти усилия будут напрасны.
Dropout
Dropout 率通常在 20% 到 50% 之间。我们先从 20% 开始。如果模型出现过拟合,则提高值。
Другие корректировки
Функция активации разреженности
Разреженность параметров модели может упростить оптимизацию вычислений и снизить энергопотребление (критично для мобильных устройств). При желании мы можем заменить регуляризацию L2 на регуляризацию L1. ReLU — самая популярная функция активации. Для некоторых соревнований по глубокому обучению люди используют более продвинутые варианты ReLU для повышения точности. Это также может уменьшить количество недопустимых узлов в некоторых сценариях.
Расширенный тюнинг
Некоторые продвинутые методы тонкой настройки:
- Планирование снижения скорости обучения
- Импульс
- ранняя остановка
Вместо использования фиксированной скорости обучения мы периодически уменьшаем скорость обучения. Гиперпараметры включают частоту и величину падения скорости обучения. Например, вы можете уменьшить скорость обучения на 0,95 каждые 100 000 итераций. Чтобы настроить эти параметры, нам нужно следить за стоимостью, чтобы убедиться, что параметры снижаются быстрее, но не выравниваются преждевременно.
Усовершенствованный оптимизатор использует импульс, чтобы сделать процесс градиентного спуска плавным. В оптимизаторе Адама есть две настройки импульса, которые управляют импульсом первого порядка (по умолчанию 0,9) и второго порядка (по умолчанию 0,999). Для проблемных областей с крутым градиентным спуском, таких как НЛП, мы можем немного увеличить значение импульса.
Переобучение можно уменьшить, остановив обучение, когда ошибка проверки продолжает расти.
Однако это всего лишь визуализация концепции. Ошибка реального времени может временно увеличиваться, а затем снова уменьшаться. Мы можем периодически проверять модель и записывать соответствующую ошибку проверки. Модель выберем позже.
поиск по сетке
Некоторые гиперпараметры сильно коррелированы. Мы должны настроить их вместе, используя сетку возможностей в логарифмическом масштабе. Поиск по сетке требует больших вычислительных ресурсов. Для небольших проектов они используются спорадически. Мы начинаем настраивать грубые параметры с меньшим количеством итераций. Позже, на этапе тонкой настройки, мы используем более длинные итерации и корректируем значение до 3 (или ниже).
коллекция моделей
В машинном обучении мы можем делать прогнозы, голосуя по деревьям решений. Этот подход хорошо работает, потому что ошибочные суждения часто носят локальный характер: вероятность того, что две модели сделают одну и ту же ошибку, мала. В глубоком обучении мы можем начать обучение со случайных предположений (отправить случайное начальное число, которое не задано явно), и оптимизированная модель не уникальна. Мы можем использовать набор данных проверки для многократного тестирования, чтобы выбрать наиболее эффективную модель, или мы можем позволить нескольким моделям голосовать внутри и, наконец, вывести результат прогноза. Этот метод требует нескольких сеансов, что определенно потребляет системные ресурсы. Мы также можем провести обучение один раз, проверить несколько моделей и в процессе выбрать наиболее эффективную модель. С помощью ансамблевой модели мы можем делать точные прогнозы на основе следующих факторов:
- «Голосование», предсказанное каждой моделью;
- Взвешенное голосование на основе достоверности прогноза.
Ансамбли моделей очень эффективны для повышения точности прогнозирования для некоторых задач и часто используются командами в соревнованиях по глубокому обучению данных.
Буст модели
Помимо тонкой настройки модели, мы также можем попробовать различные варианты модели для повышения производительности.
7 - Обратное распространение
- дать(weight and bias)
- Выберите инициал,рассчитатьФункция потерь (Функция потерь) устанавливает частный дифференциал параметра
- После вычисления частного дифференциала этого вектора (вектора) его можно обновить.
- миллионы параметров
- Обратное распространение — более эффективный алгоритм, позволяющий эффективно вычислять вектор градиентов.
Правило цепи
- Цепные эффекты (видно, что x влияет на y, а y влияет на z)
- ВР в основном использует цепное правило (chain rule)
обратное распространение
- Функция потерь определяется на одной обучающей выборке, то есть даже если ошибка выборки, например, которую мы хотим классифицировать, представляет собой разницу между прогнозируемой категорией и фактической категорией, которая является выборкой, представленной L .
- Функция стоимости (Cost function) определяется на всей обучающей выборке, то есть среднее значение суммы ошибок всех выборок, то есть среднее значение суммы функций потерь. усреднение не повлияет на результаты решения конечных параметров.
- Функция общих потерь определяется на всей обучающей выборке, то есть суммой ошибок всех выборок. То есть значение, которое нам обычно нужно минимизировать при обратном распространении.
Наша цель — требовать вычислений(Часть прохода вперед) и расчет(Часть паса назад), затем поставитьиУмножая, получаем, чтобы мы могли получить все параметры в нейросети, а затем использовать градиентный спуск для непрерывного обновления, чтобы получить функцию с наименьшими потерями