TrainingOptionsADAM

Опции обучения для оптимизатора Adam

Описание

Опции обучения для оптимизатора Адама (адаптивная оценка момента), включая информацию о скорости обучения, коэффициент регуляризации L2 и размер мини-пакета.

Создание

Создайте TrainingOptionsADAM использование объекта trainingOptions и определение 'adam' как solverName входной параметр.

Свойства

расширить все

Графики и отображение

Графики для отображения во время сетевого обучения, заданные как один из следующих:

  • 'none' - Не отображать графики во время обучения.

  • 'training-progress'- Стройте графики процесса обучения. График показывает мини-потери и точность пакетов, потери и точность валидации, а также дополнительную информацию о процессе обучения. График имеет кнопку стопа в правом верхнем углу. Нажмите кнопку, чтобы остановить обучение и вернуть текущее состояние сети.

Индикатор для отображения информации о процессе обучения в командном окне, заданный как 1 (true) или 0 (false).

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

Типы данных: logical

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

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

Опции мини-пакета

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

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

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

Опция для перестановки данных, заданная как один из следующих:

  • 'once' - Перемещайте данные обучения и валидации один раз перед обучением.

  • 'never' - Не тасовать данные.

  • 'every-epoch' - Перемещайте обучающие данные перед каждой эпохой обучения и перетасовывайте валидационные данные перед каждой сетевой валидацией. Если размер мини-пакета не разделяет равномерно количество обучающих выборок, то trainNetwork отбрасывает обучающие данные, которые не вписываются в окончательный полный мини-пакет каждой эпохи. Установите Shuffle значение в 'every-epoch' избегать отбрасывания тех же данных каждую эпоху.

Валидация

Данные для проверки во время обучения, заданные как datastore, таблица или массив ячеек, содержащий предикторы и ответы валидации.

Можно задать предикторы и ответы валидации, используя те же форматы, поддерживаемые trainNetwork функция. Можно задать данные валидации как datastore, таблица или массив ячеек {predictors,responses}, где predictors содержит предикторы и responses валидации содержит ответы на валидацию.

Для получения дополнительной информации смотрите images, sequences, и features входные параметры trainNetwork функция.

Во время обучения, trainNetwork вычисляет точность валидации и потери валидации данных валидации. Чтобы задать частоту валидации, используйте 'ValidationFrequency' аргумент пары "имя-значение". Можно также использовать данные валидации, чтобы автоматически остановить обучение, когда потеря валидации прекращает уменьшаться. Чтобы включить автоматическую остановку валидации, используйте 'ValidationPatience' аргумент пары "имя-значение".

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

Данные валидации тасуются в соответствии с 'Shuffle' значение. Если на 'Shuffle' значение равно 'every-epoch'затем данные валидации перетасовываются перед каждой валидацией сети.

Частота валидации сети в количестве итераций, заданная как положительное целое число.

The ValidationFrequency значение является количеством итераций между оценками метрик валидации.

Терпение остановки валидации сетевого обучения, заданное как положительное целое или Inf.

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

Опции решателя

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

Настройки расписания скорости обучения, заданные как структура. LearnRateScheduleSettings имеет поле Method, который задает тип метода для корректировки скорости обучения. Возможными методами являются:

  • 'none' - Скорость обучения постоянна на протяжении всего обучения.

  • 'piecewise' - Темп обучения периодически падает во время обучения.

Если Method является 'piecewise', затем LearnRateScheduleSettings содержит еще два поля:

  • DropRateFactor - Мультипликативный коэффициент, на который падает темп обучения во время обучения

  • DropPeriod - Количество эпох, которые проходят между корректировками скорости обучения во время обучения

Задайте настройки для скорости обучения по расписанию, используя trainingOptions.

Типы данных: struct

Коэффициент для L2 регуляризатора (распад веса), заданный как неотрицательный скаляр.

Можно задать множитель для регулятора L2 для слоев сети с настраиваемыми параметрами.

Скорость распада градиентного скользящего среднего значения, заданная как скаляр от 0 до 1. Для получения дополнительной информации о других решателях. Stochastic Gradient Descent.

Скорость распада квадратного градиента скользящего среднего значения, заданная как скаляр от 0 до 1. Для получения дополнительной информации о других решателях. Stochastic Gradient Descent.

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

