이 페이지의 최신 내용은 아직 번역되지 않았습니다. 최신 내용은 영문으로 볼 수 있습니다.

bilstmLayer

양방향 장단기 기억(BiLSTM) 계층

설명

BiLSTM(양방향 장단기 기억) 계층은 시계열 또는 시퀀스 데이터의 시간 스텝 간의 양방향 장기 종속성을 학습합니다. 이러한 종속성은 네트워크가 각 시간 스텝에서 전체 시계열로부터 학습하도록 하려는 경우에 유용할 수 있습니다.

생성

설명

예제

layer = bilstmLayer(numHiddenUnits)는 양방향 LSTM 계층을 만들고 NumHiddenUnits 속성을 설정합니다.

예제

layer = bilstmLayer(numHiddenUnits,Name,Value)는 하나 이상의 이름-값 쌍의 인수를 사용하여 추가로 OutputMode, 활성화, 파라미터 및 초기화, 학습률 및 정규화, Name 속성을 설정합니다. 여러 개의 이름-값 쌍 인수를 지정할 수 있습니다. 각 속성 이름을 따옴표로 묶습니다.

속성

모두 확장

BiLSTM

은닉 유닛의 개수(은닉 크기라고도 함)로, 양의 정수로 지정됩니다.

은닉 유닛의 개수는 각 시간 스텝 사이에(은닉 상태) 기억된 정보의 양에 대응됩니다. 은닉 상태는 시퀀스 길이와 관계없이 모든 이전 시간 스텝의 정보를 포함할 수 있습니다. 은닉 유닛의 길이가 너무 길면 계층이 훈련 데이터에 과적합될 수 있습니다. 이 값은 몇 십에서 몇 천 사이일 수 있습니다.

은닉 상태는 한 회의 반복에서 처리되는 시간 스텝의 개수를 제한하지 않습니다. 훈련을 위해 시퀀스를 더 작은 크기의 시퀀스로 분할하려면 trainingOptions에서 'SequenceLength' 옵션을 사용하십시오.

예: 200

출력값 형식으로, 다음 중 하나로 지정됩니다.

  • 'sequence' – 전체 시퀀스를 출력합니다.

  • 'last' – 시퀀스의 마지막 시간 스텝을 출력합니다.

입력 크기로, 양의 정수 또는 'auto'로 지정됩니다. InputSize'auto'이면, 훈련 시점에 자동으로 입력 크기가 할당됩니다.

예: 100

활성화

셀과 은닉 상태를 업데이트하는 활성화 함수로, 다음 중 하나로 지정됩니다.

  • 'tanh' – 쌍곡탄젠트 함수(tanh)를 사용합니다.

  • 'softsign' – 소프트사인 함수 softsign(x)=x1+|x|를 사용합니다.

이 계층은 셀과 은닉 상태를 업데이트하는 계산에서 이 옵션을 함수 σc로 사용합니다. LSTM 계층에서 활성화 함수가 사용되는 방식에 대한 자세한 내용은 장단기 기억 계층 항목을 참조하십시오.

