wordEmbeddingLayer

Слой встраивания слов для нейронных сетей для глубокого обучения

Описание

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

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

Этот слой требует Deep Learning 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 = Q R для случайной матрицы, Z выбранной из модуля нормального распределения. [3]

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

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

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

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

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

Веса слоев, заданные как Dimension-by- (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] Глорот, Ксавьер и Йошуа Бенгио. «Понимание сложности обучения нейронных сетей с глубоким 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).

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

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

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