Parametri E costanti

ParameterTensor{}

Crea un scalare, un vettore, una matrice o un tensore di parametri appresi.

ParameterTensor {shape,
                 init='uniform'/*|heNormal|...*/, initOutputRank=1, initValueScale=1.0,
                 randomSeed=-1,
                 initValue=0.0, initFromFilePath='',
                 learningRateMultiplier=1.0}

Parametri

  • shape: forma (dimensioni) del parametro come matrice. Ad esempio, (13:42) per creare una matrice con 13 righe e 42 colonne. Per alcune operazioni, le dimensioni specificate come 0 vengono dedotte automaticamente (vedere qui)
  • init (impostazione predefinita 'uniform'): specifica l'inizializzazione casuale, ad esempio init='heNormal'(vedere qui)
  • initOutputRank (impostazione predefinita 1): specifica il numero di assi di fanout iniziali. Se negativo, -numero di assi finali di fan-out (vedere qui)
  • initValueScale (impostazione predefinita 1): fattore di ridimensionamento aggiuntivo applicato ai valori di inizializzazione casuale
  • randomSeed (impostazione predefinita -1): se positivo, usare questo seed casuale per l'inizializzazione casuale. Se negativo, usare un contatore che viene aumentato per ogni ParameterTensor{}
  • initValue: specifica l'inizializzazione con un valore costante, ad esempio initValue=0
  • initFromFilePath: specifica l'inizializzazione caricando i valori iniziali da un file. Ad esempio initFromFilePath="my_init_vals.txt"
  • learningRateMultiplier: la frequenza di apprendimento del sistema verrà ridimensionata da questa (0 per disabilitare l'apprendimento ) (vedere qui)

Valore restituito

Un tensore di parametri appresi.

Descrizione

Questa funzione factory crea un oggetto scalare, vettore, matrice o tensore di parametri appresi, ovvero un tensore riconosciuto dall'azione come parametri che devono essere aggiornati durante il "train" training.

I valori verranno inizializzati, a seconda del parametro facoltativo specificato, a

  • numeri casuali, se init viene specificato;
  • una costante se initValue viene specificata; o
  • un tensore letto da un file di input esterno se initFromFilePath specificato. Il valore predefinito è init="uniform".

Per creare un scalare, un vettore, una matrice o un tensore con la classificazione>2, passare quanto segue come shape parametro:

  • (1) per un scalare;
  • (M) per un vettore di colonna con M elementi;
  • (1:N) per un vettore di righe con N elementi. I vettori di riga sono matrici di una riga;
  • (M:N) per una matrice con N righe e I colonne;
  • (I:J:K...) per un tensore di rango>arbitrario 2 (nota: il rango massimo consentito è 12); e
  • (W:H:C) per un tensore che corrisponde alle dimensioni di un'immagine [W x H] con C canali.

Inferenza automatica delle dimensioni

Quando un ParameterTensor oggetto viene usato per i pesi come input immediato di operazioni specifiche, è consentito specificare alcune dimensioni come Inferred. Ad esempio, il prodottoParameterTensor{42:Inferred} * x) matrice dedurrà automaticamente la seconda dimensione come uguale alla dimensione di x.

Questo è estremamente utile per gli input di livelli, perché libera il codice BrainScript dell'utente dall'onere di passare intorno alle dimensioni di input. Inoltre, in alcune situazioni è molto complesso determinare le dimensioni di input precise di un livello, ad esempio per il primo livello completamente connesso sopra una piramide di combinazioni di convoluzione/pooling senza riempimento, dove ogni operazione di convoluzione e pooling può eliminare righe o colonne di pixel di limite e scalare le dimensioni.

Questa funzionalità consente di specificare i livelli predefiniti di CNTK solo dalla dimensione di output (ad esempio DenseLayer{1024}).

Inizializzazione casuale

L'inizializzazione init casuale viene selezionata dal parametro, che sceglie tra distribuzione uniforme e normale, in cui la deviazione di intervallo/standard viene calcolata come funzione di fan-in e fan-out:

valore di init distribuzione intervallo/deviazione standard
'heNormal' normale sqrt (2/fanIn)
'heUniform' uniform sqrt (6/fanIn)
'glorotNormal' normale sqrt (2/ (fanIn+fanOut))
'glorotUniform' uniform sqrt (6/ (fanIn+fanOut))
'saverio' uniform sqrt (3/fanIn)
'uniforme' uniform 1/20
'gaussian' normale sqrt (0,04/fanIn)
'zero' n/d 0

