Уровень долговременной памяти (LSTM)
Уровень LSTM распознает долгосрочные зависимости между временными шагами во временных рядах и данными последовательности.
Слой выполняет аддитивные взаимодействия, которые могут помочь улучшить градиентный поток по длинным последовательностям во время тренировки.
создает слой LSTM и задает layer = lstmLayer(numHiddenUnits)NumHiddenUnits собственность.
устанавливает дополнительные layer = lstmLayer(numHiddenUnits,Name,Value)OutputMode, активации, состояние, параметры и инициализация, скорость обучения и регуляризация, и Name с использованием одного или нескольких аргументов пары имя-значение. Можно указать несколько аргументов пары имя-значение. Заключите каждое имя свойства в кавычки.
NumHiddenUnits - Количество скрытых единицЧисло скрытых единиц (также называемое скрытым размером), указанное как положительное целое число.
Количество скрытых единиц соответствует количеству информации, запомненной между временными шагами (скрытым состоянием). Скрытое состояние может содержать информацию обо всех предыдущих шагах времени, независимо от длины последовательности. Если количество скрытых единиц слишком велико, то уровень может переупорядочиться с учебными данными. Это значение может варьироваться от нескольких десятков до нескольких тысяч.
Скрытое состояние не ограничивает количество временных шагов, обрабатываемых в итерации. Чтобы разделить ваши последовательности на меньшие последовательности для обучения, используйте 'SequenceLength' опция в trainingOptions.
Пример: 200
OutputMode - Формат вывода'sequence' (по умолчанию) | 'last'Формат вывода, указанный как один из следующих:
'sequence' - Вывод полной последовательности.
'last' - вывод последнего временного шага последовательности.
InputSize - Размер ввода'auto' (по умолчанию) | положительное целое число Размер ввода, указанный как положительное целое число или 'auto'. Если InputSize является 'auto', то программное обеспечение автоматически назначает размер ввода во время обучения.
Пример: 100
StateActivationFunction - Функция активации для обновления ячейки и скрытого состояния'tanh' (по умолчанию) | 'softsign'Функция активации для обновления ячейки и скрытого состояния, указанная как одно из следующих:
'tanh' - используйте гиперболическую касательную функцию (tanh).
'softsign' - Используйте функцию softsign + | x |.
Для обновления ячейки и скрытого состояния слой использует эту опцию в качестве функции, используемой в вычислениях. Дополнительные сведения об использовании функций активации на уровне LSTM см. в разделе Долгосрочный краткосрочный уровень памяти.
GateActivationFunction - Функция активации, применяемая к воротам'sigmoid' (по умолчанию) | 'hard-sigmoid'Функция активации, применяемая к затворам, определяемая одним из следующих параметров:
'sigmoid' - Использовать сигмоидную функцию − x) − 1.
'hard-sigmoid' - Использовать жесткую сигмоидальную функцию
x > 2,5.
Слой использует эту опцию в качестве функции в вычислениях для литников слоя.
CellState - Начальное значение состояния ячейкиНачальное значение состояния ячейки, указанное как NumHiddenUnits-по-1 числовой вектор. Это значение соответствует состоянию ячейки на временном шаге 0.
После установки этого свойства вызывает resetState установка этого значения для состояния ячейки.
HiddenState - Начальное значение скрытого состоянияНачальное значение скрытого состояния, указанное как NumHiddenUnits-по-1 числовой вектор. Это значение соответствует скрытому состоянию на временном шаге 0.
После установки этого свойства вызывает resetState установите это значение в скрытое состояние.
InputWeightsInitializer - Функция инициализации входных весов'glorot' (по умолчанию) | 'he' | 'orthogonal' | 'narrow-normal' | 'zeros' | 'ones' | дескриптор функцииФункция инициализации входных весов, указанных как одно из следующих:
'glorot' - Инициализируйте входные веса инициализатором Glorot [4] (также известным как инициализатор Xavier). Инициализатор Glorot независимо отсчитывает из однородного распределения с нулевым средним и дисперсией 2/(InputSize + numOut), где numOut = 4*NumHiddenUnits.
'he' - Инициализируйте входные веса с помощью инициализатора He [5]. Выборка инициализатора He из нормального распределения с нулевым средним и дисперсией 2/InputSize.
'orthogonal' - Инициализировать входные веса с Q, ортогональной матрицей, заданной QR разложением Z = QR для случайной матрицы Z, дискретизированной из единичного нормального распределения. [6]
'narrow-normal' - Инициализация входных весов путем независимой выборки из нормального распределения с нулевым средним значением и стандартным отклонением 0,01.
'zeros' - Инициализируйте входные веса нулями.
'ones' - Инициализируйте входные веса единицами.
Дескриптор функции - инициализация входных весов с помощью пользовательской функции. Если указан дескриптор функции, то функция должна иметь вид weights = func(sz), где sz - размер входных весов.
Слой инициализирует входные веса только в том случае, если InputWeights пустое свойство.
Типы данных: char | string | function_handle
RecurrentWeightsInitializer - Функция инициализации повторяющихся весов'orthogonal' (по умолчанию) | 'glorot' | 'he' | 'narrow-normal' | 'zeros' | 'ones' | дескриптор функцииФункция для инициализации повторяющихся весов, указанных как одно из следующих:
'orthogonal' - Инициализировать повторяющиеся веса с Q, ортогональной матрицей, заданной QR разложением Z = QR для случайной матрицы Z, дискретизированной из единичного нормального распределения. [6]
'glorot' - Инициализируйте повторяющиеся веса инициализатором Glorot [4] (также известным как инициализатор Xavier). Инициализатор Glorot независимо отсчитывает из однородного распределения с нулевым средним и дисперсией 2/(numIn + numOut), где numIn = NumHiddenUnits и numOut = 4*NumHiddenUnits.
'he' - Инициализируйте повторяющиеся веса с помощью инициализатора He [5]. Выборка инициализатора He из нормального распределения с нулевым средним и дисперсией 2/NumHiddenUnits.
'narrow-normal' - Инициализировать повторяющиеся веса путем независимой выборки из нормального распределения с нулевым средним и стандартным отклонением 0,01.
'zeros' - Инициализируйте повторяющиеся веса нулями.
'ones' - Инициализируйте повторяющиеся веса единицами.
Дескриптор функции - инициализация повторяющихся весов с помощью пользовательской функции. Если указан дескриптор функции, то функция должна иметь вид weights = func(sz), где sz - размер повторяющихся весов.
Слой инициализирует повторяющиеся веса только в том случае, если RecurrentWeights пустое свойство.
Типы данных: char | string | function_handle
BiasInitializer - Функция инициализации смещения'unit-forget-gate' (по умолчанию) | 'narrow-normal' | 'ones' | дескриптор функцииФункция инициализации смещения, указанная как одно из следующих:
'unit-forget-gate' - Инициализируйте смещение забытых ворот единицами, а остальные смещения нулями.
'narrow-normal' - Инициализировать смещение путем независимой выборки из нормального распределения с нулевым средним и стандартным отклонением 0,01.
'ones' - Инициализировать смещение с помощью таковых.
Дескриптор функции - инициализация смещения с помощью пользовательской функции. Если указан дескриптор функции, то функция должна иметь вид bias = func(sz), где sz - размер смещения.
Уровень инициализирует смещение только в том случае, если Bias пустое свойство.
Типы данных: char | string | function_handle
InputWeights - Входные веса[] (по умолчанию) | матрицаВходные веса, заданные как матрица.
Матрица входных весов представляет собой конкатенацию четырех матриц входных весов для компонентов (вентилей) на уровне LSTM. Четыре матрицы соединены вертикально в следующем порядке:
Входной затвор
Забыть ворота
Кандидат в ячейки
Выходной затвор
Входные веса являются обучаемыми параметрами. При обучении сети, если InputWeights является непустым, то trainNetwork использует InputWeights свойство в качестве начального значения. Если InputWeights пуст, затем trainNetwork использует инициализатор, указанный InputWeightsInitializer.
Во время обучения, InputWeights является 4*NumHiddenUnitsоколо-InputSize матрица.
RecurrentWeights - Повторяющиеся веса[] (по умолчанию) | матрицаПовторяющиеся веса, указанные как матрица.
Матрица рекуррентного веса представляет собой конкатенацию четырех матриц рекуррентного веса для компонентов (вентилей) на уровне LSTM. Четыре матрицы соединены по вертикали в следующем порядке:
Входной затвор
Забыть ворота
Кандидат в ячейки
Выходной затвор
Повторяющиеся веса являются обучаемыми параметрами. При обучении сети, если RecurrentWeights является непустым, то trainNetwork использует RecurrentWeights свойство в качестве начального значения. Если RecurrentWeights пуст, затем trainNetwork использует инициализатор, указанный RecurrentWeightsInitializer.
Во время обучения RecurrentWeights является 4*NumHiddenUnitsоколо-NumHiddenUnits матрица.
Bias - Смещения слоев[] (по умолчанию) | числовой векторСмещения слоев для уровня LSTM, заданные как числовой вектор.
Вектор смещения представляет собой конкатенацию четырех векторов смещения для компонентов (вентилей) на уровне LSTM. Четыре вектора соединены вертикально в следующем порядке:
Входной затвор
Забыть ворота
Кандидат в ячейки
Выходной затвор
Смещения слоя - это обучаемые параметры. При обучении сети, если Bias является непустым, то trainNetwork использует Bias свойство в качестве начального значения. Если Bias пуст, затем trainNetwork использует инициализатор, указанный BiasInitializer.
Во время обучения, Bias является 4*NumHiddenUnits-по-1 числовой вектор.
InputWeightsLearnRateFactor - Коэффициент скорости обучения для входных весовКоэффициент скорости обучения для входных весов, определяемый как числовой скаляр или числовой вектор 1 на 4.
Программное обеспечение умножает этот коэффициент на глобальную скорость обучения для определения коэффициента скорости обучения для входных весов слоя. Например, если InputWeightsLearnRateFactor 2, тогда коэффициент скорости обучения для входных весов слоя в два раза превышает текущую глобальную скорость обучения. Программа определяет глобальную скорость обучения на основе настроек, указанных в trainingOptions функция.
Управление значением коэффициента скорости обучения для четырех отдельных матриц в InputWeightsзадайте вектор 1 на 4. Записи InputWeightsLearnRateFactor соответствуют коэффициенту скорости обучения:
Входной затвор
Забыть ворота
Кандидат в ячейки
Выходной затвор
Чтобы задать одинаковое значение для всех матриц, укажите неотрицательный скаляр.
Пример: 2
Пример:
[1 2 1 1]
RecurrentWeightsLearnRateFactor - Коэффициент коэффициента усвоения для повторяющихся весовКоэффициент скорости обучения для повторяющихся весов, определяемый как числовой скаляр или числовой вектор 1 на 4.
Программное обеспечение умножает этот коэффициент на глобальную скорость обучения для определения скорости обучения для повторяющихся весов слоя. Например, если RecurrentWeightsLearnRateFactor 2, то скорость обучения для повторяющихся весов слоя вдвое превышает текущую глобальную скорость обучения. Программа определяет глобальную скорость обучения на основе настроек, указанных в trainingOptions функция.
Управление значением коэффициента скорости обучения для четырех отдельных матриц в RecurrentWeightsзадайте вектор 1 на 4. Записи RecurrentWeightsLearnRateFactor соответствуют коэффициенту скорости обучения:
Входной затвор
Забыть ворота
Кандидат в ячейки
Выходной затвор
Чтобы задать одинаковое значение для всех матриц, укажите неотрицательный скаляр.
Пример: 2
Пример:
[1 2 1 1]
BiasLearnRateFactor - Коэффициент успеваемости для предубежденийКоэффициент скорости обучения для смещений, заданный как неотрицательный скаляр или числовой вектор 1 на 4.
Программное обеспечение умножает этот коэффициент на глобальную скорость обучения, чтобы определить скорость обучения для отклонений на этом уровне. Например, если BiasLearnRateFactor 2, тогда скорость обучения для отклонений в слое в два раза превышает текущую глобальную скорость обучения. Программа определяет глобальную скорость обучения на основе настроек, указанных в trainingOptions функция.
Управление значением коэффициента скорости обучения для четырех отдельных векторов в Biasзадайте вектор 1 на 4. Записи BiasLearnRateFactor соответствуют коэффициенту скорости обучения:
Входной затвор
Забыть ворота
Кандидат в ячейки
Выходной затвор
Чтобы задать одинаковое значение для всех векторов, укажите неотрицательный скаляр.
Пример:
2
Пример:
[1 2 1 1]
InputWeightsL2Factor - коэффициент регуляризации L2 для входных весовL2 коэффициент регуляризации для входных весов, определяемый как числовой скаляр или числовой вектор 1 на 4.
Программное обеспечение умножает этот коэффициент на глобальный коэффициент регуляции L2 для определения коэффициента регуляции L2 для входных весов слоя. Например, если InputWeightsL2Factor 2, тогда коэффициент регуляризации L2 для входных весов слоя в два раза превышает текущий коэффициент глобальной регуляризации L2. Программное обеспечение определяет коэффициент регуляции L2 на основе настроек, указанных в trainingOptions функция.
Управление значением коэффициента регуляризации L2 для четырех отдельных матриц в InputWeightsзадайте вектор 1 на 4. Записи InputWeightsL2Factor соответствуют коэффициенту регуляризации L2:
Входной затвор
Забыть ворота
Кандидат в ячейки
Выходной затвор
Чтобы задать одинаковое значение для всех матриц, укажите неотрицательный скаляр.
Пример: 2
Пример:
[1 2 1 1]
RecurrentWeightsL2Factor - коэффициент регуляризации L2 для повторяющихся весовL2 коэффициент регуляризации для повторяющихся весов, определяемый как числовой скаляр или числовой вектор 1 на 4.
Программное обеспечение умножает этот коэффициент на глобальный коэффициент регуляции L2 для определения коэффициента регуляции L2 для повторяющихся весов слоя. Например, если RecurrentWeightsL2Factor 2, тогда коэффициент регуляризации L2 для повторяющихся весов слоя в два раза превышает текущий коэффициент глобальной регуляризации L2. Программное обеспечение определяет коэффициент регуляции L2 на основе настроек, указанных в trainingOptions функция.
Управление значением коэффициента регуляризации L2 для четырех отдельных матриц в RecurrentWeightsзадайте вектор 1 на 4. Записи RecurrentWeightsL2Factor соответствуют коэффициенту регуляризации L2:
Входной затвор
Забыть ворота
Кандидат в ячейки
Выходной затвор
Чтобы задать одинаковое значение для всех матриц, укажите неотрицательный скаляр.
Пример: 2
Пример:
[1 2 1 1]
BiasL2Factor - коэффициент регуляризации L2 для отклоненийL2 коэффициент регуляризации для смещений, определяемый как неотрицательный скаляр или числовой вектор 1 на 4.
Программное обеспечение умножает этот коэффициент на глобальный коэффициент регуляризации L2, чтобы определить L2 регуляризацию для смещений на этом уровне. Например, если BiasL2Factor 2, то L2 регуляризация для смещений в этом слое вдвое превышает глобальный коэффициент регуляризации L2. Можно указать глобальный коэффициент регуляризации L2 с помощью trainingOptions функция.
Управление значением коэффициента регуляризации L2 для четырех отдельных векторов в Biasзадайте вектор 1 на 4. Записи BiasL2Factor соответствуют коэффициенту регуляризации L2:
Входной затвор
Забыть ворота
Кандидат в ячейки
Выходной затвор
Чтобы задать одинаковое значение для всех векторов, укажите неотрицательный скаляр.
Пример:
2
Пример:
[1 2 1 1]
Name - Имя слоя'' (по умолчанию) | символьный вектор | строковый скалярИмя слоя, указанное как символьный вектор или строковый скаляр. Если Name имеет значение ''затем программа автоматически присваивает имя во время обучения.
Типы данных: char | string
NumInputs - Количество входовКоличество входов слоя. Этот слой принимает только один вход.
Типы данных: double
InputNames - Входные имена{'in'} (по умолчанию)Входные имена слоя. Этот слой принимает только один вход.
Типы данных: cell
NumOutputs - Количество выходовКоличество выходов уровня. Этот уровень имеет только один выход.
Типы данных: double
OutputNames - Имена выходных данных{'out'} (по умолчанию)Выходные имена слоя. Этот уровень имеет только один выход.
Типы данных: cell
Создание уровня LSTM с именем 'lstm1' и 100 скрытых единиц.
layer = lstmLayer(100,'Name','lstm1')
layer =
LSTMLayer with properties:
Name: 'lstm1'
Hyperparameters
InputSize: 'auto'
NumHiddenUnits: 100
OutputMode: 'sequence'
StateActivationFunction: 'tanh'
GateActivationFunction: 'sigmoid'
Learnable Parameters
InputWeights: []
RecurrentWeights: []
Bias: []
State Parameters
HiddenState: []
CellState: []
Show all properties
Включение уровня LSTM в Layer массив.
inputSize = 12;
numHiddenUnits = 100;
numClasses = 9;
layers = [ ...
sequenceInputLayer(inputSize)
lstmLayer(numHiddenUnits)
fullyConnectedLayer(numClasses)
softmaxLayer
classificationLayer]layers =
5x1 Layer array with layers:
1 '' Sequence Input Sequence input with 12 dimensions
2 '' LSTM LSTM with 100 hidden units
3 '' Fully Connected 9 fully connected layer
4 '' Softmax softmax
5 '' Classification Output crossentropyex
Обучение сети LSTM глубокому обучению классификации «последовательность-метка».
Загрузите набор данных японских гласных, как описано в [1] и [2]. XTrain - клеточный массив, содержащий 270 последовательностей различной длины с 12 признаками, соответствующими коэффициентам кепстра LPC. Y - категориальный вектор меток 1,2,..., 9. Записи вXTrain представляют собой матрицы с 12 строками (по одной строке для каждого признака) и различным количеством столбцов (по одному столбцу для каждого временного шага).
[XTrain,YTrain] = japaneseVowelsTrainData;
Визуализация первого временного ряда на графике. Каждая строка соответствует элементу.
figure
plot(XTrain{1}')
title("Training Observation 1")
numFeatures = size(XTrain{1},1);
legend("Feature " + string(1:numFeatures),'Location','northeastoutside')
Определите архитектуру сети LSTM. Укажите размер ввода как 12 (количество элементов входных данных). Укажите уровень LSTM, который должен иметь 100 скрытых единиц и выводить последний элемент последовательности. Наконец, укажите девять классов, включив полностью соединенный слой размера 9, за которым следуют слой softmax и слой классификации.
inputSize = 12; numHiddenUnits = 100; numClasses = 9; layers = [ ... sequenceInputLayer(inputSize) lstmLayer(numHiddenUnits,'OutputMode','last') fullyConnectedLayer(numClasses) softmaxLayer classificationLayer]
layers =
5×1 Layer array with layers:
1 '' Sequence Input Sequence input with 12 dimensions
2 '' LSTM LSTM with 100 hidden units
3 '' Fully Connected 9 fully connected layer
4 '' Softmax softmax
5 '' Classification Output crossentropyex
Укажите параметры обучения. Укажите решатель как 'adam' и 'GradientThreshold' как 1. Установите размер мини-партии равным 27 и максимальное количество периодов равным 70.
Поскольку мини-пакеты малы с короткими последовательностями, ЦП лучше подходит для обучения. Набор 'ExecutionEnvironment' кому 'cpu'. Обучение на GPU, если доступно, установить 'ExecutionEnvironment' кому 'auto' (значение по умолчанию).
maxEpochs = 70; miniBatchSize = 27; options = trainingOptions('adam', ... 'ExecutionEnvironment','cpu', ... 'MaxEpochs',maxEpochs, ... 'MiniBatchSize',miniBatchSize, ... 'GradientThreshold',1, ... 'Verbose',false, ... 'Plots','training-progress');
Обучение сети LSTM с указанными вариантами обучения.
net = trainNetwork(XTrain,YTrain,layers,options);

Загрузите тестовый набор и классифицируйте последовательности в динамики.
[XTest,YTest] = japaneseVowelsTestData;
Классифицируйте данные теста. Укажите размер мини-партии, используемый для обучения.
YPred = classify(net,XTest,'MiniBatchSize',miniBatchSize);Вычислите точность классификации прогнозов.
acc = sum(YPred == YTest)./numel(YTest)
acc = 0.9514
Чтобы создать сеть LSTM для классификации последовательности к метке, создайте массив уровней, содержащий входной уровень последовательности, уровень LSTM, полностью подключенный уровень, уровень softmax и выходной уровень классификации.
Установите размер входного слоя последовательности на количество элементов входных данных. Задайте для размера полностью подключенного слоя количество классов. Указывать длину последовательности не требуется.
Для уровня LSTM укажите количество скрытых единиц и режим вывода 'last'.
numFeatures = 12; numHiddenUnits = 100; numClasses = 9; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits,'OutputMode','last') fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];
Пример обучения сети LSTM классификации «последовательность-метка» и классификации новых данных см. в разделе Классификация последовательностей с использованием глубокого обучения.
Чтобы создать сеть LSTM для классификации последовательности к последовательности, используйте ту же архитектуру, что и для классификации последовательности к метке, но установите режим вывода уровня LSTM в значение 'sequence'.
numFeatures = 12; numHiddenUnits = 100; numClasses = 9; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits,'OutputMode','sequence') fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];
Чтобы создать сеть LSTM для регрессии «последовательность к одному», создайте массив уровней, содержащий входной уровень последовательности, уровень LSTM, полностью связанный уровень и выходной уровень регрессии.
Установите размер входного слоя последовательности на количество элементов входных данных. Задайте для размера полностью подключенного слоя количество откликов. Указывать длину последовательности не требуется.
Для уровня LSTM укажите количество скрытых единиц и режим вывода 'last'.
numFeatures = 12; numHiddenUnits = 125; numResponses = 1; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits,'OutputMode','last') fullyConnectedLayer(numResponses) regressionLayer];
Чтобы создать сеть LSTM для регрессии последовательности к последовательности, используйте ту же архитектуру, что и для регрессии последовательности к одной, но установите режим вывода уровня LSTM равным 'sequence'.
numFeatures = 12; numHiddenUnits = 125; numResponses = 1; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits,'OutputMode','sequence') fullyConnectedLayer(numResponses) regressionLayer];
Пример обучения сети LSTM регрессии последовательности к последовательности и прогнозирования новых данных см. в разделе Регрессия последовательности к последовательности с использованием глубокого обучения.
Можно сделать сети LSTM глубже, вставив дополнительные уровни LSTM с режимом вывода 'sequence' перед уровнем LSTM. Чтобы избежать переоборудования, можно вставить выпадающие слои после слоев LSTM.
Для сетей классификации «последовательность-метка» режим вывода последнего уровня LSTM должен быть 'last'.
numFeatures = 12; numHiddenUnits1 = 125; numHiddenUnits2 = 100; numClasses = 9; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits1,'OutputMode','sequence') dropoutLayer(0.2) lstmLayer(numHiddenUnits2,'OutputMode','last') dropoutLayer(0.2) fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];
Для сетей классификации последовательности к последовательности режим вывода последнего уровня LSTM должен быть 'sequence'.
numFeatures = 12; numHiddenUnits1 = 125; numHiddenUnits2 = 100; numClasses = 9; layers = [ ... sequenceInputLayer(numFeatures) lstmLayer(numHiddenUnits1,'OutputMode','sequence') dropoutLayer(0.2) lstmLayer(numHiddenUnits2,'OutputMode','sequence') dropoutLayer(0.2) fullyConnectedLayer(numClasses) softmaxLayer classificationLayer];
Уровень LSTM распознает долгосрочные зависимости между временными шагами во временных рядах и данными последовательности.
Состояние слоя состоит из скрытого состояния (также известного как состояние вывода) и состояния ячейки. Скрытое состояние на временном шаге t содержит выходной сигнал уровня LSTM для этого временного шага. Состояние ячейки содержит информацию, полученную из предыдущих временных шагов. На каждом этапе времени слой добавляет информацию в состояние ячейки или удаляет информацию из него. Слой управляет этими обновлениями с помощью литников.
Следующие компоненты управляют состоянием ячейки и скрытым состоянием слоя.
| Компонент | Цель |
|---|---|
| Входной затвор (i) | Уровень управления обновлением состояния соты |
| Забыть ворота (f) | Уровень управления сбросом состояния соты (забудьте) |
| Клеточный кандидат (g) | Добавление информации в состояние ячейки |
| Выходной затвор (o) | Уровень управления состоянием ячейки, добавленной в скрытое состояние |
Эта диаграмма иллюстрирует поток данных на временном шаге Т. Диаграмма показывает, как затворы забывают, обновляют и выводят ячейки и скрытые состояния.

