bilstmLayer

Двунаправленный слой долгой краткосрочной памяти (BiLSTM)

Описание

Двунаправленный слой LSTM (BiLSTM) изучает двунаправленные долгосрочные зависимости между временными шагами временных рядов или данных последовательности. Эти зависимости могут быть полезны, когда необходимо, чтобы сеть училась из полных временных рядов на каждом временном шаге.

Создание

Описание

пример

layer = bilstmLayer(numHiddenUnits) создает двунаправленный слой LSTM и устанавливает NumHiddenUnits свойство.

пример

layer = bilstmLayer(numHiddenUnits,Name,Value) устанавливает дополнительные OutputMode, Активации,, Параметры и Инициализация, Скорость Обучения и Регуляризация, и Name свойства с использованием одного или нескольких аргументов пары "имя-значение". Можно задать несколько аргументы пары "имя-значение". Заключайте каждое имя свойства в кавычки.

Свойства

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

BiLSTM

Количество скрытых модулей измерения (также известное как скрытый размер), заданное как положительное целое число.

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

Скрытое состояние не ограничивает количество временных шагов, которые обрабатываются в итерации. Чтобы разделить ваши последовательности на меньшие последовательности для обучения, используйте 'SequenceLength' опция в trainingOptions.

Пример: 200

Формат вывода, заданный как один из следующих:

  • 'sequence' - Вывод полной последовательности.

  • 'last' - Вывод последнего временного шага последовательности.

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

Пример: 100

Активации

Функция активации для обновления камеры и скрытого состояния, заданная как одно из следующего:

  • 'tanh' - Используйте гиперболическую функцию тангенса (tanh).

  • 'softsign' - Используйте функцию softsign softsign(x)=x1+|x|.

