Freigeben über


Parameter und Konstanten

ParameterTensor{}

Erstellt einen Skalar, Vektor, Matrix oder Tensor von lernbaren Parametern.

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

Parameter

  • shape: Form (Dimensionen) des Parameters als Array. So erstellen Sie z. B. (13:42) eine Matrix mit 13 Zeilen und 42 Spalten. Für einige Vorgänge werden Dimensionen, die als 0 angegeben sind, automatisch abgeleitet (siehe hier)
  • init (Standard 'uniform'): Gibt zufällige Initialisierung an, z. B. init='heNormal'(siehe hier)
  • initOutputRank (Standard 1): Gibt die Anzahl der führenden Fan-Out-Achsen an. Wenn negativ, -Anzahl der nachgestellten Fan-Out-Achsen (siehe hier)
  • initValueScale (Standard 1): zusätzlicher Skalierungsfaktor, der auf zufällige Initialisierungswerte angewendet wird
  • randomSeed (Standard -1): Wenn positiv, verwenden Sie diesen zufälligen Seed für die zufällige Initialisierung. Wenn negativ, verwenden Sie einen Zähler, der für jede Person erhöht wird ParameterTensor{}
  • initValue: gibt die Initialisierung mit einem Konstantenwert an, z. B. initValue=0
  • initFromFilePath: gibt die Initialisierung an, indem initiale Werte aus einer Datei geladen werden. Beispiel: initFromFilePath="my_init_vals.txt"
  • learningRateMultiplier: System learning rate wird von diesem (0 zum Deaktivieren des Lernens) skaliert (siehe hier)

Rückgabewert

Ein Tensor von lernbaren Parametern.

BESCHREIBUNG

Diese Fabrikfunktion erstellt einen Skalar, Vektor, Matrix oder Tensor von lernbaren Parametern, also einen Tensor, der von der Aktion als Parameter erkannt wird, die während der "train" Schulung aktualisiert werden sollen.

Die Werte werden je nach angabe des optionalen Parameters initialisiert.

  • Zufällige Zahlen, wenn init angegeben;
  • eine Konstante, wenn initValue angegeben wird; oder
  • ein Tensor, der von einer externen Eingabedatei gelesen wird, falls initFromFilePath angegeben. Der Standardwert ist init="uniform".

Um einen Skalar, Vektor, Matrix oder Tensor mit Rang>2 zu erstellen, übergeben Sie folgendes als shape Parameter:

  • (1) für einen Skalar;
  • (M) für einen Spaltenvektor mit M Elementen;
  • (1:N) für einen Zeilenvektor mit N Elementen. Zeilenvektoren sind Einezeilenmatrizen;
  • (M:N) für eine Matrix mit N Zeilen und I Spalten;
  • (I:J:K...) für einen Tensor beliebiger Rang>2 (Hinweis: Die maximale zulässige Rangfolge ist 12); und
  • (W:H:C) für einen Tensor, der den Dimensionen eines [W x H] Bilds mit C Kanälen entspricht.

Automatische Dimensionableitung

Wenn eine ParameterTensor Für Gewichtung als sofortige Eingabe spezifischer Vorgänge verwendet wird, ist es zulässig, einige Dimensionen Inferredals anzugeben. Beispielsweise wird das MatrixproduktParameterTensor{42:Inferred} * x) automatisch die zweite Dimension auf die Dimension von x.

Dies ist äußerst praktisch für Eingaben von Ebenen, da er den BrainScript-Code des Benutzers aus der Belastung der Eingabedimensionen freigibt. Außerdem ist es in einigen Situationen sehr schwerfällig, die genauen Eingabedimensionen einer Schicht zu bestimmen, z. B. die erste voll verbundene Schicht auf einer Pyramide von Verbinder-/Pooling-Kombinationen ohne Abstand, wobei jede Konvolution und Pooling-Operation Zeilen oder Spalten von Begrenzungs pixeln ablegen kann, und strides skalieren die Dimensionen.

Dieses Feature ermöglicht es CNTK vordefinierten Ebenen, nur durch ihre Ausgabedimension (z. B. DenseLayer{1024}) angegeben zu werden.

Zufällige Initialisierung

Die zufällige Initialisierung wird vom init Parameter ausgewählt, der zwischen einheitlicher und normaler Verteilung entscheidet, wobei der Bereich/die Standardabweichung als Funktion von Fan-In und Fanout berechnet wird:

Wert von init Verteilung Bereich/Standardabweichung
"heNormal" normal sqrt (2 / fanIn)
"heUniform" uniform-Variable sqrt (6 / fanIn)
"glorotNormal" normal sqrt (2 / (fanIn+fanOut))
"glorotUniform" uniform-Variable sqrt (6 / (fanIn+fanOut))
"xavier" uniform-Variable sqrt (3 / fanIn)
"Uniform" uniform-Variable 1/20
"gaussian" normal sqrt (0,04 / fanIn)
"Null" 0