Опция сброса нормализации входного слоя, заданная как одно из следующего:

  • true - Сбросьте вход слоя статистики нормализации и пересчитайте их во время обучения.

  • false - Вычислите статистику нормализации во время обучения, когда они пусты.

Режим для оценки статистики в слоях нормализации партии ., заданный как один из следующих:

  • 'population' - Используйте статистику населения. После обучения программное обеспечение завершает статистику путем повторной передачи обучающих данных и использует полученное среднее значение и отклонение.

  • 'moving' - Аппроксимация статистики во время обучения с помощью текущей оценки, заданной шагами обновления

    μ*=λμμ^+(1λμ)μσ2*=λσ2σ2^+(1-λσ2)σ2

    где μ* и σ2* обозначить обновленные среднее и отклонение, соответственно, λμ и λσ2 обозначить среднее и отклонение значения распада, соответственно, μ^ и σ2^ обозначает среднее значение и отклонение входа слоя, соответственно, и μ и σ2 обозначить последние значения скользящего среднего значения и отклонений, соответственно. После обучения программное обеспечение использует самое последнее значение скользящего среднего значения и отклонений. Эта опция поддерживает обучение только для центрального процессора и одного графического процессора.

Градиентные Усечения

Положительный порог для градиента, заданный как положительная скалярная величина или Inf. Когда градиент превышает значение GradientThreshold, затем градиент обрезается согласно GradientThresholdMethod.

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

  • 'l2norm' - Если L2 норма градиента настраиваемого параметра больше GradientThreshold, затем масштабируйте градиент так, чтобы норма L2 равнялась GradientThreshold.

  • 'global-l2norm' - Если глобальная норма L2, L, больше GradientThreshold, затем масштабируйте все градиенты в множитель GradientThreshold/L. Глобальная норма L2 рассматривает все настраиваемые параметры.

  • 'absolute-value' - Если абсолютное значение отдельной частной производной в градиенте настраиваемого параметра больше GradientThreshold, затем масштабируйте частную производную, чтобы величина равнялась GradientThreshold и сохранить знак частной производной.

Для получения дополнительной информации см. раздел «Обрезка градиента».

Опции последовательности

Опция для заполнения, усечения или разделения входных последовательностей, заданная как одно из следующего:

  • 'longest' - Дополните последовательности в каждом мини-пакете, чтобы иметь ту же длину, что и самая длинная последовательность. Эта опция не отбрасывает никаких данных, хотя заполнение может ввести шум в сеть.

  • 'shortest' - обрезать последовательности в каждом мини-пакете так, чтобы они имели ту же длину, что и самая короткая последовательность. Эта опция гарантирует, что заполнение не будет добавлено, за счет отбрасывания данных.

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

Чтобы узнать больше об эффекте заполнения, усечения и разделения входа последовательностей, смотрите Sequence Padding, Truncation и Splitting.

Направление заполнения или усечения, заданное как одно из следующего:

  • 'right' - Дополните или обрезайте последовательности справа. Последовательности начинаются с того же временного шага, а программное обеспечение обрезает или добавляет заполнение в конец последовательностей.

  • 'left' - Дополните или обрезайте последовательности слева. Программа обрезает или добавляет заполнение к началу последовательностей, так что последовательности заканчиваются на одном и том же временном шаге.

Потому что слои LSTM обрабатывают данные последовательности по одному временному шагу за раз, когда слой OutputMode свойство 'last'любое заполнение на последних временных шагах может отрицательно повлиять на выход слоя. Чтобы дополнить или обрезать данные последовательности слева, установите 'SequencePaddingDirection' опция для 'left'.

Для сетей «последовательность-последовательность» (когда OutputMode свойство 'sequence' для каждого слоя LSTM), любое заполнение в первые временные шаги может негативно повлиять на предсказания для более ранних временных шагов. Чтобы дополнить или обрезать данные последовательности справа, установите 'SequencePaddingDirection' опция для 'right'.

Чтобы узнать больше об эффекте заполнения, усечения и разделения входа последовательностей, смотрите Sequence Padding, Truncation и Splitting.

Значение, которым можно дополнить входные последовательности, заданное как скаляр. Опция действительна только при SequenceLength является 'longest' или положительное целое число. Не дополнять последовательности NaN, потому что это может распространять ошибки по сети.

