Paramètres et constantes
ParameterTensor{}
Crée un scalaire, un vecteur, une matrice ou un capteur de paramètres appris.
ParameterTensor {shape,
init='uniform'/*|heNormal|...*/, initOutputRank=1, initValueScale=1.0,
randomSeed=-1,
initValue=0.0, initFromFilePath='',
learningRateMultiplier=1.0}
Paramètres
shape
: forme (dimensions) du paramètre en tant que tableau. Par exemple(13:42)
, pour créer une matrice avec 13 lignes et 42 colonnes. Pour certaines opérations, les dimensions indiquées comme 0 sont déduites automatiquement (voir ici)init
(valeur par défaut « uniforme ») : spécifie l’initialisation aléatoire, par exempleinit='heNormal'
(voir ici)initOutputRank
(par défaut 1) : spécifie le nombre d’axes de fan out principaux. Si négatif, -number of trailing fan-out axes (voir ici)initValueScale
(par défaut 1) : facteur de mise à l’échelle supplémentaire appliqué aux valeurs d’initialisation aléatoirerandomSeed
(valeur par défaut -1) : si positif, utilisez cette semence aléatoire pour l’initialisation aléatoire. Si négatif, utilisez un compteur qui est augmenté pour chacun d’euxParameterTensor{}
initValue
: spécifie l’initialisation avec une valeur constante, par exemple.initValue=0
initFromFilePath
: spécifie l’initialisation en chargeant les valeurs initiales à partir d’un fichier. Par exemple,initFromFilePath="my_init_vals.txt"
learningRateMultiplier
: le taux d’apprentissage système sera mis à l’échelle par ce (0 pour désactiver l’apprentissage) (voir ici)
Valeur renvoyée
Capteur de paramètres apprenants.
Description
Cette fonction de fabrique crée un scalaire, un vecteur, une matrice ou un capteur de paramètres appris, autrement dit un capteur reconnu par l’action comme contenant des paramètres qui doivent être mis à jour pendant l’entraînement "train"
.
Les valeurs seront initialisées, selon le paramètre facultatif donné, à
- nombres aléatoires, s’il
init
est donné; - une constante si
initValue
elle est donnée ; ou - un capteur lu à partir d’un fichier d’entrée externe s’il
initFromFilePath
est donné. Par défaut, il s’agit deinit="uniform"
.
Pour créer un scalaire, vecteur, matrice ou tensoreur avec le shape
rang>2, passez ce qui suit comme paramètre :
(1)
pour un scalaire ;(M)
pour un vecteur de colonne avecM
des éléments ;(1:N)
pour un vecteur de ligne avecN
des éléments. Les vecteurs de ligne sont des matrices d’une ligne ;(M:N)
pour une matrice avecN
des lignes etI
des colonnes ;(I:J:K...)
pour unensoreur de classement>arbitraire 2 (note : le rang maximal autorisé est de 12); et(W:H:C)
pour un capteur qui correspond aux dimensions d’une[W x H]
image avecC
des canaux.
Inférence de dimension automatique
Lorsqu’un ParameterTensor
est utilisé pour les poids comme entrée immédiate d’opérations spécifiques, il est autorisé à spécifier certaines dimensions comme Inferred
. Par exemple, le produitParameterTensor{42:Inferred} * x)
de matrice déduit automatiquement la deuxième dimension à être égale à la dimension de x
.
Cela est extrêmement pratique pour les entrées de couches, car il libère le code BrainScript de l’utilisateur du fardeau de passer autour des dimensions d’entrée. En outre, dans certaines situations, il est très fastidieux de déterminer les dimensions d’entrée précises d’une couche, par exemple pour la première couche entièrement connectée au-dessus d’une pyramide de combinaisons convolution/pooling sans remplissage, où chaque opération de convolution et de regroupement peut supprimer des lignes ou des colonnes de pixels de limite et mettre à l’échelle les dimensions.
Cette fonctionnalité est ce qui permet aux couches prédéfinies de CNTK d’être spécifiées par leur dimension de sortie uniquement (par exempleDenseLayer
{1024}
).
Initialisation aléatoire
L’initialisation aléatoire est sélectionnée par le init
paramètre, qui choisit entre une distribution uniforme et normale, où l’écart type/plage est calculé en fonction du ventilateur et du ventilateur :
Valeur de init |
distribution | plage/écart type |
---|---|---|
'heNormal' | normal | sqrt (2 / fanIn) |
'heUniform' | uniforme | sqrt (6 / fanIn) |
'glorotNormal' | normal | sqrt (2 / (fanIn+fanOut)) |
'glorotUniform' | uniforme | sqrt (6 / (fanIn+fanOut)) |
'xavier' | uniforme | sqrt (3 / fanIn) |
'uniform' | uniforme | 1/20 |
'gaussian' | normal | sqrt (0.04 / fanIn) |
'zéro' | n/a | 0 |
(Où zero
est une alternative parfois pratique à la spécification initValue=0
.) Pour la distribution uniforme, les paramètres sont initialisés de manière uniforme dans [-range, range]; pour la distribution normale, la moyenne est toujours nulle.
Notez que la valeur par défaut est init
uniform
utilisée ParameterTensor{}
directement.
Toutefois, la valeur par défaut est glorotUniform
pour les couches qui contiennent des paramètres à l’intérieur, tels que DenseLayer{}
et ConvolutionalLayer{}
.
Fan-in et fan-out pour l’initialisation aléatoire
L’initialisation aléatoire suppose que les paramètres font partie d’une forme d’opération similaire à la matrice qui a un ventilateur bien défini et un ventilateur out, qui sont utilisés pour déterminer la mise à l’échelle des valeurs aléatoires par tableau ci-dessus. Par défaut, le premier axe est considéré comme fan-out, et les axes/axes restants sont des sémantiques correspondantes du produit de matrice régulière.
Le paramètre initOutputRank
facultatif peut être utilisé pour spécifier le nombre d’axes principaux qui doivent être considérés comme fan-out. Par exemple, pour un produit de matrice dans l’interprétation étendue du tensor CNTK qui mappe un vecteur x
-dimensionnel à un [I x J]
[K]
objet de classement-2 dimensionnel peut être écrit comme Times
(W, x, outputRank=2)
, où W
a la forme .[I x J x K]
Ici, spécifie que dans la mise à l’échelle des valeurs d’initialisation aléatoire, initOutputRank=2
le ventilateur est I*J
et le ventilateur K
.
Les valeurs négatives pour initOutputRank
indiquer que les axes de ventilateur sont des axes de fin. Par exemple, le noyau de filtre de l’opération ConvolutionalLayer{}
et l’opération sous-jacente Convolution()
pour une configuration de traitement d’image classique a une forme [W x H x C x K]
, où K
est le ventilateur, alors que le ventilateur est W*H*C
.
Ceci est spécifié par initOutputRank=-1
.
Lecture des valeurs initiales à partir de fichiers
Les valeurs initiales peuvent être lues à partir d’un fichier texte. Pour ce faire, passez un chemin d’accès pour le paramètre initFromFilePath
facultatif .
Le fichier texte doit se composer d’une ligne par ligne de matrice, qui se compose de nombres séparés par espace, un par colonne.
Les dimensions de ligne et de colonne du fichier doivent correspondre shape
.
Taux d’apprentissage spécifique au paramètre
Les taux d’apprentissage spécifiques aux paramètres peuvent être réalisés avec le paramètre facultatif learningRateMultiplier
.
Ce facteur est multiplié par le taux d’apprentissage réel lors de l’exécution des mises à jour des paramètres.
Par exemple, si elle est spécifiée sous la forme 0, le paramètre n’est pas mis à jour, il est constant.
Exemples
Matrice de paramètres régulière qui sera initialisée comme heUniform
(valeur par défaut heNormal
) :
W = ParameterTensor {(outDim:inDim), init=`heUniform`}
Paramètre de biais normal qui sera initialisé comme zéro :
b = ParameterTensor {outDim, initValue=0}
Matrice incorporée qui doit être lue à partir d’un fichier et conservée constante :
E = ParameterTensor {(embedDim:vocabSize),
initFromFilePath='./EmbeddingMatrix.txt',
learningRateMultiplier=0} # prevents learning
Paramètre de biais de la taille complète d’une [width x height]
image de taille avec numChannels
des plans de couleurs :
bFull = ParameterTensor {(width:height:numChannels)}
Constante{}
Créez un tensoriel constant.
Constant {scalarValue, rows=1, cols=1}
Paramètres
scalarValue
: valeur de cette constanterows
(valeur par défaut : 1) : nombre de lignes, si la constante n’est pas une scalairecols
(valeur par défaut : 1) : nombre de cols, si la constante n’est pas un scalaire
Valeur renvoyée
Constante, un scalaire ou un objet rank-1 ou rank-2 de dimension [rows x cols]
, où tous les éléments sont remplis scalarValue
.
Description
Valeur constante. Il peut s’agir d’un objet scalaire, d’un objet rank-1 (vecteur) ou d’un objet rank-2 (matrice) initialisé avec une valeur unique (par exemple, 0). Notez que, étant donné que pour les constantes de vecteur et de matrice, toutes les valeurs sont identiques, les constantes utilisées conjointement avec les opérations basées sur les éléments peuvent souvent être spécifiées comme scalaires, tout en tirant parti de la diffusion.
Note d’implémentation :
A Constant()
est un ParameterTensor{}
avec learningRateMultiplier=0
.
Exemples
Interpolation entre deux valeurs avec un poids alpha
d’interpolation dans la plage 0..1 (« multiplexeur souple ») :
SoftMUX (x, y, alpha) = Constant (1-alpha) .* x + Constant (alpha) .* y
Perte hamming (cf. ici) :
HammingLoss (y, p) = ReduceSum (BS.Boolean.Xor (y, Greater (p, Constant(0.5))))
hl = HammingLoss (multiLabels, probabilities)