Parametrar och konstanter
ParameterTensor{}
Skapar en skalär, vektor, matris eller tensor med lärbara parametrar.
ParameterTensor {shape,
init='uniform'/*|heNormal|...*/, initOutputRank=1, initValueScale=1.0,
randomSeed=-1,
initValue=0.0, initFromFilePath='',
learningRateMultiplier=1.0}
Parametrar
-
shape
: form (dimensioner) av parametern som en matris. T.ex.(13:42)
för att skapa en matris med 13 rader och 42 kolumner. För vissa åtgärder härleds dimensioner som anges som 0 automatiskt (se här) -
init
(standard "enhetlig"): anger slumpmässig initiering, t.ex.init='heNormal'
(se här) -
initOutputRank
(standard 1): anger antalet inledande utrullningsaxlar. Om det är negativt -number efterföljande utspolningsaxlar (se här) -
initValueScale
(standard 1): ytterligare skalningsfaktor som tillämpas på slumpmässiga initieringsvärden -
randomSeed
(standard -1): om det är positivt använder du det här slumpmässiga fröet för slumpmässig initiering. Om det är negativt använder du en räknare som ökar för varjeParameterTensor{}
-
initValue
: anger initiering med ett konstant värde, t.ex.initValue=0
-
initFromFilePath
: anger initiering genom att läsa in inledande värden från en fil. T.ex.initFromFilePath="my_init_vals.txt"
-
learningRateMultiplier
: Systeminlärningshastigheten skalas av detta (0 för att inaktivera inlärning) (se här)
Returvärde
En tensor av lärbara parametrar.
Beskrivning
Den här fabriksfunktionen skapar en skalär, vektor, matris eller tensor med lärbara parametrar, det vill:s en tensor som identifieras av åtgärden "train"
som innehåller parametrar som ska uppdateras under träningen.
Värdena initieras, beroende på vilken valfri parameter som anges, för att
- slumptal, om
init
anges; - en konstant om
initValue
anges. eller - en tensor-läsning från en extern indatafil om
initFromFilePath
anges. Standardvärdet ärinit="uniform"
.
Om du vill skapa en skalär, vektor, matris eller tensor med rangordning>2 skickar du följande som parametern shape
:
-
(1)
för en skalär; -
(M)
för en kolumnvektor medM
element. -
(1:N)
för en radvektor medN
element. Radvektorer är enradsmatriser; -
(M:N)
för en matris medN
rader ochI
kolumner. -
(I:J:K...)
för en tensor av godtycklig rang>2 (obs! den högsta tillåtna rangordningen är 12); och -
(W:H:C)
för en tensor som matchar dimensionerna för en[W x H]
bild medC
kanaler.
Automatisk dimensionsinferens
När en ParameterTensor
används för vikter som en omedelbar indata för specifika åtgärder, kan du ange vissa dimensioner som Inferred
. Till exempel kommer den matrisproduktenParameterTensor{42:Inferred} * x)
automatiskt att dra slutsatsen att den andra dimensionen är lika med dimensionen för x
.
Detta är mycket praktiskt för indata från lager, eftersom det frigör användarens BrainScript-kod från bördan att skicka runt indatadimensionerna. I vissa situationer är det dessutom mycket besvärligt att fastställa de exakta indatadimensionerna för ett lager, till exempel för det första helt anslutna lagret ovanpå en pyramid med kombinationer av convolution/pooling utan utfyllnad, där varje konvolutions- och poolåtgärd kan släppa rader eller kolumner med gränspixlar och steg skala dimensionerna.
Den här funktionen gör att CNTK:s fördefinierade skikt anges endast av deras utdatadimension (t.ex. DenseLayer
{1024}
).
Slumpmässig initiering
Slumpmässig initiering väljs av parametern init
, som väljer mellan enhetlig och normal fördelning, där intervallet/standardavvikelsen beräknas som en funktion av in- och ut fläkt:
värdet för init |
fördelning | intervall/standardavvikelse |
---|---|---|
"heNormal" | normal | sqrt (2 / fanIn) |
"heUniform" | uniform | sqrt (6 /fanIn) |
"glorotNormal" | normal | sqrt (2 / (fanIn +fanOut)) |
"glorotUniform" | uniform | sqrt (6 / (fanIn +fanOut)) |
"xavier" | uniform | sqrt (3 / fanIn) |
"uniform" | uniform | 1/20 |
"gaussian" | normal | sqrt (0,04 / fanIn) |
"noll" | n/a | 0 |
(Om zero
är ett ibland praktiskt alternativ till att ange initValue=0
.) För enhetlig fördelning initieras parametrarna enhetligt i [-range, range]; för normal fördelning är medelvärdet alltid noll.
Observera att standardvärdet för init
är uniform
när du använder ParameterTensor{}
direkt.
Standardvärdet är dock glorotUniform
för lager som innehåller parametrar inuti, till exempel DenseLayer{}
och ConvolutionalLayer{}
.
In- och ut fläkt för slumpmässig initiering
Slumpmässig initiering förutsätter att parametrarna ingår i någon form av matrisproduktliknande åtgärd som har en väldefinierad in- och ut fläkt, som används för att fastställa skalningen av slumpmässiga värden per tabell ovan. Som standard betraktas den första axeln som utspringad och återstående axel/axlar är inbyggda och matchar semantik för den vanliga matrisprodukten.
Den valfria parametern initOutputRank
kan användas för att ange antalet inledande axlar som ska betraktas som utrullningsbara. Till exempel för en matrisprodukt i CNTK:s utökade tensortolkning som mappar en [K]
-dimensionell vektor x
till ett [I x J]
-dimensionellt rank-2-objekt kan skrivas som Times
(W, x, outputRank=2)
, där W
har formen [I x J x K]
.
Här anger initOutputRank=2
att vid skalning av slumpmässiga initieringsvärden är utskalningen I*J
och K
.
Negativa värden för initOutputRank
anger att utspolningsaxlarna är avslutande axlar. Till exempel har filterkärnan för ConvolutionalLayer{}
och den underliggande Convolution()
-åtgärden för en typisk konfiguration av bildbearbetning en form [W x H x C x K]
, där K
är fläkten, medan fläkten är W*H*C
.
Detta anges av initOutputRank=-1
.
Läsa inledande värden från filer
De inledande värdena kan läsas från en textfil. Det gör du genom att skicka ett sökvägsnamn för den valfria parametern initFromFilePath
.
Textfilen förväntas bestå av en rad per matrisrader, som består av blankstegsavgränsade tal, en per kolumn.
Rad- och kolumndimensionerna i filen måste matcha shape
.
Parameterspecifik inlärningsfrekvens
Parameterspecifika inlärningsfrekvenser kan uppnås med den valfria learningRateMultiplier
parametern.
Den här faktorn multipliceras med den faktiska inlärningshastigheten när du utför parameteruppdateringar.
Om parametern till exempel anges som 0 uppdateras den inte, den är konstant.
Exempel
En vanlig parametermatris som initieras som heUniform
(standardvärdet är heNormal
):
W = ParameterTensor {(outDim:inDim), init=`heUniform`}
En vanlig bias-parameter som initieras som noll:
b = ParameterTensor {outDim, initValue=0}
En inbäddningsmatris som ska läsas från en fil och behållas konstant:
E = ParameterTensor {(embedDim:vocabSize),
initFromFilePath='./EmbeddingMatrix.txt',
learningRateMultiplier=0} # prevents learning
En biasparameter med full storlek på en [width x height]
-storleksbild med numChannels
färgplan:
bFull = ParameterTensor {(width:height:numChannels)}
Konstant{}
Skapa en konstant tensor.
Constant {scalarValue, rows=1, cols=1}
Parametrar
-
scalarValue
: värdet för den här konstanten -
rows
(standard: 1): antal rader, om konstanten inte är en skalär -
cols
(standard: 1): antal cols, om konstanten inte är en skalär
Returvärde
En konstant, antingen ett skalärt eller ett rank-1- eller rank-2-objekt av dimensionen [rows x cols]
, där alla element fylls med scalarValue
.
Beskrivning
Ett konstant värde. Det kan vara antingen ett skalärt eller ett rank-1-objekt (vektor) eller rank-2-objekt (matris) som initierats med ett enda värde (till exempel 0). Observera att eftersom för vektor- och matriskonstanter är alla värden identiska, kan konstanter som används tillsammans med elementbaserade åtgärder ofta anges som en skalär, samtidigt som du drar nytta av sändning.
Implementeringsanteckning:
En Constant()
är en ParameterTensor{}
med learningRateMultiplier=0
.
Exempel
Interpolering mellan två värden med interpoleringsvikt alpha
i intervallet 0..1 ("mjuk multiplexer"):
SoftMUX (x, y, alpha) = Constant (1-alpha) .* x + Constant (alpha) .* y
Hamming förlust (jfr här):
HammingLoss (y, p) = ReduceSum (BS.Boolean.Xor (y, Greater (p, Constant(0.5))))
hl = HammingLoss (multiLabels, probabilities)