Main Content

wordEmbeddingLayer

딥러닝 신경망을 위한 단어 임베딩 계층

설명

단어 임베딩 계층은 단어 인덱스를 벡터로 매핑합니다.

딥러닝 LSTM(장단기 기억) 신경망에 단어 임베딩 계층을 사용할 수 있습니다. LSTM 신경망은 시퀀스 데이터의 시간 스텝 간의 장기적인 종속성을 학습할 수 있는 순환 신경망(RNN)의 일종입니다. 단어 임베딩 계층은 단어 인덱스 시퀀스를 임베딩 벡터에 매핑하고 훈련 중에 단어 임베딩을 학습합니다.

이 계층을 사용하려면 Deep Learning Toolbox™가 필요합니다.

생성

설명

예제

layer = wordEmbeddingLayer(dimension,numWords)는 단어 임베딩 계층을 만들고 임베딩 차원과 단어집 크기를 지정합니다.

예제

layer = wordEmbeddingLayer(dimension,numWords,Name,Value)는 하나 이상의 이름-값 쌍을 사용하여 속성(선택 사항)을 설정합니다. 각 속성 이름을 작은따옴표로 묶습니다.

속성

모두 확장

단어 임베딩

단어 임베딩의 차원으로, 양의 정수로 지정됩니다.

예: 300

모델 내 단어 개수로, 양의 정수로 지정됩니다. 훈련 데이터에 포함된 고유한 단어의 개수가 NumWords보다 클 경우 계층은 단어집에 없는 단어를 동일한 벡터에 매핑합니다.

파라미터 및 초기화

가중치를 초기화하는 함수로, 다음 중 하나로 지정됩니다.

  • 'narrow-normal' – 평균이 0이고 표준편차가 0.01인 정규분포에서 독립적으로 샘플링하여 가중치를 초기화합니다.

  • 'glorot' – Glorot 이니셜라이저[1](Xavier 이니셜라이저라고도 함)를 사용하여 가중치를 초기화합니다. Glorot 이니셜라이저는 평균이 0이고 분산이 2/(numIn + numOut)인 균등분포에서 독립적으로 샘플링합니다. 여기서 numIn = NumWords + 1이고 numOut = Dimension입니다.

  • 'he' – He 이니셜라이저[2]를 사용하여 가중치를 초기화합니다. He 이니셜라이저는 평균이 0이고 분산이 2/numIn인 정규분포에서 샘플링합니다. 여기서 numIn = NumWords + 1입니다.

  • 'orthogonal' – 단위 정규분포에서 샘플링된 확률 행렬 Z에 대한 Z = QR의 QR 분해로 주어지는 직교 행렬 Q를 사용하여 입력 가중치를 초기화합니다. [3]

  • 'zeros' – 가중치를 0으로 초기화합니다.

  • 'ones' – 가중치를 1로 초기화합니다.

  • 함수 핸들 – 사용자 지정 함수를 사용하여 가중치를 초기화합니다. 함수 핸들을 지정할 경우, 함수는 weights = func(sz) 형식이 되어야 합니다. 여기서 sz는 가중치의 크기입니다.

계층은 Weights 속성이 비어 있는 경우에만 가중치를 초기화합니다.

데이터형: char | string | function_handle

계층 가중치로, Dimension×NumWords 배열 또는 Dimension×(NumWords+1) 배열로 지정됩니다.

WeightsDimension×NumWords 배열인 경우, trainNetwork 함수를 사용하여 신경망을 훈련시키거나 dlnetwork 객체를 초기화할 때 단어집에 없는 단어를 입력하기 위한 열이 자동으로 추가됩니다.

입력 정수 iNumWords보다 작거나 같은 경우 계층은 벡터 Weights(:,i)를 출력합니다. 그 외의 경우, 계층은 벡터 Weights(:,NumWords+1)을 출력합니다.

학습률 및 정규화

가중치에 대한 학습률 인자로, 음이 아닌 스칼라로 지정됩니다.

이 인자에 전역 학습률을 곱하여 이 계층의 가중치에 대한 학습률이 결정됩니다. 예를 들어, WeightLearnRateFactor2인 경우, 이 계층의 가중치에 대한 학습률은 현재 전역 학습률의 2배입니다. 전역 학습률은 사용자가 trainingOptions (Deep Learning Toolbox) 함수를 사용하여 지정한 설정을 기준으로 결정됩니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

가중치에 대한 L2 정규화 인자로, 음이 아닌 스칼라로 지정됩니다.

이 인자에 전역 L2 정규화 인자를 곱하여 이 계층의 가중치에 대한 L2 정규화가 결정됩니다. 예를 들어, WeightL2Factor2인 경우, 이 계층의 가중치에 대한 L2 정규화는 전역 L2 정규화 인자의 2배입니다. 전역 L2 정규화 인자는 trainingOptions (Deep Learning Toolbox) 함수를 사용하여 지정할 수 있습니다.

데이터형: single | double | int8 | int16 | int32 | int64 | uint8 | uint16 | uint32 | uint64

계층

계층 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다. Layer 배열 입력값의 경우, trainNetwork, assembleNetwork, layerGraph, dlnetwork 함수는 계층에 이름 ''을 자동으로 할당합니다.

데이터형: 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 함수를 사용하여 계층 가중치를 추출하고 wordEmbeddingLayer 함수의 'Weights' 이름-값 쌍을 설정하십시오. 단어 임베딩 계층에는 단어 벡터의 열이 필요하기 때문에 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] Glorot, Xavier, and Yoshua Bengio. "Understanding the Difficulty of Training Deep Feedforward Neural Networks." In Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics, 249–356. Sardinia, Italy: AISTATS, 2010.

[2] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. "Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification." In Proceedings of the 2015 IEEE International Conference on Computer Vision, 1026–1034. Washington, DC: IEEE Computer Vision Society, 2015.

[3] Saxe, Andrew M., James L. McClelland, and Surya Ganguli. "Exact solutions to the nonlinear dynamics of learning in deep linear neural networks." arXiv preprint arXiv:1312.6120 (2013).

확장 기능

GPU 코드 생성
GPU Coder™를 사용하여 NVIDIA® GPU용 CUDA® 코드를 생성할 수 있습니다.

버전 내역

R2018b에 개발됨