Слой использует эту опцию как функцию σc в вычислениях для обновления камеры и скрытого состояния. Для получения дополнительной информации о том, как функции активации используются в слое LSTM, смотрите Long Short-Term Memory Layer.

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

  • 'sigmoid' - Используйте сигмоидную функцию σ(x)=(1+ex)1.

  • 'hard-sigmoid' - Используйте жесткую сигмоидную функцию

    σ(x)={00.2x+0.51если x<2.5если2.5x2.5если x>2.5.

Слой использует эту опцию как функцию σg в расчетах для затворов слоя.

Государство

Начальное значение состояния камеры, заданное как 2*NumHiddenUnits-by-1 числовой вектор. Это значение соответствует состоянию камеры во временной шаг 0.

После установки этого свойства вызовы на resetState функция устанавливает состояние камеры на это значение.

Начальное значение скрытого состояния, заданное как 2*NumHiddenUnits-by-1 числовой вектор. Это значение соответствует скрытому состоянию во временной шаг 0.

После установки этого свойства вызовы на resetState функция устанавливает скрытое состояние на это значение.

Параметры и инициализация

Функция для инициализации весов входа, заданная как одно из следующего:

  • 'glorot' - Инициализируйте входные веса с помощью инициализатора Glorot [1] (также известного как инициализатор Xavier). Инициализатор Glorot независимо выбирает из равномерного распределения с нулем среднего и отклонением 2/(InputSize + numOut), где numOut = 8*NumHiddenUnits.

  • 'he' - Инициализируйте входные веса с помощью инициализатора He [2]. Инициализатор He производит выборки из нормального распределения с нулем среднего и отклонением 2/InputSize.

  • 'orthogonal' - Инициализируйте веса входа с помощью Q, ортогональной матрицы, заданной QR-разложением Z = Q R для случайной матрицы, Z выбранной из модуля нормального распределения. [3]

  • 'narrow-normal' - Инициализируйте входные веса путем независимой выборки из нормального распределения с нулевым средним и стандартным отклонением 0,01.

  • 'zeros' - Инициализируйте входные веса с нулями.

  • 'ones' - Инициализируйте входные веса с таковые.

  • Указатель на функцию - Инициализируйте входные веса с помощью пользовательской функции. Если вы задаете указатель на функцию, то функция должна иметь вид weights = func(sz), где sz - размер входных весов.

Слой инициализирует входные веса только тогда, когда InputWeights свойство пустое.

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

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

  • 'orthogonal' - Инициализируйте веса входа с помощью Q, ортогональной матрицы, заданной QR-разложением Z = Q R для случайной матрицы, Z выбранной из модуля нормального распределения. [3]

  • 'glorot' - Инициализируйте повторяющиеся веса с помощью инициализатора Glorot [1] (также известного как инициализатор Xavier). Инициализатор Glorot независимо выбирает из равномерного распределения с нулем среднего и отклонением 2/(numIn + numOut), где numIn = NumHiddenUnits и numOut = 8*NumHiddenUnits.

  • 'he' - Инициализируйте повторяющиеся веса с помощью инициализатора He [2]. Инициализатор He производит выборки из нормального распределения с нулем среднего и отклонением 2/NumHiddenUnits.

  • 'narrow-normal' - Инициализируйте рекуррентные веса путем независимой выборки из нормального распределения с нулевым средним и стандартным отклонением 0,01.

  • 'zeros' - Инициализируйте повторяющиеся веса с нулями.

  • 'ones' - Инициализируйте повторяющиеся веса с таковыми.

  • Указатель на функцию - Инициализируйте повторяющиеся веса с помощью пользовательской функции. Если вы задаете указатель на функцию, то функция должна иметь вид weights = func(sz), где sz - размер повторяющихся весов.

Слой инициализирует повторяющиеся веса только тогда, когда RecurrentWeights свойство пустое.

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

Функция для инициализации смещения, заданная как одно из следующего:

  • 'unit-forget-gate' - Инициализируйте смещение запоминающего устройства с таковые и оставшиеся смещения с нулями.

  • 'narrow-normal' - Инициализируйте смещение путем независимой выборки из нормального распределения с нулевым средним и стандартным отклонением 0,01.

  • 'ones' - Инициализируйте смещение с таковые.

  • Указатель на функцию - Инициализируйте смещение с помощью пользовательской функции. Если вы задаете указатель на функцию, то функция должна иметь вид bias = func(sz), где sz - размер смещения.

Слой инициализирует смещение только тогда, когда Bias свойство пустое.

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

Входные веса, заданные как матрица.

Вход веса является конкатенацией восьми матриц входного веса для компонентов (затворов) в двунаправленном слое LSTM. Восемь матриц объединены вертикально в следующем порядке:

  1. Входной затвор (Вперед)

  2. Забудьте ворота (Вперед)

  3. Кандидат на камеру (вперед)

  4. Выходной затвор (Вперед)

  5. Входной затвор (Назад)

  6. Забудьте ворота (Назад)

  7. Кандидат на камеру (назад)

  8. Выходной затвор (Назад)

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

Во время обучения InputWeights является 8*NumHiddenUnits-by- InputSize матрица.

Периодические веса, заданные как матрица.

Матрица рекуррентного веса является конкатенацией восьми матриц рекуррентного веса для компонентов (затворов) в двунаправленном слое LSTM. Восемь матриц объединены вертикально в следующем порядке:

  1. Входной затвор (Вперед)

  2. Забудьте ворота (Вперед)

  3. Кандидат на камеру (вперед)

  4. Выходной затвор (Вперед)

  5. Входной затвор (Назад)

  6. Забудьте ворота (Назад)

  7. Кандидат на камеру (назад)

  8. Выходной затвор (Назад)

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

Во время обучения RecurrentWeights является 8*NumHiddenUnits-by- NumHiddenUnits матрица.

Смещения слоя, заданные как числовой вектор.

Вектор смещения является конкатенацией восьми векторов смещения для компонентов (затворов) в двунаправленном слое LSTM. Восемь векторов объединены вертикально в следующем порядке:

  1. Входной затвор (Вперед)

  2. Забудьте ворота (Вперед)

  3. Кандидат на камеру (вперед)

  4. Выходной затвор (Вперед)

  5. Входной затвор (Назад)

  6. Забудьте ворота (Назад)

  7. Кандидат на камеру (назад)

  8. Выходной затвор (Назад)

Смещения слоя являются настраиваемыми параметрами. При обучении сети, если Bias непусто, тогда trainNetwork использует Bias свойство как начальное значение. Если Bias пуст, тогда trainNetwork использует инициализатор, заданный как BiasInitializer.

Во время обучения Bias является 8*NumHiddenUnits-by-1 числовой вектор.

Темп обучения и регуляризация

Коэффициент скорости обучения для входных весов, заданный как числовой скаляр или числовой вектор 1 на 8.

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

Чтобы управлять значением коэффициента скорости обучения для четырех отдельных матриц в InputWeights, присвойте вектор 1 на 8, где значения соответствуют коэффициенту скорости обучения следующего:

  1. Входной затвор (Вперед)

  2. Забудьте ворота (Вперед)

  3. Кандидат на камеру (вперед)

  4. Выходной затвор (Вперед)

  5. Входной затвор (Назад)

  6. Забудьте ворота (Назад)

  7. Кандидат на камеру (назад)

  8. Выходной затвор (Назад)

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

Пример: 0.1

Коэффициент скорости обучения для рекуррентных весов, заданный как числовой скаляр или числовой вектор 1 на 8.

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

Чтобы контролировать значение скорости обучения для четырех отдельных матриц в RecurrentWeights, присвойте вектор 1 на 8, где значения соответствуют коэффициенту скорости обучения следующего:

  1. Входной затвор (Вперед)

  2. Забудьте ворота (Вперед)

  3. Кандидат на камеру (вперед)

  4. Выходной затвор (Вперед)

  5. Входной затвор (Назад)

  6. Забудьте ворота (Назад)

  7. Кандидат на камеру (назад)

  8. Выходной затвор (Назад)

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

Пример: 0.1

Пример: [1 2 1 1 1 2 1 1]

Коэффициент скорости обучения для смещений, заданный как неотрицательный скаляр или числовой вектор 1 на 8.

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

Чтобы управлять значением коэффициента скорости обучения для четырех отдельных матриц в Bias, присвойте вектор 1 на 8, где значения соответствуют коэффициенту скорости обучения следующего:

  1. Входной затвор (Вперед)

  2. Забудьте ворота (Вперед)

  3. Кандидат на камеру (вперед)

  4. Выходной затвор (Вперед)

  5. Входной затвор (Назад)

  6. Забудьте ворота (Назад)

  7. Кандидат на камеру (назад)

  8. Выходной затвор (Назад)

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

Пример: 2

Пример: [1 2 1 1 1 2 1 1]

L2 регуляризационный коэффициент для весов входа, заданный как числовой скаляр или числовой вектор 1 на 8.

Программа умножает этот коэффициент на глобальный коэффициент регуляризации L2, чтобы определить L2 коэффициент регуляризации для входных весов слоя. Для примера, если InputWeightsL2Factor равен 2, тогда коэффициент регуляризации L2 для входных весов слоя вдвое превышает текущий глобальный коэффициент регуляризации L2. Программа определяет коэффициент регуляризации L2 на основе настроек, заданных в trainingOptions функция.

Чтобы контролировать значение коэффициента регуляризации L2 для четырех отдельных матриц в InputWeights, присвойте вектор 1 на 8, где значения соответствуют L2 коэффициенту регуляризации следующего:

  1. Входной затвор (Вперед)

  2. Забудьте ворота (Вперед)

  3. Кандидат на камеру (вперед)

  4. Выходной затвор (Вперед)

  5. Входной затвор (Назад)

  6. Забудьте ворота (Назад)

  7. Кандидат на камеру (назад)

  8. Выходной затвор (Назад)

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

Пример: 0.1

Пример: [1 2 1 1 1 2 1 1]

L2 регуляризации для рекуррентных весов, заданный как числовой скаляр или числовой вектор 1 на 8.

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

Чтобы контролировать значение коэффициента регуляризации L2 для четырех отдельных матриц в RecurrentWeights, присвойте вектор 1 на 8, где значения соответствуют L2 коэффициенту регуляризации следующего:

  1. Входной затвор (Вперед)

  2. Забудьте ворота (Вперед)

  3. Кандидат на камеру (вперед)

  4. Выходной затвор (Вперед)

  5. Входной затвор (Назад)

  6. Забудьте ворота (Назад)

  7. Кандидат на камеру (назад)

  8. Выходной затвор (Назад)

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

Пример: 0.1

Пример: [1 2 1 1 1 2 1 1]

L2 регуляризации для смещений, заданный как неотрицательный скаляр.

Программа умножает этот коэффициент на глобальный коэффициент регуляризации L2, чтобы определить L2 регуляризацию для смещений на этом слое. Для примера, если BiasL2Factor равен 2, тогда L2 регуляризация для смещений в этом слое в два раза превышает глобальный коэффициент регуляризации L2. Можно задать глобальный коэффициент регуляризации L2 с помощью trainingOptions функция.

Чтобы контролировать значение коэффициента регуляризации L2 для четырех отдельных матриц в Bias, присвойте вектор 1 на 8, где значения соответствуют L2 коэффициенту регуляризации следующего:

  1. Входной затвор (Вперед)

  2. Забудьте ворота (Вперед)

  3. Кандидат на камеру (вперед)

  4. Выходной затвор (Вперед)

  5. Входной затвор (Назад)

  6. Забудьте ворота (Назад)

  7. Кандидат на камеру (назад)

  8. Выходной затвор (Назад)

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

Пример: 2

Пример: [1 2 1 1 1 2 1 1]

Слой

Имя слоя, заданное как вектор символов или строковый скаляр. Если Name установлено в ''затем программа автоматически присваивает имя во время обучения.

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

Количество входов слоя. Этот слой принимает только один вход.

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

Входные имена слоя. Этот слой принимает только один вход.

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

Количество выходов слоя. Этот слой имеет только один выход.

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

Выходные имена слоя. Этот слой имеет только один выход.

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

Примеры

свернуть все

Создайте двунаправленный слой LSTM с именем 'bilstm1' и 100 скрытые модули.

layer = bilstmLayer(100,'Name','bilstm1')
layer = 
  BiLSTMLayer with properties:

                       Name: 'bilstm1'

   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)
    bilstmLayer(numHiddenUnits)
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer]
layers = 
  5x1 Layer array with layers:

     1   ''   Sequence Input          Sequence input with 12 dimensions
     2   ''   BiLSTM                  BiLSTM with 100 hidden units
     3   ''   Fully Connected         9 fully connected layer
     4   ''   Softmax                 softmax
     5   ''   Classification Output   crossentropyex

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

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

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

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

Ссылки

[1] Глорот, Ксавьер и Йошуа Бенгио. «Понимание сложности обучения нейронных сетей с глубоким Feedforward». В работе тринадцатой Международной конференции по искусственному интеллекту и статистике, 249-356. Сардиния, Италия: AISTATS, 2010.

[2] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. «Delving Deep Into Rectifiers: Overpassing Human-Level Performance on ImageNet Classification». В работе Международной конференции IEEE по компьютерному зрению 2015 года, 1026-1034. Вашингтон, округ Колумбия: IEEE Компьютерное Зрение Society, 2015.

[3] Saxe, Andrew M., James L. McClelland, and Surya Ganguli. «Точные решения нелинейной динамики обучения в глубоких линейных нейронных сетях» .arXiv preprint arXiv:1312.6120 (2013).

Расширенные возможности

..
Введенный в R2018a