Распознаваемые веса уровня LSTM являются входными весами W (InputWeights), повторяющиеся веса R (RecurrentWeights) и смещение b (Bias). Матрицы W, R и b представляют собой конкатенации входных весов, повторяющихся весов и смещения каждого компонента соответственно. Эти матрицы объединяются следующим образом:
bibfbgbo],
где i, f, g и o обозначают входной, забытый и выходной вентили соответственно.
Состояние ячейки на временном шаге t задается
где обозначает произведение Адамара (элементное умножение векторов).
Скрытое состояние на временном шаге t задается
),
где обозначает функцию активации состояния. lstmLayer функция по умолчанию использует гиперболическую касательную функцию (tanh) для вычисления функции активации состояния.
Следующие формулы описывают компоненты на временном шаге t.
| Компонент | Формула |
|---|---|
| Входной затвор | − 1 + bi) |
| Забыть ворота | − 1 + bf) |
| Кандидат в ячейки | − 1 + bg) |
| Выходной затвор | − 1 + bo) |
В этих расчётах обозначает функцию активации затвора. lstmLayer функция по умолчанию использует для вычисления функции активации затвора сигмоидальную функцию, заданную (x) = (1 + e − x) − 1.
В R2019a изменилось поведение
Начиная с R2019a, программное обеспечение по умолчанию инициализирует входные веса слоев этого слоя с помощью инициализатора Glorot. Такое поведение помогает стабилизировать обучение и обычно сокращает время обучения глубоких сетей.
В предыдущих версиях программное обеспечение по умолчанию инициализирует входные веса слоя с помощью выборки из нормального распределения с нулевым средним значением и дисперсией 0,01. Чтобы воспроизвести это поведение, установите 'InputWeightsInitializer' параметр слоя в 'narrow-normal'.
В R2019a изменилось поведение
Начиная с R2019a, программное обеспечение по умолчанию инициализирует повторяющиеся веса слоев этого слоя на Q, ортогональную матрицу, заданную QR-разложением Z = QR для случайной матрицы Z, дискретизированной из единичного нормального распределения. Такое поведение помогает стабилизировать обучение и обычно сокращает время обучения глубоких сетей.
В предыдущих версиях программное обеспечение по умолчанию инициализирует повторяющиеся веса слоя с использованием выборки из нормального распределения с нулевым средним значением и дисперсией 0,01. Чтобы воспроизвести это поведение, установите 'RecurrentWeightsInitializer' параметр слоя в 'narrow-normal'.
[1] М. Кудо, Дж. Тояма и М. Симбо. «Многомерная классификация кривых с использованием сквозных областей». Буквы распознавания образов. т. 20, № 11-13, стр. 1103-1111.
[2] Хранилище машинного обучения UCI: набор данных гласных на японском языке. https://archive.ics.uci.edu/ml/datasets/Japanese+Vowels
[3] Hochreiter, S и J. Schmidhuber, 1997. Длительная кратковременная память. Нейронные вычисления, 9 (8), стр. 1735-1780.
[4] Глорот, Ксавье и Йошуа Бенгио. «Понимание сложности обучения глубоким нейронным сетям». Материалы тринадцатой Международной конференции по искусственному интеллекту и статистике, 249-356. Сардиния, Италия: AISTATS, 2010.
[5] Хэ, Каймин, Сянъу Чжан, Шаоцин Жэнь и Цзянь Сунь. «Углубляясь в выпрямители: превосходя показатели на уровне человека по классификации ImageNet». В трудах Международной конференции IEEE 2015 по компьютерному зрению, 1026-1034. Вашингтон, округ Колумбия: Общество компьютерного зрения IEEE, 2015.
[6] Саксен, Эндрю М., Джеймс Л. Макклелланд и Сурья Гангули. «Точные решения нелинейной динамики обучения в глубоких линейных нейронных сетях». arXiv препринт arXiv:1312.6120 (2013).
Примечания и ограничения по использованию:
При создании кода с помощью Intel ® MKL-DNN:
StateActivationFunction свойство должно иметь значение 'tanh'.
GateActivationFunction свойство должно иметь значение 'sigmoid'.
Примечания и ограничения по использованию:
Для генерации кода GPU, StateActivationFunction свойство должно иметь значение 'tanh'.
Для генерации кода GPU, GateActivationFunction свойство должно иметь значение 'sigmoid'.
bilstmLayer | classifyAndUpdateState | Конструктор глубоких сетей | flattenLayer | gruLayer | predictAndUpdateState | resetState | sequenceFoldingLayer | sequenceInputLayer | sequenceUnfoldingLayer
Имеется измененная версия этого примера. Открыть этот пример с помощью изменений?
1. Если смысл перевода понятен, то лучше оставьте как есть и не придирайтесь к словам, синонимам и тому подобному. О вкусах не спорим.
2. Не дополняйте перевод комментариями “от себя”. В исправлении не должно появляться дополнительных смыслов и комментариев, отсутствующих в оригинале. Такие правки не получится интегрировать в алгоритме автоматического перевода.
3. Сохраняйте структуру оригинального текста - например, не разбивайте одно предложение на два.
4. Не имеет смысла однотипное исправление перевода какого-то термина во всех предложениях. Исправляйте только в одном месте. Когда Вашу правку одобрят, это исправление будет алгоритмически распространено и на другие части документации.
5. По иным вопросам, например если надо исправить заблокированное для перевода слово, обратитесь к редакторам через форму технической поддержки.