Parametry a konstanty

{} parametru

Vytvoří skalární, vektorovou, matici nebo tensor naučitelných parametrů.

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

Parametry

  • shape: tvar (rozměry) parametru jako pole. Například (13:42) vytvořit matici s 13 řádky a 42 sloupci. U některých operací jsou dimenze zadané jako 0 automaticky odvozeny (viz zde)
  • init (výchozí uniforma): určuje náhodnou inicializaci, například init='heNormal'(viz zde)
  • initOutputRank (výchozí 1): Určuje počet úvodních os ventilátorů. Pokud je negativní, -number koncových os ventilátorů (viz zde)
  • initValueScale (výchozí 1): další faktor škálování použitý na náhodné inicializační hodnoty
  • randomSeed (výchozí -1): Pokud je kladné, použijte toto náhodné počáteční hodnoty pro náhodnou inicializaci. Pokud je záporná, použijte čítač, který se pro každou ParameterTensor{} zvýší.
  • initValue: určuje inicializaci konstantní hodnotou, např. initValue=0
  • initFromFilePath: určuje inicializaci načtením počátečních hodnot ze souboru. Např. initFromFilePath="my_init_vals.txt"
  • learningRateMultiplier: rychlost systémového učení se bude škálovat tímto (0, aby se zakázalo učení) (viz zde)

Návratová hodnota

Tenzor možností učení parametrů.

Popis

Tato funkce továrny vytvoří skalární, vektorovou, matici nebo tensor naučitelných parametrů, tj. tenzor rozpoznaný akcí "train" jako obsahující parametry, které se během trénování aktualizují.

Hodnoty se inicializují v závislosti na tom, pro který volitelný parametr je zadaný.

  • náhodná čísla, pokud init je uvedena;
  • konstanta, je-li uvedena initValue; nebo
  • Tensor přečte z externího vstupního souboru, pokud initFromFilePath. Výchozí hodnota je init="uniform".

Pokud chcete vytvořit skalár, vektor, matici nebo tensor s pořadím>2, předejte jako parametr shape následující:

  • (1) skaláru;
  • (M) vektoru sloupce s prvky M;
  • (1:N) pro vektor řádku s prvky N. Vektory řádků jsou matice s jedním řádkem;
  • (M:N) matice s N řádky a sloupci I;
  • (I:J:K...) pro tensor libovolného pořadí>2 (poznámka: maximální povolené pořadí je 12); a
  • (W:H:C) pro tensor, který odpovídá rozměrům [W x H] obrázku s kanály C.

Automatické odvození dimenzí

Pokud se ParameterTensor používá pro váhy jako okamžitý vstup konkrétních operací, je povoleno zadat některé dimenze jako Inferred. Například maticový součinParameterTensor{42:Inferred} * x) automaticky odvodí druhou dimenzi, která bude rovna dimenzi x.

To je velmi užitečné pro vstupy vrstev, protože uvolní kód BrainScriptu uživatele z zátěže předávání vstupních dimenzí. V některých situacích je navíc velmi těžkopádné určit přesné vstupní rozměry vrstvy, například pro první plně propojenou vrstvu nad jehlanem konvoluční/poolingové kombinace bez odsazení, kde každá konvoluce a operace sdružování může vypustit řádky nebo sloupce hraničních pixelů a kroky škálují rozměry.

Tato funkce umožňuje, aby předdefinované vrstvy CNTK byly určeny pouze jejich výstupní dimenzí (např. DenseLayer{1024}).

Náhodná inicializace

Náhodný inicializace je vybrána parametrem init, který vybírá mezi jednotným a normálním rozdělením, kde se oblast/směrodatná odchylka vypočítá jako funkce ventilátoru a ventilátoru:

hodnota init distribuce oblast/směrodatná odchylka
"heNormal" normální sqrt (2 / fanIn)
HeUniform rovnoměrný sqrt (6 / fanIn)
"glorotNormal" normální sqrt (2 / (fanIn+fanOut))
GlorotUniform rovnoměrný sqrt (6 / (fanIn+fanOut))
"xavier" rovnoměrný sqrt (3 / fanIn)
"uniforma" rovnoměrný 1/20
Gaussian normální sqrt (0,04 / fanIn)
Nula není k dispozici 0