Аппаратные опции

Аппаратный ресурс для обучения сети, указанный как одно из следующего:

  • 'auto' - Используйте графический процессор, если он доступен. В противном случае используйте центральный процессор.

  • 'cpu' - Использовать центральный процессор.

  • 'gpu' - Использовать графический процессор.

  • 'multi-gpu' - Используйте несколько графических процессоров на одной машине, используя локальный параллельный пул на основе профиля кластера по умолчанию. Если текущий параллельный пул отсутствует, программа запускает параллельный пул с размером пула, равным количеству доступных графических процессоров.

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

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

'gpu', 'multi-gpu', и 'parallel' опции требуют Parallel Computing Toolbox™. Для использования графический процессор для глубокого обучения необходимо иметь также поддерживаемое графический процессор. Для получения информации о поддерживаемых устройствах смотрите Поддержку GPU by Release (Parallel Computing Toolbox). Если вы выбираете одну из этих опций и Parallel Computing Toolbox или подходящий графический процессор недоступен, то программное обеспечение возвращает ошибку.

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

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

Задайте окружение выполнения используя trainingOptions.

Типы данных: char | string

Деление рабочей нагрузки для GPU или CPU, заданное как скаляр от 0 до 1, положительное целое число или числовой вектор. Это свойство имеет эффект только, когда ExecutionEnvironment значение равно 'multi-gpu' или 'parallel'.

Контрольные точки

Путь, в котором сохраняются сети контрольных точек, задается как вектор символов.

Типы данных: char

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

ОбластьОписание
EpochТекущее число эпохи
IterationТекущее число итерации
TimeSinceStartВремя в секундах с начала обучения
TrainingLossТекущие потери мини-пакета
ValidationLossПотеря данных валидации
BaseLearnRateТекущая базовая скорость обучения
TrainingAccuracy Точность на текущем мини-пакете (классификационные сети)
TrainingRMSERMSE на текущем мини-пакете (регрессионые сети)
ValidationAccuracyТочность данных валидации (классификационных сетей)
ValidationRMSERMSE на данных валидации (регрессионые сети)
StateТекущее состояние обучения с возможным значением "start", "iteration", или "done".

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

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

Типы данных: function_handle | cell

Примеры

свернуть все

Создайте набор опций для настройки нейронной сети с помощью оптимизатора Adam. Установите максимальное количество эпох для обучения в 20 и используйте мини-пакет с 64 наблюдениями при каждой итерации. Задайте скорость обучения и скорость распада скользящего среднего значения квадратного градиента. Включите график процесса обучения.

options = trainingOptions('adam', ...
    'InitialLearnRate',3e-4, ...
    'SquaredGradientDecayFactor',0.99, ...
    'MaxEpochs',20, ...
    'MiniBatchSize',64, ...
    'Plots','training-progress')
options = 
  TrainingOptionsADAM with properties:

             GradientDecayFactor: 0.9000
      SquaredGradientDecayFactor: 0.9900
                         Epsilon: 1.0000e-08
                InitialLearnRate: 3.0000e-04
               LearnRateSchedule: 'none'
             LearnRateDropFactor: 0.1000
             LearnRateDropPeriod: 10
                L2Regularization: 1.0000e-04
         GradientThresholdMethod: 'l2norm'
               GradientThreshold: Inf
                       MaxEpochs: 20
                   MiniBatchSize: 64
                         Verbose: 1
                VerboseFrequency: 50
                  ValidationData: []
             ValidationFrequency: 50
              ValidationPatience: Inf
                         Shuffle: 'once'
                  CheckpointPath: ''
            ExecutionEnvironment: 'auto'
                      WorkerLoad: []
                       OutputFcn: []
                           Plots: 'training-progress'
                  SequenceLength: 'longest'
            SequencePaddingValue: 0
        SequencePaddingDirection: 'right'
            DispatchInBackground: 0
         ResetInputNormalization: 1
    BatchNormalizationStatistics: 'population'

Ссылки

[1] Кингма, Дидерик и Джимми Ба. «Adam: A method for stochastic optimization». arXiv preprint arXiv:1412.6980 (2014).

Введенный в R2018a
Для просмотра документации необходимо авторизоваться на сайте