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+1) 배열로 지정됩니다.

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

학습률 및 정규화

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

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

예: 2

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

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

예: 2

계층

계층 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다. 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 함수를 사용하여 계층 가중치를 추출하고 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에 개발됨