Compartir a través de


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 cada ParameterTensor{}
  • 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 es init="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 elementos M;
  • (1:N) para un vector de fila con elementos N. Los vectores de fila son matrices de una fila;
  • (M:N) para una matriz con N filas y columnas de I;
  • (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 de C.

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 del producto de matriz de deducirá automáticamente la segunda dimensión para que sea igual a la dimensión de .

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)