게이트에 적용할 활성화 함수로, 다음 중 하나로 지정됩니다.

  • 'sigmoid' – 시그모이드 함수 σ(x)=(1+ex)1을 사용합니다.

  • 'hard-sigmoid' – 다음과 같은 하드 시그모이드 함수를 사용합니다.

    σ(x)={00.2x+0.51if x<2.5if2.5x2.5if x>2.5.

이 계층은 입력값, 출력값, 망각 게이트 계산에서 이 옵션을 함수 σg로 사용합니다. LSTM 계층에서 활성화 함수가 사용되는 방식에 대한 자세한 내용은 장단기 기억 계층 항목을 참조하십시오.

상태

셀 상태의 초기값으로, 2*NumHiddenUnitsx1 숫자형 벡터로 지정됩니다. 이 값은 시간 스텝 0에서의 셀 상태입니다.

이 속성을 설정한 후에 resetState 함수를 호출하면 셀 상태가 이 초기값으로 다시 설정됩니다.

은닉 상태의 초기값으로, 2*NumHiddenUnitsx1 숫자형 벡터로 지정됩니다. 이 값은 시간 스텝 0에서의 은닉 상태입니다.

이 속성을 설정한 후에 resetState 함수를 호출하면 은닉 상태가 이 초기값으로 다시 설정됩니다.

파라미터 및 초기화

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

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

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

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

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

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

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

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

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

데이터형: char | string | function_handle

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

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

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

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

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

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

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

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

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

데이터형: char | string | function_handle

편향을 초기화하는 함수로, 다음 중 하나로 지정됩니다.

  • 'unit-forget-gate' – 망각 게이트 편향을 1로, 나머지 편향을 0으로 초기화합니다.

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

  • 'ones' – 편향을 1로 초기화합니다.

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

계층은 Bias 속성이 비어 있는 경우에만 편향을 초기화합니다.

데이터형: char | string | function_handle

입력 가중치로, 행렬로 지정됩니다.

입력 가중치 행렬은 양방향 LSTM 계층의 구성요소(게이트)에 대한 8개의 입력 가중치 행렬을 결합한 것입니다. 8개의 행렬은 다음과 같은 순서로 세로로 결합됩니다.

  1. 입력 게이트(순방향)

  2. 망각 게이트(순방향)

  3. 셀 후보(순방향)

  4. 출력 게이트(순방향)

  5. 입력 게이트(역방향)

  6. 망각 게이트(역방향)

  7. 셀 후보(역방향)

  8. 출력 게이트(역방향)

입력 가중치는 학습 가능한 파라미터입니다. 네트워크를 훈련시킬 때 계층의 InputWeights가 비어 있지 않으면 trainNetworkInputWeights 속성을 초기값으로 사용합니다. InputWeights가 비어 있으면 trainNetworkInputWeightsInitializer로 지정된 이니셜라이저를 사용합니다.

훈련 시점에 InputWeights8*NumHiddenUnitsxInputSize 행렬입니다.

순환 가중치로, 행렬로 지정됩니다.

순환 가중치 행렬은 양방향 LSTM 계층의 구성요소(게이트)에 대한 8개의 순환 가중치 행렬을 결합한 것입니다. 8개의 행렬은 다음과 같은 순서로 세로로 결합됩니다.

  1. 입력 게이트(순방향)

  2. 망각 게이트(순방향)

  3. 셀 후보(순방향)

  4. 출력 게이트(순방향)

  5. 입력 게이트(역방향)

  6. 망각 게이트(역방향)

  7. 셀 후보(역방향)

  8. 출력 게이트(역방향)

순환 가중치는 학습 가능한 파라미터입니다. 네트워크를 훈련시킬 때 계층의 RecurrentWeights가 비어 있지 않으면 trainNetworkRecurrentWeights 속성을 초기값으로 사용합니다. RecurrentWeights가 비어 있으면 trainNetworkRecurrentWeightsInitializer로 지정된 이니셜라이저를 사용합니다.

훈련 시점에 RecurrentWeights8*NumHiddenUnitsxNumHiddenUnits 행렬입니다.

계층 편향으로, 숫자형 벡터로 지정됩니다.

편향 벡터는 양방향 LSTM 계층의 구성요소(게이트)에 대한 8개의 편향 벡터를 결합한 것입니다. 8개의 벡터는 다음과 같은 순서로 세로로 결합됩니다.

  1. 입력 게이트(순방향)

  2. 망각 게이트(순방향)

  3. 셀 후보(순방향)

  4. 출력 게이트(순방향)

  5. 입력 게이트(역방향)

  6. 망각 게이트(역방향)

  7. 셀 후보(역방향)

  8. 출력 게이트(역방향)

계층 편향은 학습 가능한 파라미터입니다. 네트워크를 훈련시킬 때 Bias가 비어 있지 않으면 trainNetworkBias 속성을 초기값으로 사용합니다. Bias가 비어 있으면 trainNetworkBiasInitializer로 지정된 이니셜라이저를 사용합니다.

훈련 시점에 Bias8*NumHiddenUnitsx1 숫자형 벡터입니다.

학습률 및 정규화

입력 가중치에 대한 학습률 인자로, 숫자형 스칼라 또는 1x8 숫자형 벡터로 지정됩니다.

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

InputWeights에 있는 4개의 개별 행렬에 대한 학습률 인자 값을 제어하려면 1x8 벡터를 할당해야 합니다. 벡터의 각 요소는 다음과 같은 게이트의 학습률 인자에 해당합니다.

  1. 입력 게이트(순방향)

  2. 망각 게이트(순방향)

  3. 셀 후보(순방향)

  4. 출력 게이트(순방향)

  5. 입력 게이트(역방향)

  6. 망각 게이트(역방향)

  7. 셀 후보(역방향)

  8. 출력 게이트(역방향)

모든 행렬에 동일한 값을 지정하려면 음이 아닌 스칼라를 지정하십시오.

예: 0.1

순환 가중치에 대한 학습률 인자로, 숫자형 스칼라 또는 1x8 숫자형 벡터로 지정됩니다.

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

RecurrentWeights에 있는 4개의 개별 행렬에 대한 학습률 값을 제어하려면 1x8 벡터를 할당해야 합니다. 벡터의 각 요소는 다음과 같은 게이트의 학습률 인자에 해당합니다.

  1. 입력 게이트(순방향)

  2. 망각 게이트(순방향)

  3. 셀 후보(순방향)

  4. 출력 게이트(순방향)

  5. 입력 게이트(역방향)

  6. 망각 게이트(역방향)

  7. 셀 후보(역방향)

  8. 출력 게이트(역방향)

모든 행렬에 동일한 값을 지정하려면 음이 아닌 스칼라를 지정하십시오.

예: 0.1

예: [1 2 1 1 1 2 1 1]

편향에 대한 학습률 인자로, 음이 아닌 스칼라 또는 1x8 숫자형 벡터로 지정됩니다.

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

Bias에 있는 4개의 개별 행렬에 대한 학습률 인자 값을 제어하려면 1x8 벡터를 할당해야 합니다. 벡터의 각 요소는 다음과 같은 게이트의 학습률 인자에 해당합니다.

  1. 입력 게이트(순방향)

  2. 망각 게이트(순방향)

  3. 셀 후보(순방향)

  4. 출력 게이트(순방향)

  5. 입력 게이트(역방향)

  6. 망각 게이트(역방향)

  7. 셀 후보(역방향)

  8. 출력 게이트(역방향)

모든 행렬에 동일한 값을 지정하려면 음이 아닌 스칼라를 지정하십시오.

예: 2

예: [1 2 1 1 1 2 1 1]

입력 가중치에 대한 L2 정규화 인자로, 숫자형 스칼라 또는 1x8 숫자형 벡터로 지정됩니다.

이 인자에 전역 L2 정규화 인자를 곱하여 계층의 입력 가중치에 대한 L2 정규화 인자가 결정됩니다. 예를 들어, InputWeightsL2Factor가 2인 경우, 계층의 입력 가중치에 대한 L2 정규화 인자는 현재 전역 L2 정규화 인자의 2배입니다. trainingOptions 함수로 지정된 설정을 기준으로 L2 정규화 인자가 결정됩니다.

InputWeights에 있는 4개의 개별 행렬에 대한 L2 정규화 인자 값을 제어하려면 1x8 벡터를 할당해야 합니다. 벡터의 각 요소는 다음과 같은 게이트의 L2 정규화 인자에 해당합니다.

  1. 입력 게이트(순방향)

  2. 망각 게이트(순방향)

  3. 셀 후보(순방향)

  4. 출력 게이트(순방향)

  5. 입력 게이트(역방향)

  6. 망각 게이트(역방향)

  7. 셀 후보(역방향)

  8. 출력 게이트(역방향)

모든 행렬에 동일한 값을 지정하려면 음이 아닌 스칼라를 지정하십시오.

예: 0.1

예: [1 2 1 1 1 2 1 1]

순환 가중치에 대한 L2 정규화 인자로, 숫자형 스칼라 또는 1x8 숫자형 벡터로 지정됩니다.

이 인자에 전역 L2 정규화 인자를 곱하여 계층의 순환 가중치에 대한 L2 정규화 인자가 결정됩니다. 예를 들어, RecurrentWeightsL2Factor가 2인 경우, 계층의 순환 가중치에 대한 L2 정규화 인자는 현재 전역 L2 정규화 인자의 2배입니다. trainingOptions 함수로 지정된 설정을 기준으로 L2 정규화 인자가 결정됩니다.

RecurrentWeights에 있는 4개의 개별 행렬에 대한 L2 정규화 인자 값을 제어하려면 1x8 벡터를 할당해야 합니다. 벡터의 각 요소는 다음과 같은 게이트의 L2 정규화 인자에 해당합니다.

  1. 입력 게이트(순방향)

  2. 망각 게이트(순방향)

  3. 셀 후보(순방향)

  4. 출력 게이트(순방향)

  5. 입력 게이트(역방향)

  6. 망각 게이트(역방향)

  7. 셀 후보(역방향)

  8. 출력 게이트(역방향)

모든 행렬에 동일한 값을 지정하려면 음이 아닌 스칼라를 지정하십시오.

예: 0.1

예: [1 2 1 1 1 2 1 1]

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

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

Bias에 있는 4개의 개별 행렬에 대한 L2 정규화 인자 값을 제어하려면 1x8 벡터를 할당해야 합니다. 벡터의 각 요소는 다음과 같은 게이트의 L2 정규화 인자에 해당합니다.

  1. 입력 게이트(순방향)

  2. 망각 게이트(순방향)

  3. 셀 후보(순방향)

  4. 출력 게이트(순방향)

  5. 입력 게이트(역방향)

  6. 망각 게이트(역방향)

  7. 셀 후보(역방향)

  8. 출력 게이트(역방향)

모든 행렬에 동일한 값을 지정하려면 음이 아닌 스칼라를 지정하십시오.

예: 2

예: [1 2 1 1 1 2 1 1]

계층

계층 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다. Name''로 설정하면, 훈련 시점에 자동으로 이름이 할당됩니다.

데이터형: char | string

계층의 입력값 개수. 이 계층은 단일 입력값만 받습니다.

데이터형: double

계층의 입력값 이름. 이 계층은 단일 입력값만 받습니다.

데이터형: cell

계층의 출력값 개수. 이 계층은 단일 출력값만 가집니다.

데이터형: double

계층의 출력값 이름. 이 계층은 단일 출력값만 가집니다.

데이터형: cell

예제

모두 축소

이름이 'bilstm1'이고 100개의 은닉 유닛을 갖는 양방향 LSTM 계층을 만듭니다.

layer = bilstmLayer(100,'Name','bilstm1')
layer = 
  BiLSTMLayer with properties:

                       Name: 'bilstm1'

   Hyperparameters
                  InputSize: 'auto'
             NumHiddenUnits: 100
                 OutputMode: 'sequence'
    StateActivationFunction: 'tanh'
     GateActivationFunction: 'sigmoid'

   Learnable Parameters
               InputWeights: []
           RecurrentWeights: []
                       Bias: []

   State Parameters
                HiddenState: []
                  CellState: []

  Show all properties

Layer 배열에 양방향 LSTM 계층을 포함시킵니다.

inputSize = 12;
numHiddenUnits = 100;
numClasses = 9;

layers = [ ...
    sequenceInputLayer(inputSize)
    bilstmLayer(numHiddenUnits)
    fullyConnectedLayer(numClasses)
    softmaxLayer
    classificationLayer]
layers = 
  5x1 Layer array with layers:

     1   ''   Sequence Input          Sequence input with 12 dimensions
     2   ''   BiLSTM                  BiLSTM with 100 hidden units
     3   ''   Fully Connected         9 fully connected layer
     4   ''   Softmax                 softmax
     5   ''   Classification Output   crossentropyex

호환성 관련 고려 사항

모두 확장

R2019a에서 동작이 변경됨

R2019a에서 동작이 변경됨

참고 문헌

[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, pp. 249-256. 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 IEEE international conference on computer vision, pp. 1026-1034. 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).

R2018a에 개발됨