최적화된 RNN 스택
하나 이상의 되풀이 네트워크 계층으로 최적화된 CuDNN5 RNN 스택을 구현합니다.
OptimizedRNNStack (weights, input,
hiddenDims, numLayers = 1,
bidirectional = false,
recurrentOp='lstm')
매개 변수
weights
: 모든 모델 매개 변수를 단일 행렬로 포함하는 하나의 가중치 매트릭스입니다. 아래의 차원 유추, cf. 설명을 사용합니다.input
: 하나 이상의 되풀이 네트워크 스택을 적용할 데이터입니다. 시퀀스여야 하며 스파스일 수 없습니다.hiddenDims
: 각 계층의 숨겨진 상태 차원 및 양방향인 경우 각 두 방향의 차원numLayers
(기본값: 1): 레이어 수bidirectional
(기본값: false): true이면 모델은 양방향입니다.recurrentOp
(기본값:lstm
): RNN 유형을 선택합니다. 허용되는 값:lstm
,gru
,rnnTanh
rnnReLU
Description
이 함수는 하나 이상의 되풀이 네트워크 계층 스택을 매우 효율적으로 구현하는 CuDNN5 RNN에 대한 액세스를 제공합니다. BrainScript에서 계산 네트워크로서의 명시적 구현과 비교하여 5의 순서로 속도 향상을 관찰했습니다. BrainScript 구현만큼 유연하지는 않지만 학습 시간의 속도 향상은 손상될 만한 가치가 있습니다(그러나 이러한 모델은 GPU가 있는 컴퓨터에만 배포할 수 있음).
네트워크는 유니 또는 양방향일 수 있으며 다음과 같은 종류(매개 변수)recurrentOp
일 수 있습니다.
lstm
: 장기 메모리(Hochreiter 및 Schmidhuber)gru
: 제어된 되풀이 단위rnnTanh
: 비선형이 있는tanh
일반 RNNrnnReLU
: 정류된 선형이 아닌 선형이 있는 일반 RNN
모든 가중치는 모든 매개 변수를 보유하는 데 필요한 만큼의 행과 열이 있어야 hiddenDims
하는 단일 행렬에 포함됩니다.
이는 결정하기가 번거로울 수 있으므로 차원을 자동으로 유추 할 수 있습니다.
임의 초기화가 올바른 팬인을 사용하는지 확인하려면 다음을 지정합니다 initOutputRank=-1
.
W = ParameterTensor {(Inferred:Inferred), initOutputRank=-1}
작업을 사용하는 lstm
경우 가중치를 만드는 데 사용할 기본 형식을 사용하는 RecurrentLSTMLayerStack{}
것이 좋습니다.
GPU에 대한 교육, CPU에 배포
현재 GPU가 없는 온 시스템으로 학습된 RNN을 OptimizedRNNStack()
배포할 수 없습니다.
CuDNN5 RNN 구현을 정확하게 에뮬레이트하는 CPU 호환 네이티브 BrainScript 식으로 노드를 대체하는 OptimizedRNNStack()
학습 후 모델 편집 작업을 수행할 수 있다고 생각합니다.
예제
계층당 숨겨진 상태 차원과 방향이 512인 양방향 LSTM의 숨겨진 3개 계층으로 구성된 음성 인식 모델:
features = Input {40}
W = ParameterTensor {(Inferred:Inferred), initOutputRank=-1, initValueScale=1/10}
h = OptimizedRNNStack (W, features, 512, numLayers=3, bidirectional=true)
p = DenseLayer {9000, activation=Softmax, init='heUniform', initValueScale=1/3}