Parámetros y constantes
{} ParameterTensor
Crea un tensor escalar, vector, matriz o tensor de parámetros que se pueden aprender.
ParameterTensor {shape,
init='uniform'/*|heNormal|...*/, initOutputRank=1, initValueScale=1.0,
randomSeed=-1,
initValue=0.0, initFromFilePath='',
learningRateMultiplier=1.0}
Parámetros
-
shape
: forma (dimensiones) del parámetro como una matriz. Por ejemplo,(13:42)
crear una matriz con 13 filas y 42 columnas. Para algunas operaciones, las dimensiones dadas como 0 se deducen automáticamente (consulte aquí) -
init
(uniforme predeterminado): especifica la inicialización aleatoria, por ejemplo,init='heNormal'
(consulte aquí) -
initOutputRank
(valor predeterminado 1): especifica el número de ejes de distribución ramificada iniciales. Si es negativo, -number de ejes de distribución ramificada finales (consulte aquí) -
initValueScale
(valor predeterminado 1): factor de escalado adicional aplicado a valores de inicialización aleatorios -
randomSeed
(valor predeterminado -1): si es positivo, use esta inicialización aleatoria para la inicialización aleatoria. Si es negativo, use un contador que aumente para cadaParameterTensor{}
-
initValue
: especifica la inicialización con un valor constante, por ejemplo,initValue=0
-
initFromFilePath
: especifica la inicialización cargando valores iniciales desde un archivo. Por ejemplo,initFromFilePath="my_init_vals.txt"
-
learningRateMultiplier
: esta velocidad de aprendizaje del sistema se escalará (0 para deshabilitar el aprendizaje) (consulte aquí)
Valor devuelto
Tensor de parámetros que se pueden aprender.
Descripción
Esta función de generador crea un tensor escalar, vector, matriz o tensor de parámetros que se pueden aprender, es decir, un tensor reconocido por la acción "train"
como parámetros que se actualizarán durante el entrenamiento.
Los valores se inicializarán, en función del parámetro opcional, para
- números aleatorios, si se da
init
; - una constante si se da
initValue
; o - una lectura de tensor de un archivo de entrada externo si se proporciona
initFromFilePath
. El valor predeterminado esinit="uniform"
.
Para crear un tensor escalar, vector, matriz o tensor con rango>2, pase lo siguiente como el parámetro shape
:
-
(1)
para un escalar; -
(M)
para un vector de columna con elementosM
; -
(1:N)
para un vector de fila con elementosN
. Los vectores de fila son matrices de una fila; -
(M:N)
para una matriz conN
filas y columnas deI
; -
(I:J:K...)
para un tensor de rango arbitrario>2 (nota: el rango máximo permitido es 12); y -
(W:H:C)
para un tensor que coincide con las dimensiones de una imagen de[W x H]
con canales deC
.
Inferencia de dimensión automática
Cuando se usa un ParameterTensor
para pesos como entrada inmediata de operaciones específicas, se permite especificar algunas dimensiones como Inferred
. Por ejemplo, el
Esto es muy útil para las entradas de capas, ya que libera el código BrainScript del usuario de la carga de pasar por las dimensiones de entrada. Además, en algunas situaciones es muy complicado determinar las dimensiones de entrada precisas de una capa, por ejemplo, para la primera capa totalmente conectada sobre una pirámide de combinaciones de convolución y agrupación sin relleno, donde cada operación de convolución y agrupación puede quitar filas o columnas de píxeles de límite, y los pasos escalan las dimensiones.
Esta característica es lo que permite especificar las capas predefinidas de CNTK solo mediante su dimensión de salida (por ejemplo, DenseLayer
{1024}
).
Inicialización aleatoria
La inicialización aleatoria se selecciona mediante el parámetro init
, que elige entre distribución uniforme y normal, donde la desviación estándar o el intervalo se calcula como una función de fan-in y fan-out:
valor de init |
distribución | intervalo/desviación estándar |
---|---|---|
'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) |
'uniforme' | uniforme | 1/20 |
'gaussian' | normal | sqrt (0,04 / fanIn) |
'cero' | n/a | 0 |
(Donde zero
es una alternativa a veces conveniente para especificar initValue=0
). Para la distribución uniforme, los parámetros se inicializarán uniformemente en [-range, range]; para la distribución normal, la media siempre es cero.
Tenga en cuenta que el valor predeterminado de init
es uniform
cuando se usa ParameterTensor{}
directamente.
Sin embargo, el valor predeterminado es glorotUniform
para capas que contienen parámetros dentro, como DenseLayer{}
y ConvolutionalLayer{}
.
Distribución ramificada y distribución ramificada para la inicialización aleatoria
La inicialización aleatoria supone que los parámetros forman parte de alguna forma de operación similar a un producto de matriz que tiene un ventilador bien definido y un ventilador, que se usan para determinar el escalado de los valores aleatorios por tabla anterior. De forma predeterminada, el primer eje se considera ventilador y el eje o ejes restantes son fan-in, que coinciden con la semántica del producto de matriz normal.
El parámetro opcional initOutputRank
se puede usar para especificar el número de ejes iniciales que se deben considerar fan-out. Por ejemplo, para un producto de matriz en interpretación extendida del tensor de CNTK que asigna un vector [K]
dimensional x
a un objeto [I x J]
-dimensional rank-2 se puede escribir como Times
(W, x, outputRank=2)
, donde W
tiene la forma [I x J x K]
.
Aquí, initOutputRank=2
especifica que en el escalado de los valores de inicialización aleatorios, el distribución ramificada se I*J
y el ventilador en K
.
Los valores negativos de initOutputRank
indican que los ejes de distribución ramificada son ejes finales. Por ejemplo, el kernel de filtro de la ConvolutionalLayer{}
y la operación de Convolution()
subyacente para una configuración típica de procesamiento de imágenes tiene una forma [W x H x C x K]
, donde K
es el ventilador, mientras que el ventilador es W*H*C
.
Esto se especifica mediante initOutputRank=-1
.
Lectura de valores iniciales de archivos
Los valores iniciales se pueden leer desde un archivo de texto. Para ello, pase un pathname para el parámetro opcional initFromFilePath
.
Se espera que el archivo de texto conste de una línea por fila de matriz, que consta de números separados por espacio, uno por columna.
Las dimensiones de fila y columna del archivo deben coincidir con shape
.
Velocidad de aprendizaje específica de parámetros
Las tasas de aprendizaje específicas de parámetros se pueden realizar con el parámetro opcional learningRateMultiplier
.
Este factor se multiplica con la velocidad de aprendizaje real al realizar actualizaciones de parámetros.
Por ejemplo, si se especifica como 0, el parámetro no se actualizará, es constante.
Ejemplos
Matriz de parámetros normales que se inicializará como heUniform
(el valor predeterminado sería heNormal
):
W = ParameterTensor {(outDim:inDim), init=`heUniform`}
Parámetro de sesgo normal que se inicializará como cero:
b = ParameterTensor {outDim, initValue=0}
Matriz de inserción que debe leerse desde un archivo y mantener constante:
E = ParameterTensor {(embedDim:vocabSize),
initFromFilePath='./EmbeddingMatrix.txt',
learningRateMultiplier=0} # prevents learning
Parámetro de sesgo del tamaño completo de una imagen de tamaño [width x height]
con planos de color numChannels
:
bFull = ParameterTensor {(width:height:numChannels)}
Constante{}
Cree un tensor constante.
Constant {scalarValue, rows=1, cols=1}
Parámetros
-
scalarValue
: valor de esta constante -
rows
(valor predeterminado: 1): número de filas, si la constante no es escalar -
cols
(valor predeterminado: 1): número de cols, si la constante no es escalar
Valor devuelto
Constante, ya sea escalar o un objeto rank-1 o rank-2 de dimensión [rows x cols]
, donde todos los elementos se rellenan con scalarValue
.
Descripción
Valor constante. Puede ser escalar o un objeto rank-1 (vector) o un objeto rank-2 (matriz) inicializado con un valor único (como 0). Tenga en cuenta que, dado que para las constantes de vector y matriz, todos los valores son idénticos, las constantes usadas junto con las operaciones en cuanto a elementos a menudo se pueden especificar como escalares, al tiempo que aprovechan difusión.
Nota de implementación:
Un Constant()
es un ParameterTensor{}
con learningRateMultiplier=0
.
Ejemplos
Interpolación entre dos valores con peso de interpolación alpha
en el intervalo 0..1 ("multiplexador suave"):
SoftMUX (x, y, alpha) = Constant (1-alpha) .* x + Constant (alpha) .* y
Pérdida de hamming (cf. aquí):
HammingLoss (y, p) = ReduceSum (BS.Boolean.Xor (y, Greater (p, Constant(0.5))))
hl = HammingLoss (multiLabels, probabilities)