trainingOptions

Опции для обучения глубокой нейронной сети

Описание

пример

options = trainingOptions(solverName) возвращает опции обучения для оптимизатора, заданные solverName. Чтобы обучить сеть, используйте опции обучения как входного параметра для trainNetwork функция.

пример

options = trainingOptions(solverName,Name,Value) возвращает опции обучения с дополнительными опциями, заданными одним или несколькими аргументами пары "имя-значение".

Примеры

свернуть все

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

options = trainingOptions('sgdm', ...
    'LearnRateSchedule','piecewise', ...
    'LearnRateDropFactor',0.2, ...
    'LearnRateDropPeriod',5, ...
    'MaxEpochs',20, ...
    'MiniBatchSize',64, ...
    'Plots','training-progress')
options = 
  TrainingOptionsSGDM with properties:

                        Momentum: 0.9000
                InitialLearnRate: 0.0100
               LearnRateSchedule: 'piecewise'
             LearnRateDropFactor: 0.2000
             LearnRateDropPeriod: 5
                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'

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

Когда вы задаете 'training-progress' как 'Plots' значение в trainingOptions и начните сетевое обучение, trainNetwork создает рисунок и отображает метрики обучения при каждой итерации. Каждая итерация является оценкой градиента и обновлением параметров сети. Если вы задаете данные валидации в trainingOptions, затем рисунок показывает метрики валидации каждый раз trainNetwork проверяет сеть. Рисунок изображает следующее:

  • Точность обучения - Классификационная точность на каждом отдельном мини-пакете.

  • Сглаженная точность обучения - сглаженная точность обучения, получаемая путем применения алгоритма сглаживания к точности обучения. Он менее шумен, чем немодированная точность, что облегчает определение трендов.

  • Точность валидации - точность классификации на целом наборе валидации (задается с помощью trainingOptions).

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

Для регрессионных сетей рисунок строит график среднеквадратичной ошибки (RMSE) вместо точности.

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

Во время обучения можно остановить обучение и вернуть текущее состояние сети, нажав кнопку стоп в правом верхнем углу. Например, можно хотеть остановить обучение, когда точность сети достигает плато, и ясно, что точность больше не улучшается. После нажатия кнопки stop может потребоваться некоторое время для завершения обучения. Когда обучение завершено, trainNetwork возвращает обученную сеть.

Когда обучение завершается, просмотрите Результаты, показывающие окончательную точность валидации и причины завершения обучения. Метрики окончательной валидации помечены на графиках как Final. Если ваша сеть содержит слои нормализации партии ., итоговые метрики валидации могут отличаться от метрик валидации, оцененных во время обучения. Это связано с тем, что среднее значение статистики отклонений, используемой для нормализации партии ., может отличаться после завершения обучения. Для примера, если 'BatchNormalizationStatisics' опция обучения 'population'затем после обучения программное обеспечение завершает статистику нормализации партии . путем повторной передачи обучающих данных и использует полученное среднее значение и отклонение. Если на 'BatchNormalizationStatisics' опция обучения 'moving'затем программное обеспечение аппроксимирует статистику во время обучения с помощью текущей оценки и использует последние значения статистики.

Справа просмотрите информацию о времени и настройках обучения. Чтобы узнать больше об опциях обучения, см. Раздел «Настройка параметров» и «Train сверточной нейронной сети».

Стройте графики процесса обучения во время обучения

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

Загрузите обучающие данные, которые содержат 5000 изображений цифр. Выделите 1000 изображений для валидации сети.

[XTrain,YTrain] = digitTrain4DArrayData;

idx = randperm(size(XTrain,4),1000);
XValidation = XTrain(:,:,:,idx);
XTrain(:,:,:,idx) = [];
YValidation = YTrain(idx);
YTrain(idx) = [];

Создайте сеть, чтобы классифицировать цифровые данные изображения.

