Main Content

wordEmbeddingLayer

딥러닝 신경망의 단어 임베딩 계층

설명

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

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

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

생성

설명

예제

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

예제

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

속성

모두 확장

단어 임베딩

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

예: 300

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

R2023b 이후

OOV(단어집에 없는 단어) 처리 모드로, 다음 값 중 하나로 지정됩니다.

  • "map-to-last" — OOV(단어집에 없는 단어)를 Weights의 마지막 임베딩 벡터에 매핑합니다.

  • "error" — 계층이 OOV(단어집에 없는 단어)를 받을 때 오류를 발생시킵니다. 해당 단어집에 OOV(단어집에 없는 단어) 토큰이 이미 있는 모델(예: BERT)에 대해 이 옵션을 사용하십시오.

파라미터 및 초기화

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

  • '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 객체를 초기화할 때 OOV(단어집에 없는 단어)를 입력하기 위한 열이 자동으로 추가됩니다.

입력 정수 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 배열 입력값의 경우, trainnet (Deep Learning Toolbox) 함수와 dlnetwork (Deep Learning Toolbox) 함수는 이름이 ""인 계층에 자동으로 이름을 할당합니다.

WordEmbeddingLayer 객체는 이 속성을 문자형 벡터로 저장합니다.

데이터형: char | string

읽기 전용 속성입니다.

계층의 입력값 개수로, 1로 반환됩니다. 이 계층은 단일 입력값만 받습니다.

데이터형: double

읽기 전용 속성입니다.

입력값 이름으로, {'in'}으로 반환됩니다. 이 계층은 단일 입력값만 받습니다.

데이터형: cell

읽기 전용 속성입니다.

계층의 출력값 개수로, 1로 반환됩니다. 이 계층은 단일 출력값만 가집니다.

데이터형: double

읽기 전용 속성입니다.

출력값 이름으로, {'out'}으로 반환됩니다. 이 계층은 단일 출력값만 가집니다.

데이터형: cell

예제

모두 축소

임베딩 차원이 300이고 5000개의 단어를 갖는 단어 임베딩 계층을 만듭니다.

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

         Name: ''
      OOVMode: 'map-to-last'

   Hyperparameters
    Dimension: 300
     NumWords: 5000

   Learnable Parameters
      Weights: []

Use properties method to see a list of 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]
layers = 
  5x1 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

사전 훈련된 단어 임베딩의 가중치를 사용하여 딥러닝 신경망에서 단어 임베딩 계층을 초기화하려면, 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. https://proceedings.mlr.press/v9/glorot10a/glorot10a.pdf

[2] He, Kaiming, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. "Delving Deep into Rectifiers: Surpassing Human-Level Performance on ImageNet Classification." In 2015 IEEE International Conference on Computer Vision (ICCV), 1026–34. Santiago, Chile: IEEE, 2015. https://doi.org/10.1109/ICCV.2015.123

[3] Saxe, Andrew M., James L. McClelland, and Surya Ganguli. "Exact Solutions to the Nonlinear Dynamics of Learning in Deep Linear Neural Networks.” Preprint, submitted February 19, 2014. https://arxiv.org/abs/1312.6120.

확장 기능

버전 내역

R2018b에 개발됨

모두 확장