(Wo zero ist eine manchmal bequeme Alternative zum Angeben initValue=0von .) Für die einheitliche Verteilung werden die Parameter einheitlich in [Bereich, Bereich] initialisiert; bei normaler Verteilung ist der Mittelwert immer null.

Beachten Sie, dass die Standardeinstellung init für die direkte Verwendung ParameterTensor{} istuniform. Die Standardeinstellung ist glorotUniform jedoch für Ebenen , die Parameter innerhalb enthalten, z DenseLayer{} . B. und ConvolutionalLayer{}.

Fan-In und Fanout für zufällige Initialisierung

Die zufällige Initialisierung geht davon aus, dass die Parameter Teil eines Matrixprodukts sind, das einen gut definierten Fan-In und Fan-Out aufweist, der zum Bestimmen der Skalierung der Zufallswerte pro Tabelle verwendet wird. Standardmäßig gilt die erste Achse als Fanout, und die restliche Achse/Achsen sind Fan-In, übereinstimmende Semantik des regulären Matrixprodukts.

Der optionale Parameter initOutputRank kann verwendet werden, um die Anzahl der führenden Achsen anzugeben, die als Fanout angesehen werden sollten. Beispielsweise kann für ein Matrixprodukt in der erweiterten Tensorinterpretation CNTK ein [K]-dimensionales Vektor x zu einem [I x J]-dimensionalen Rang-2-Objekt geschrieben werden, wobei Times (W, x, outputRank=2)W die Form [I x J x K]enthalten ist. initOutputRank=2 Hier gibt an, dass in der Skalierung der zufälligen Initialisierungswerte der Fanout und der Fan-In Kangegeben istI*J.

Negative Werte für initOutputRank die Angabe, dass die Fan-Out-Achsen Nachlaufachsen sind. Der Filterkern des ConvolutionalLayer{} und des zugrunde Convolution() liegenden Vorgangs für ein typisches Bildverarbeitungs-Setup weist beispielsweise eine Form [W x H x C x K]auf, wobei K es sich um den Fan-Out handelt, während sich das Fan-In W*H*Cbefindet. Dies wird durch initOutputRank=-1.

Lesen von Anfangswerten aus Dateien

Die anfänglichen Werte können aus einer Textdatei gelesen werden. Übergeben Sie dazu einen Pfadnamen für den optionalen Parameter initFromFilePath. Die Textdatei wird erwartet, dass eine Zeile pro Matrixzeile besteht, die aus leer getrennten Zahlen besteht, eine pro Spalte. Die Zeilen- und Spaltendimensionen in der Datei müssen übereinstimmen shape.

Parameterspezifische Lernrate

Parameterspezifische Lernraten können mit dem optionalen learningRateMultiplier Parameter realisiert werden. Dieser Faktor wird mit der tatsächlichen Lernrate multipliziert, wenn Parameterupdates ausgeführt werden. Wenn sie beispielsweise als 0 angegeben sind, wird der Parameter nicht aktualisiert, ist es konstant.

Beispiele

Eine reguläre Parametermatrix, die als heUniform (Standardeinstellung heNormal) initialisiert wird:

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

Ein regulärer Bias-Parameter, der als Null initialisiert wird:

b = ParameterTensor {outDim, initValue=0}

Eine einbettende Matrix, die aus einer Datei gelesen und konstant gehalten werden soll:

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

Ein Bias-Parameter der vollständigen Größe eines [width x height]Bilds mit numChannels Farbebenen:

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

Konstante{}

Erstellen Sie einen Konstanten-Tensor.

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

Parameter

  • scalarValue: Wert dieser Konstante
  • rows (Standard: 1): Anzahl der Zeilen, wenn die Konstante kein Skalar ist
  • cols (Standard: 1): Anzahl der Spalten, wenn die Konstante kein Skalar ist

Rückgabewert

Eine Konstante, entweder ein Skalar oder ein Rang-1- oder Rang-2-Objekt der Dimension [rows x cols], wo alle Elemente gefüllt scalarValuesind.

BESCHREIBUNG

Ein konstanter Wert. Es kann entweder ein Skalar oder ein Rang-1-Objekt (Vektor) oder ein Rang-2-Objekt (Matrix) sein, das mit einem einzelnen Wert (z. B. 0) initialisiert wird. Beachten Sie, dass für Vektor- und Matrixkonstanten alle Werte identisch sind, konstanten, die in Verbindung mit Element-weise-Vorgängen verwendet werden, häufig als Skalar angegeben werden können, während Sie die Übertragung nutzen.

Implementierungsnotiz:

A Constant() ist ein ParameterTensor{} mit learningRateMultiplier=0.

Beispiele

Interpolation zwischen zwei Werten mit Interpolation alpha gewicht im Bereich 0..1 ("soft multiplexer"):

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

Hamming-Verlust (siehe hier):

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