exponenta event banner

wordEmbeddingLayer

Уровень внедрения Word для сетей глубокого обучения

Описание

Слой встраивания слов отображает индексы слов в векторы.

Используйте уровень встраивания слов в сети LSTM. Сеть LSTM - это тип рекуррентной нейронной сети (RNN), которая может изучать долгосрочные зависимости между временными шагами данных последовательности. Слой встраивания слов отображает последовательность индексов слов на векторы встраивания и изучает встраивание слов во время обучения.

Для этого уровня требуется Toolbox™ глубокого обучения.

Создание

Описание

пример

layer = wordEmbeddingLayer(dimension,numWords) создает слой встраивания слов и задает размер встраивания и словарный размер.

пример

layer = wordEmbeddingLayer(dimension,numWords,Name,Value) задает дополнительные свойства, используя одну или несколько пар имя-значение. Заключите каждое имя свойства в отдельные кавычки.

Свойства

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

Встраивание слов

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

Пример: 300

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

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

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

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

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

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

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

  • 'zeros' - Инициализация весов с нулями.

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

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

Слой инициализирует веса только в том случае, если Weights пустое свойство.

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

Веса слоев, указанные как DimensionоколоNumWords+ 1) массив.

Для входных целых чисел i меньше или равно NumWords, слой выводит вектор Weights(:,i). В противном случае отображение слоя выводит вектор Weights(:,NumWords+1).

Скорость обучения и регуляризация

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

Программное обеспечение умножает этот коэффициент на глобальную скорость обучения, чтобы определить скорость обучения для весов на этом уровне. Например, если WeightLearnRateFactor 2, то скорость обучения для весов в этом слое вдвое превышает текущую глобальную скорость обучения. Программа определяет глобальную скорость обучения на основе настроек, указанных в trainingOptions (Deep Learning Toolbox).

Пример: 2

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

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

Пример: 2

Слой

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

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

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

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

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

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

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

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

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

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

Примеры

свернуть все

Создайте слой встраивания слов с размером встраивания 300 и 5000 слов.

layer = wordEmbeddingLayer(300,5000)
layer = 
  WordEmbeddingLayer with properties:

         Name: ''

   Hyperparameters
    Dimension: 300
     NumWords: 5000

   Learnable Parameters
      Weights: []

  Show all properties

Включить уровень внедрения слов в сеть LSTM.

inputSize = 1;
embeddingDimension = 300;
numWords = 5000;
numHiddenUnits = 200;
numClasses = 10;

layers = [
    sequenceInputLayer(inputSize)
    wordEmbeddingLayer(embeddingDimension,numWords)
    lstmLayer(numHiddenUnits,'OutputMode','last')
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer]
layers = 
  6x1 Layer array with layers:

     1   ''   Sequence Input          Sequence input with 1 dimensions
     2   ''   Word Embedding Layer    Word embedding layer with 300 dimensions and 5000 unique words
     3   ''   LSTM                    LSTM with 200 hidden units
     4   ''   Fully Connected         10 fully connected layer
     5   ''   Softmax                 softmax
     6   ''   Classification Output   crossentropyex

Чтобы инициализировать слой встраивания слов в сети глубокого обучения с весами из предварительно обученного встраивания слов, используйте word2vec для извлечения веса слоя и установки 'Weights' пара имя-значение wordEmbeddingLayer функция. Слой встраивания слов ожидает столбцы векторов слов, поэтому необходимо транспонировать выходные данные word2vec функция.

emb = fastTextWordEmbedding;

words = emb.Vocabulary;
dimension = emb.Dimension;
numWords = numel(words);

layer = wordEmbeddingLayer(dimension,numWords,...
    'Weights',word2vec(emb,words)')
layer = 
  WordEmbeddingLayer with properties:

         Name: ''

   Hyperparameters
    Dimension: 300
     NumWords: 999994

   Learnable Parameters
      Weights: [300×999994 single]

  Show all properties

Чтобы создать соответствующее кодирование слова из вложенного слова, введите словарь вложенного слова в wordEncoding функция в виде списка слов.

enc = wordEncoding(words)
enc = 
  wordEncoding with properties:

      NumWords: 999994
    Vocabulary: [1×999994 string]

Ссылки

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

[2] Хэ, Каймин, Сянъу Чжан, Шаоцин Жэнь и Цзянь Сунь. «Углубляясь в выпрямители: превосходя показатели на уровне человека по классификации ImageNet». В трудах Международной конференции IEEE 2015 по компьютерному зрению, 1026-1034. Вашингтон, округ Колумбия: Общество компьютерного зрения IEEE, 2015.

[3] Саксен, Эндрю М., Джеймс Л. Макклелланд и Сурья Гангули. «Точные решения нелинейной динамики обучения в глубоких линейных нейронных сетях». arXiv препринт arXiv:1312.6120 (2013).

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

Создание кода графического процессора
Создание кода CUDA ® для графических процессоров NVIDIA ® с помощью Coder™ графических процессоров

.

См. также

| | | | | | (глубоко изучение комплекта инструментов) | (инструментарий для глубокого обучения) | (инструментарий для глубокого обучения)

Представлен в R2018b