layers = [
    imageInputLayer([28 28 1])
    
    convolution2dLayer(3,8,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    maxPooling2dLayer(2,'Stride',2)
    
    convolution2dLayer(3,16,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    maxPooling2dLayer(2,'Stride',2)
    
    convolution2dLayer(3,32,'Padding','same')
    batchNormalizationLayer
    reluLayer   
    
    fullyConnectedLayer(10)
    softmaxLayer
    classificationLayer];

Укажите опции сетевого обучения. Чтобы проверить сеть на регулярных интервалах во время обучения, укажите данные валидации. Выберите 'ValidationFrequency' значение таким образом, чтобы сеть проверялась примерно один раз в эпоху. Чтобы построить график процесса обучения во время обучения, задайте 'training-progress' как 'Plots' значение.

options = trainingOptions('sgdm', ...
    'MaxEpochs',8, ...
    'ValidationData',{XValidation,YValidation}, ...
    'ValidationFrequency',30, ...
    'Verbose',false, ...
    'Plots','training-progress');

Обучите сеть.

net = trainNetwork(XTrain,YTrain,layers,options);

Входные параметры

свернуть все

Решатель для обучающей сети, заданный как один из следующих:

  • 'sgdm' - Используйте стохастический градиентный спуск с оптимизатором импульса (SGDM). Можно задать значение импульса с помощью 'Momentum' аргумент пары "имя-значение".

  • 'rmsprop'- Используйте оптимизатор RMSProp. Можно задать скорость распада квадратного градиента скользящего среднего значения с помощью 'SquaredGradientDecayFactor' аргумент пары "имя-значение".

  • 'adam'- Используйте оптимизатор Адама. Можно задать скорости распада градиента и квадратного градиента скользящих средних значений помощью 'GradientDecayFactor' и 'SquaredGradientDecayFactor' Аргументы пары "имя-значение", соответственно.

Для получения дополнительной информации о других решателях. Stochastic Gradient Descent.

Аргументы в виде пар имя-значение

Задайте необязательные разделенные разделенными запятой парами Name,Value аргументы. Name - имя аргумента и Value - соответствующее значение. Name должны находиться внутри кавычек. Можно задать несколько аргументов в виде пар имен и значений в любом порядке Name1,Value1,...,NameN,ValueN.

Пример: 'InitialLearnRate',0.03,'L2Regularization',0.0005,'LearnRateSchedule','piecewise' задает начальную скорость обучения 0,03 и L2 коэффициент регуляризации 0,0005 и предписывает программному обеспечению сбрасывать скорость обучения каждое заданное количество эпох путем умножения с определенным фактором.
Графики и отображение

свернуть все

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

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

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

Пример: 'Plots','training-progress'

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

Подробный выход отображает следующую информацию:

Классификационные сети

ОбластьОписание
EpochНомер эпохи. Эпоха соответствует полному проходу данных.
IterationНомер итерации. Итерация соответствует мини-пакету.
Time ElapsedВремя прошло в часах, минутах и секундах.
Mini-batch AccuracyКлассификационная точность на мини-пакете.
Validation AccuracyКлассификационная точность данных валидации. Если вы не задаете данные валидации, то функция не отображает это поле.
Mini-batch LossПотеря по мини-пакету. Если выход слой является ClassificationOutputLayer объект, тогда потеря является потерей перекрестной энтропии для задач классификации нескольких классов с взаимоисключающими классами.
Validation LossПотеря данных валидации. Если выход слой является ClassificationOutputLayer объект, тогда потеря является потерей перекрестной энтропии для задач классификации нескольких классов с взаимоисключающими классами. Если вы не задаете данные валидации, то функция не отображает это поле.
Base Learning RateБазовая скорость обучения. Программа умножает коэффициенты скорости обучения слоев на это значение.

Регрессионные сети

ОбластьОписание
EpochНомер эпохи. Эпоха соответствует полному проходу данных.
IterationНомер итерации. Итерация соответствует мини-пакету.
Time ElapsedВремя прошло в часах, минутах и секундах.
Mini-batch RMSERoot-mean-quared-error (RMSE) на мини-пакете.
Validation RMSERMSE на данных валидации. Если вы не задаете данные валидации, то программное обеспечение не отображает это поле.
Mini-batch LossПотеря по мини-пакету. Если выход слой является RegressionOutputLayer объект, тогда потеря является квадратичной невязкой.
Validation LossПотеря данных валидации. Если выход слой является RegressionOutputLayer объект, тогда потеря является квадратичной невязкой. Если вы не задаете данные валидации, то программное обеспечение не отображает это поле.
Base Learning RateБазовая скорость обучения. Программа умножает коэффициенты скорости обучения слоев на это значение.

Чтобы задать данные валидации, используйте 'ValidationData' Пара "имя-значение".

Пример: 'Verbose',false

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

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

Пример: 'VerboseFrequency',100

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

свернуть все

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

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

Пример: 'MaxEpochs',20

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

Пример: 'MiniBatchSize',256

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

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

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

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

Пример: 'Shuffle','every-epoch'

Валидация

свернуть все

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

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

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

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

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

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

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

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

Пример: 'ValidationFrequency',20

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

The 'ValidationPatience' значение является количеством раз, когда потеря на наборе валидации может быть больше или равной ранее наименьшей потере до остановки сетевого обучения. Чтобы включить автоматическую остановку валидации, задайте положительное целое число в качестве 'ValidationPatience' значение. Если вы используете значение по умолчанию Inf, затем обучение останавливается после максимального количества эпох. Чтобы задать данные валидации, используйте 'ValidationData' аргумент пары "имя-значение".

Пример: 'ValidationPatience',5

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

свернуть все

Начальная скорость обучения, используемая для обучения, задается как разделенная разделенными запятой парами, состоящая из 'InitialLearnRate' и положительная скалярная величина. Значение по умолчанию является 0,01 для 'sgdm' решатель и 0,001 для 'rmsprop' и 'adam' решатели. Если скорость обучения слишком низкий, то обучение занимает много времени. Если скорость обучения слишком высок, то обучение может достигнуть неоптимального результата или отличаться.

Пример: 'InitialLearnRate',0.03

Типы данных: single | double

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

  • 'none' - Темп обучения остается постоянным на протяжении всего обучения.

  • 'piecewise' - Программное обеспечение обновляет скорость обучения каждое определенное количество эпох путем умножения с определенным фактором. Используйте LearnRateDropFactor аргумент пары "имя-значение" для задания значения этого фактора. Используйте LearnRateDropPeriod аргумент пары "имя-значение" для определения количества эпох между умножениями.

Пример: 'LearnRateSchedule','piecewise'

Количество эпох для удаления скорости обучения, заданное как разделенная разделенными запятой парами, состоящая из 'LearnRateDropPeriod' и положительное целое число. Эта опция действительна только, когда значение LearnRateSchedule является 'piecewise'.

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

Пример: 'LearnRateDropPeriod',3

Коэффициент для падения скорости обучения, заданный как разделенная разделенными запятой парами, состоящая из 'LearnRateDropFactor' и скаляром от 0 до 1. Эта опция действительна только, когда значение LearnRateSchedule является 'piecewise'.

LearnRateDropFactor является мультипликативным фактором для применения к скорости обучения каждый раз, когда проходит определенное количество эпох. Задайте количество эпох, использующих LearnRateDropPeriod аргумент пары "имя-значение".

Пример: 'LearnRateDropFactor',0.1

Типы данных: single | double

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

Можно задать множитель для регуляризации L2 для слоев сети с настраиваемыми параметрами. Для получения дополнительной информации см. раздел «Настройка параметров в сверточных и полносвязных слоях».

Пример: 'L2Regularization',0.0005

Типы данных: single | double

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

Чтобы задать 'Momentum' значение, вы должны задать solverName чтобы быть 'sgdm'. Значение по умолчанию хорошо работает для большинства задач. Для получения дополнительной информации о других решателях. Stochastic Gradient Descent.

Пример: 'Momentum',0.95

Типы данных: single | double

Скорость распада градиентного скользящего среднего значения для решателя Адама, заданная как разделенная разделенными запятой парами, состоящая из 'GradientDecayFactor' и неотрицательный скаляр менее 1. Скорость градиентного распада обозначается β1 в [4].

Чтобы задать 'GradientDecayFactor' значение, вы должны задать solverName чтобы быть 'adam'. Значение по умолчанию хорошо работает для большинства задач. Для получения дополнительной информации о других решателях. Stochastic Gradient Descent.

Пример: 'GradientDecayFactor',0.95

Типы данных: single | double

Скорость распада квадратного градиента скользящего среднего значения для решателей Adam и RMSProp, заданная как разделенная разделенными запятой парами, состоящая из 'SquaredGradientDecayFactor' и неотрицательный скаляр менее 1. Квадратная скорость распада градиента обозначается β2 в [4].

Чтобы задать 'SquaredGradientDecayFactor' значение, вы должны задать solverName чтобы быть 'adam' или 'rmsprop'. Типичные значения скорости распада составляют 0,9, 0,99 и 0,999, что соответствует длинам усреднения 10, 100 и 1000 обновлений параметров, соответственно. Значение по умолчанию является 0.999 для решателя Адама. Значение по умолчанию является 0,9 для решателя RMSProp.

Для получения дополнительной информации о других решателях. Stochastic Gradient Descent.

Пример: 'SquaredGradientDecayFactor',0.99

Типы данных: single | double

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

Чтобы задать 'Epsilon' значение, вы должны задать solverName чтобы быть 'adam' или 'rmsprop'. Значение по умолчанию хорошо работает для большинства задач. Для получения дополнительной информации о других решателях. Stochastic Gradient Descent.

Пример: 'Epsilon',1e-6

Типы данных: single | double

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

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

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

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

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

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

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

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

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

свернуть все

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

Пример: 'GradientThreshold',6

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

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

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

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

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

Пример: 'GradientThresholdMethod','global-l2norm'

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

свернуть все

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

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

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

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

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

Пример: 'SequenceLength','shortest'

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

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

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

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

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

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

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

Пример: 'SequencePaddingValue',-1

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

свернуть все

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

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

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

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

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

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

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

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

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

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

Хранилища данных, используемые для обучения с мультиграфическим процессором или параллельного обучения, должны быть разделяемыми. Для получения дополнительной информации смотрите Использование Datastore для параллельного обучения и фонового диспетчеризации.

Если вы используете 'multi-gpu' опция с разделяемым входным datastore и 'DispatchInBackground' затем программа запускает параллельный пул с размером, равным размеру пула по умолчанию. Рабочие с уникальными графическими процессорами выполняют расчеты обучения. Остальные рабочие используются для фоновой отправки.

Пример: 'ExecutionEnvironment','cpu'

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

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

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

  • Числовой вектор - сетевая обучающая нагрузка для каждого работника в параллельном пуле. Для вектора W, рабочий i получает W(i)/sum(W) дроби работы (количество примеров на мини-партию). Если вы обучаете сеть с помощью данных в мини-пакетном datastore с включенной диспетчеризацией фона, можно назначить рабочую нагрузку 0, чтобы использовать этот рабочий процесс для выборки данных в фоновом режиме. Указанный вектор должен содержать по одному значению на каждого работника в параллельном пуле.

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

Используйте background dispatch (асинхронная постановка в очередь предварительной выборки), чтобы считать обучающие данные из хранилищ данных, заданные как false или true. Для отправки фона требуется Parallel Computing Toolbox.

DispatchInBackground поддерживается только для хранилищ данных, которые могут быть разделены. Для получения дополнительной информации смотрите Использование Datastore для параллельного обучения и фонового диспетчеризации.

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

свернуть все

Путь для сохранения сетей контрольных точек, заданный как разделенная разделенными запятой парами, состоящая из 'CheckpointPath' и вектор символов.

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

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

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

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

Пример: 'CheckpointPath','C:\Temp\checkpoint'

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

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

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

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

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

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

Выходные аргументы

свернуть все

Опции обучения, возвращенные как TrainingOptionsSGDM, TrainingOptionsRMSProp, или TrainingOptionsADAM объект. Чтобы обучить нейронную сеть, используйте опции обучения как входного параметра к trainNetwork функция.

Если solverName равен 'sgdm', 'rmsprop', или 'adam', затем опции обучения возвращаются как TrainingOptionsSGDM, TrainingOptionsRMSProp, или TrainingOptionsADAM объект, соответственно.

Можно редактировать свойства опций обучения TrainingOptionsSGDM, TrainingOptionsADAM, и TrainingOptionsRMSProp объекты непосредственно. Например, чтобы изменить размер мини-пакета после использования trainingOptions функцию, можно отредактировать MiniBatchSize свойство непосредственно:

options = trainingOptions('sgdm');
options.MiniBatchSize = 64;

Совет

Алгоритмы

свернуть все

Начальные веса и смещения

Для сверточных и полносвязных слоев инициализация для весов и смещений задается WeightsInitializer и BiasInitializer свойства слоев, соответственно. Для примеров, показывающих, как изменить инициализацию для весов и смещений, смотрите, Задайте начальные веса и смещения в сверточном слое и Задайте начальные веса и смещения в полносвязном слое.

Стохастический градиентный спуск

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

θ+1=θαE(θ),

где - число итерации, α>0 является скорость обучения, θ является вектором параметра, и E(θ) - функция потерь. В стандартном алгоритме градиентного спуска, градиент функции потерь, E(θ), оценивается с использованием всего набора обучающих данных, и стандартный алгоритм градиентного спуска использует весь набор данных сразу.

Напротив, при каждой итерации алгоритм стохастического градиентного спуска оценивает градиент и обновляет параметры с помощью подмножества обучающих данных. При каждой итерации используется другое подмножество, называемое мини-пакетом. Полный проход алгоритма настройки по всему набору обучающих данных с помощью мини-пакетов составляет одну эпоху. Стохастический градиентный спуск является стохастическим, потому что обновления параметра, вычисленные с помощью мини-пакета, являются шумной оценкой обновления параметра, которая была бы результатом использования полного набора данных. Размер мини-пакета и максимальное количество эпох можно задать при помощи 'MiniBatchSize' и 'MaxEpochs' Аргументы пары "имя-значение", соответственно.

Стохастический градиентный спуск с моментом

Алгоритм стохастического градиентного спуска может колебаться вдоль пути наискорейшего спуска к оптимуму. Добавление термина импульса к обновлению параметра является одним из способов уменьшить это колебание [2]. Стохастический градиентный спуск с обновлением импульса (SGDM)

θ+1=θαE(θ)+γ(θθ1),

где γ определяет вклад предыдущего шага градиента в текущую итерацию. Вы можете задать это значение с помощью 'Momentum' аргумент пары "имя-значение". Чтобы обучить нейронную сеть с помощью стохастического градиентного спуска с алгоритмом импульса, задайте solverName как 'sgdm'. Чтобы задать начальное значение скорости обучения α, используйте 'InitialLearnRate' аргумент пары "имя-значение". Можно также задать различные скорости обучения для разных слоев и параметров. Для получения дополнительной информации см. раздел «Настройка параметров в сверточных и полносвязных слоях».

RMSProp

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

v=β2v1+(1β2)[E(θ)]2

β2 - скорость затухания скользящего среднего значения. Общие значения скорости распада 0,9, 0,99 и 0,999. Соответствующие средние длины квадратов градиентов равны 1/(1-β2), то есть 10, 100 и 1000 обновлений параметров, соответственно. Можно задать β2 при помощи 'SquaredGradientDecayFactor' аргумент пары "имя-значение". Алгоритм RMSProp использует это скользящее среднее значение для нормализации обновлений каждого параметра индивидуально,

θ+1=θαE(θ)v+ϵ

где деление выполняется поэлементно. Использование RMSProp эффективно уменьшает скорости обучения параметров с большими градиентами и увеличивает скорости обучения параметров с маленькими градиентами. ɛ является небольшой константой, добавленной, чтобы избежать деления на нули. Можно задать ɛ при помощи 'Epsilon' аргумент пары "имя-значение", но значение по умолчанию обычно работает хорошо. Чтобы использовать RMSProp для обучения нейронной сети, задайте solverName как 'rmsprop'.

Адам

Адам (выведенный из оценки адаптивного момента) [4] использует обновление параметра, которое подобно RMSProp, но с добавленным термином импульса. Он сохраняет поэлементное скользящее среднее значение как градиентов параметров, так и их квадратов значений,

m=β1m1+(1β1)E(θ)

v=β2v1+(1β2)[E(θ)]2

Можно задать β1 и β2 скорости распада с помощью 'GradientDecayFactor' и 'SquaredGradientDecayFactor' Аргументы пары "имя-значение", соответственно. Адам использует скользящие средние значения для обновления сетевых параметров как

θ+1=θαmlvl+ϵ

Если градиенты во многих итерациях аналогичны, то использование скользящего среднего значения градиента позволяет параметру обновить импульс в определенном направлении. Если градиенты содержат в основном шум, то скользящее среднее значение градиента становится меньше, и поэтому обновления параметра тоже становятся меньше. Можно задать ɛ при помощи 'Epsilon' аргумент пары "имя-значение". Значение по умолчанию обычно работает хорошо, но для определенных задач значение, равное 1, работает лучше. Чтобы использовать Adam для обучения нейронной сети, задайте solverName как 'adam'. Полное обновление Адама также включает механизм исправления смещения, которое появляется в начале обучения. Для получения дополнительной информации см. раздел [4].

Задайте α скорости обучения для всех алгоритмов оптимизации, используя 'InitialLearnRate' аргумент пары "имя-значение". Эффект скорости обучения отличается для различных алгоритмов оптимизации, поэтому оптимальные скорости обучения также различаются в целом. Можно также задать скорости обучения, которые различаются слоями и параметром. Для получения дополнительной информации см. раздел «Настройка параметров в сверточных и полносвязных слоях».

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

Если градиенты увеличения в величину экспоненциально, то обучение нестабильно и может различаться в течение нескольких итераций. На этот «взрыв градиента» указывает потеря обучения, которая идет на NaN или Inf. Градиентное усечение помогает предотвратить градиентный взрыв, стабилизируя обучение при более высоких скоростях обучения и при наличии выбросов [3]. Градиентное усечение позволяет обучать сети быстрее и обычно не влияет на точность выученной задачи.

Существует два типа градиентных усечений.

  • Нормированное усечение градиента повторяет градиент на основе порога и не изменяет направление градиента. The 'l2norm' и 'global-l2norm' значения GradientThresholdMethod являются нормальными методами усечения градиента.

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

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

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

Добавление термина регуляризации для весов к функции потерь E(θ) является одним из способов уменьшить сверхподбор кривой [1], [2]. Термин регуляризации также называется распадом веса. Функция потерь с термином регуляризации принимает форму

ER(θ)=E(θ)+λΩ(w),

где w - вектор веса, λ - коэффициент регуляризации (коэффициент) и функция регуляризации Ω(w) является

Ω(w)=12wTw.

Обратите внимание, что смещения не регулируются [2]. Можно задать коэффициент регуляризации λ при помощи 'L2Regularization' аргумент пары "имя-значение". Можно также задать различные коэффициенты регуляризации для различных слоев и параметров. Для получения дополнительной информации см. раздел «Настройка параметров в сверточных и полносвязных слоях».

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

Вопросы совместимости

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

Поведение изменено в R2018b

Поведение изменено в R2018b

Ссылки

[1] Bishop, C. M. Pattern Recognition and Машинное Обучение. Спрингер, Нью-Йорк, Нью-Йорк, 2006.

[2] Мерфи, К. П. Машинное обучение: вероятностная перспектива. The MIT Press, Кембридж, Массачусетс, 2012.

[3] Паскану, Р., Т. Миколов, и Я. Бенгио. «О сложности настройки рекуррентных нейронных сетей». Материалы 30-й Международной конференции по машинному обучению. Том 28 (3), 2013, стр. 1310-1318.

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

Введенный в R2016a