(Dove zero è un'alternativa a volte conveniente per specificare initValue=0.) Per la distribuzione uniforme, i parametri verranno inizializzati uniformemente in [intervallo, intervallo]; per la distribuzione normale, la media è sempre zero.

Si noti che il valore predefinito per init è quando si uniform usa ParameterTensor{} direttamente. Tuttavia, il valore predefinito è glorotUniform per i livelli che contengono parametri all'interno, ad esempio DenseLayer{} e ConvolutionalLayer{}.

Fan-in e fan-out per l'inizializzazione casuale

L'inizializzazione casuale presuppone che i parametri facciano parte di una forma di operazione di tipo matrix-product che ha una ventola ben definita e un fan-out, che vengono usati per determinare il ridimensionamento dei valori casuali per ogni tabella precedente. Per impostazione predefinita, il primo asse viene considerato fan-out e gli assi rimanenti sono la semantica corrispondente del prodotto matrice regolare.

Il parametro initOutputRank facoltativo può essere usato per specificare il numero di assi iniziali che devono essere considerati fan-out. Ad esempio, per un prodotto matrice nell'interpretazione del tensore esteso di CNTK che esegue il mapping di un [K]vettore x -dimensionale a un [I x J]oggetto rank-2 -dimensionale può essere scritto come Times (W, x, outputRank=2), dove W ha la forma [I x J x K]. In questo caso, initOutputRank=2 specifica che nel ridimensionare i valori di inizializzazione casuale, la ventola è I*J e la ventola in K.

I valori negativi per initOutputRank indicare che gli assi della ventola sono assi finali. Ad esempio, il kernel del filtro dell'oggetto e l'operazione sottostante per una tipica configurazione di ConvolutionalLayer{} elaborazione delle immagini ha una forma [W x H x C x K], dove K è la ventola, mentre la ventola è W*H*C.Convolution() Questo valore viene specificato da initOutputRank=-1.

Lettura dei valori iniziali dai file

I valori iniziali possono essere letti da un file di testo. A tale scopo, passare un nome percorso per il parametro initFromFilePathfacoltativo . È previsto che il file di testo sia costituito da una riga per ogni riga, costituita da numeri separati dallo spazio, una per colonna. Le dimensioni di riga e colonna nel file devono corrispondere shapea .

Frequenza di apprendimento specifica dei parametri

I tassi di apprendimento specifici dei parametri possono essere realizzati con il parametro facoltativo learningRateMultiplier . Questo fattore viene moltiplicato con la frequenza di apprendimento effettiva durante l'esecuzione degli aggiornamenti dei parametri. Ad esempio, se specificato come 0, il parametro non verrà aggiornato, è costante.

Esempio

Matrice di parametri regolare che verrà inizializzata come heUniform (il valore predefinito sarà heNormal):

W = ParameterTensor {(outDim:inDim), init=`heUniform`}

Parametro di distorsione regolare che verrà inizializzato come zero:

b = ParameterTensor {outDim, initValue=0}

Matrice di incorporamento che deve essere letto da un file e mantenuta costante:

E = ParameterTensor {(embedDim:vocabSize),
                     initFromFilePath='./EmbeddingMatrix.txt',
                     learningRateMultiplier=0}  # prevents learning

Parametro di pregiudizio della dimensione completa di un'immagine [width x height]-size con numChannels piani di colore:

bFull = ParameterTensor {(width:height:numChannels)}

Costante{}

Creare un tensore costante.

Constant {scalarValue, rows=1, cols=1}

Parametri

  • scalarValue: valore di questa costante
  • rows (impostazione predefinita: 1): numero di righe, se la costante non è scalare
  • cols (impostazione predefinita: 1): numero di regole di confronto, se la costante non è una scalare

Valore restituito

Costante, un oggetto scalare o rank-1 o rank-2 della dimensione [rows x cols], in cui tutti gli elementi vengono riempiti con scalarValue.

Descrizione

Valore costante. Può essere un oggetto scalare o un oggetto rank-1 (vettore) o un oggetto rank-2 (matrice) inizializzato con un singolo valore (ad esempio 0). Si noti che, poiché per le costanti vettoriali e matrice tutti i valori sono identici, le costanti usate in combinazione con operazioni a livello di elemento possono spesso essere specificate come scalari, sfruttando il vantaggio della trasmissione.

Nota di implementazione:

Un Constant() oggetto è con learningRateMultiplier=0ParameterTensor{} .

Esempio

Interpolazione tra due valori con peso alpha interpolazione nell'intervallo 0..1 ("multiplexer soft"):

SoftMUX (x, y, alpha) = Constant (1-alpha) .* x + Constant (alpha) .* y

Perdita di scompimento (vedere qui):

HammingLoss (y, p) = ReduceSum (BS.Boolean.Xor (y, Greater (p, Constant(0.5))))
hl = HammingLoss (multiLabels, probabilities)