(Kde zero je někdy vhodná alternativa k určení initValue=0.) Pro jednotné rozdělení budou parametry inicializovány jednotně v rozsahu [-range, range]; pro normální rozdělení je střední hodnota vždy nula.

Všimněte si, že výchozí nastavení pro init je při použití ParameterTensor{} přímo uniform. Výchozí nastavení je však glorotUniform pro vrstvy , které obsahují parametry uvnitř, například DenseLayer{} a ConvolutionalLayer{}.

Ventilátor a ventilátor pro náhodnou inicializaci

Náhodná inicializace předpokládá, že parametry jsou součástí nějaké formy operace podobné maticovým produktům, která má dobře definovaný ventilátor a ventilátor, které se používají při určování měřítka náhodných hodnot podle výše uvedené tabulky. Ve výchozím nastavení je první osa považována za ventilátor a zbývající osa/osy jsou ventilátory, které odpovídají sémantice běžného maticového produktu.

Volitelný parametr initOutputRank lze použít k určení počtu úvodních os, které by se měly považovat za ventilátor. Například pro maticový součin v rozšířené interpretaci CNTK, která mapuje [K]-dimenzionální vektor x na objekt [I x J]-dimenzionální pořadí-2 lze zapsat jako Times (W, x, outputRank=2), kde W má tvar [I x J x K]. Zde initOutputRank=2 určuje, že při škálování hodnot náhodné inicializace je ventilátor I*J a ventilátor K.

Záporné hodnoty pro initOutputRank označují, že osy ventilátoru jsou koncové osy. Například jádro filtru ConvolutionalLayer{} a základní operace Convolution() pro typické nastavení zpracování obrázků má tvar [W x H x C x K], kde K je ventilátor, zatímco ventilátor je W*H*C. To je určeno initOutputRank=-1.

Čtení počátečních hodnot ze souborů

Počáteční hodnoty lze číst z textového souboru. Uděláte to tak, že předáte název cesty pro volitelný parametr initFromFilePath. Očekává se, že textový soubor bude obsahovat jeden řádek na řádky matice, které se skládají z čísel oddělených mezerami, jednoho sloupce. Rozměry řádků a sloupců v souboru se musí shodovat s shape.

Míra učení specifická pro parametry

Míra učení specifická pro parametry je možné realizovat pomocí volitelného parametru learningRateMultiplier. Tento faktor se vynásobí skutečnou rychlostí učení při provádění aktualizací parametrů. Pokud je například zadán jako 0, parametr se neaktualizuje, je konstantní.

Příklady

Běžná matice parametrů, která se inicializuje jako heUniform (výchozí hodnota by byla heNormal):

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

Běžný parametr předsudku, který se inicializuje jako nula:

b = ParameterTensor {outDim, initValue=0}

Vložená matice, která by se měla číst ze souboru a zachovat konstantu:

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

Parametr zkreslení plné velikosti obrázku [width x height]-size s numChannels rovinami barev:

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

Konstantní{}

Vytvoření konstantního tensoru

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

Parametry

  • scalarValue: hodnota této konstanty
  • rows (výchozí hodnota: 1): počet řádků, pokud konstanta není skalární
  • cols (výchozí hodnota: 1): počet kol, pokud konstanta není skalární

Návratová hodnota

Konstanta, skalární nebo rank-1 nebo rank-2 objekt dimenze [rows x cols], kde jsou všechny prvky vyplněny scalarValue.

Popis

Konstantní hodnota. Může to být skalární objekt nebo objekt pořadí-1 (vektor) nebo rank-2 objekt (matice) inicializovaný jednou hodnotou (například 0). Všimněte si, že vzhledem k tomu, že pro vektorové a maticové konstanty jsou všechny hodnoty identické, konstanty používané ve spojení s operacemi moudrými prvky mohou být často zadány jako skalární a současně využívají vysílání.

Poznámka k implementaci:

Constant() je ParameterTensor{} s learningRateMultiplier=0.

Příklady

Interpolace mezi dvěma hodnotami s interpolační hmotností alpha v rozsahu 0..1 ("soft multiplexer"):

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

Ztráta hammingu (viz zde):

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