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'
                   OutputNetwork: 'last-iteration'

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

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

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

  • Сглаживавшая учебная точность — Сглаживавшая учебная точность, полученная путем применения алгоритма сглаживания для учебной точности. Это является менее шумным, чем не сглаживавшая точность, облегчая определять тренды.

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

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

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

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

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

Когда обучение закончится, просмотрите Результаты, показывающие завершенную точность валидации и причину завершения обучения. Если 'OutputNetwork' опция обучения установлена в 'last-iteration' (значение по умолчанию), завершенные метрики соответствуют последней учебной итерации. Если 'OutputNetwork' опция обучения установлена в 'best-validation-loss', завершенные метрики соответствуют итерации с самой низкой потерей валидации. Итерация, от которой вычисляются итоговые метрики валидации, помечена Final в графиках.

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

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

Постройте процесс обучения во время обучения

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

Загрузите обучающие данные, который содержит 5 000 изображений цифр. Отложите 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);

Figure Training Progress (25-Aug-2021 07:33:16) contains 2 axes objects and another object of type uigridlayout. Axes object 1 contains 15 objects of type patch, text, line. Axes object 2 contains 15 objects of type patch, text, line.

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

свернуть все

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

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

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

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

Для получения дополнительной информации о других решателях, смотрите Стохастический Градиентный спуск.

Аргументы name-value

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

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

свернуть все

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

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

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

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

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

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

Сети классификации

Поле Описание
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 RMSEСреднеквадратическая ошибка (RMSE) на мини-пакете.
Validation RMSERMSE на данных о валидации. Если вы не задаете данные о валидации, то программное обеспечение не отображает это поле.
Mini-batch LossПотеря на мини-пакете. Если выходным слоем является RegressionOutputLayer объект, затем потеря является половиной среднеквадратической ошибки.
Validation LossПотеря на данных о валидации. Если выходным слоем является RegressionOutputLayer объект, затем потеря является половиной среднеквадратической ошибки. Если вы не задаете данные о валидации, то программное обеспечение не отображает это поле.
Base Learning RateОсновная скорость обучения. Программа умножает коэффициенты скорости обучения слоев на это значение.

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

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

Типы данных: логический

Частота многословной печати, которая является количеством итераций между печатью к командному окну в виде разделенной запятой пары, состоящей из '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' и положительное целое число.

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

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

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

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

Возвращенная сеть зависит от OutputNetwork опция обучения. Чтобы возвратить сеть с самой низкой потерей валидации, установите OutputNetwork опция обучения к "best-validation-loss".

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

  • 'last-iteration' – Возвратите сеть, соответствующую последней учебной итерации.

  • 'best-validation-loss' – Возвратите сеть, соответствующую учебной итерации с самой низкой потерей валидации. Чтобы использовать эту опцию, необходимо задать 'ValidationData'.

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

свернуть все

Начальная скорость обучения, используемая для обучения в виде разделенной запятой пары, состоящей из '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'. Значение по умолчанию работает хорошо на большинство проблем. Для получения дополнительной информации о других решателях, смотрите Стохастический Градиентный спуск.

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

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

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

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

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

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

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

Задавать 'SquaredGradientDecayFactor' значение, необходимо установить solverName быть 'adam' или 'rmsprop'. Типичные значения уровня затухания 0.9, 0.99, и 0.999, соответствуя усреднению длин 10, 100, и 1 000 обновлений параметра, соответственно. Значение по умолчанию 0.999 для решателя Адама. Значение по умолчанию 0.9 для решателя RMSProp.

Для получения дополнительной информации о других решателях, смотрите Стохастический Градиентный спуск.

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

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

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

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

Пример: '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' опция к нижнему значению.

Чтобы узнать больше об эффекте дополнения, усечение и разделение входных последовательностей, видят, что Последовательность Дополняет, Усечение, и Разделяет.

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

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

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

  • 'left' — Заполните или обрежьте последовательности слева. Программное обеспечение обрезает или добавляет дополнение в запуск последовательностей так, чтобы конец последовательностей одновременно продвинулся.

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

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

Чтобы узнать больше об эффекте дополнения, усечение и разделение входных последовательностей, видят, что Последовательность Дополняет, Усечение, и Разделяет.

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

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

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

свернуть все

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

DispatchInBackground только поддерживается для хранилищ данных, которые partitionable. Для получения дополнительной информации смотрите 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, и 1 000 обновлений параметра, соответственно. Можно задать β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, работает лучше. Чтобы использовать Адама, чтобы обучить нейронную сеть, задайте solverName как 'adam'. Полное обновление Адама также включает механизм, чтобы откорректировать смещение появляться в начале обучения. Для получения дополнительной информации см. [4].

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

Усечение градиента

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

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

  • Основанное на норме усечение градиента перемасштабирует градиент на основе порога и не изменяет направление градиента. 'l2norm' и 'global-l2norm' значения GradientThresholdMethod основанные на норме методы усечения градиента.

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

Для примеров смотрите, что Временные ряды Предсказывают Используя Классификацию Глубокого обучения и От последовательности к последовательности Используя Глубокое обучение.

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

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

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

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

Ω(w)=12wTw.

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

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

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

развернуть все

Поведение изменяется в R2018b

Поведение изменяется в R2018b

Ссылки

[1] Епископ, C. M. Распознавание образов и машинное обучение. Спрингер, Нью-Йорк, Нью-Йорк, 2006.

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

[3] Pascanu, R., Т. Миколов и И. Бенхио. "На трудности учебных рекуррентных нейронных сетей". Продолжения 30-й Международной конференции по вопросам Машинного обучения. Издание 28 (3), 2013, стр 1310–1318.

[4] Kingma, Дидерик и Джимми Ба. "Адам: метод для стохастической оптимизации". arXiv предварительно распечатывают arXiv:1412.6980 (2014).

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