Parâmetros e constantes
{} ParameterTensor
Cria um escalar, vetor, matriz ou tensor de parâmetros aprendizes.
ParameterTensor {shape,
init='uniform'/*|heNormal|...*/, initOutputRank=1, initValueScale=1.0,
randomSeed=-1,
initValue=0.0, initFromFilePath='',
learningRateMultiplier=1.0}
Parâmetros
-
shape
: forma (dimensões) do parâmetro como uma matriz. Por exemplo,(13:42)
criar uma matriz com 13 linhas e 42 colunas. Para algumas operações, as dimensões fornecidas como 0 são inferidas automaticamente (veja aqui) -
init
(padrão 'uniforme'): especifica a inicialização aleatória, por exemplo,init='heNormal'
(veja aqui) -
initOutputRank
(padrão 1): especifica o número de eixos de saída de ventilador à esquerda. Se negativo, -number de eixos à direita (veja aqui) -
initValueScale
(padrão 1): fator de dimensionamento adicional aplicado a valores aleatórios de inicialização -
randomSeed
(padrão -1): se positivo, use essa semente aleatória para inicialização aleatória. Se for negativo, use um contador que seja aumentado para cadaParameterTensor{}
-
initValue
: especifica a inicialização com um valor constante, por exemplo,initValue=0
-
initFromFilePath
: especifica a inicialização carregando valores iniciais de um arquivo. Por exemplo,initFromFilePath="my_init_vals.txt"
-
learningRateMultiplier
: a taxa de aprendizado do sistema será dimensionada por este (0 para desabilitar o aprendizado) (veja aqui)
Valor retornado
Um tensor de parâmetros aprendizes.
Descrição
Essa função de fábrica cria um escalar, vetor, matriz ou tensor de parâmetros aprendizes, ou seja, um tensor reconhecido pela ação "train"
como contendo parâmetros que devem ser atualizados durante o treinamento.
Os valores serão inicializados, dependendo de qual parâmetro opcional é fornecido, para
- números aleatórios, se
init
for fornecida; - uma constante se
initValue
for fornecida; ou - uma leitura tensor de um arquivo de entrada externo se
initFromFilePath
for fornecida. O padrão éinit="uniform"
.
Para criar um escalar, vetor, matriz ou tensor com classificação>2, passe o seguinte como o parâmetro shape
:
-
(1)
para um escalar; -
(M)
para um vetor de coluna com elementosM
; -
(1:N)
para um vetor de linha com elementosN
. Vetores de linha são matrizes de uma linha; -
(M:N)
para uma matriz com linhasN
e colunasI
; -
(I:J:K...)
para um tensor de classificação arbitrária>2 (observação: a classificação máxima permitida é 12); e -
(W:H:C)
para um tensor que corresponde às dimensões de uma imagem[W x H]
com canais deC
.
Inferência automática de dimensão
Quando um ParameterTensor
é usado para pesos como uma entrada imediata de operações específicas, é permitido especificar algumas dimensões como Inferred
. Por exemplo, a
Isso é extremamente útil para entradas de camadas, pois libera o código BrainScript do usuário da carga de passar as dimensões de entrada. Além disso, em algumas situações, é muito complicado determinar as dimensões de entrada precisas de uma camada, por exemplo, para a primeira camada totalmente conectada sobre uma pirâmide de combinações de convolução/pooling sem preenchimento, em que cada operação de convolução e pooling pode soltar linhas ou colunas de pixels de limite e os passos dimensionam as dimensões.
Esse recurso é o que permite que as camadas predefinidas do CNTK sejam especificadas apenas pela dimensão de saída (por exemplo, DenseLayer
{1024}
).
Inicialização aleatória
A inicialização aleatória é selecionada pelo parâmetro init
, que escolhe entre distribuição uniforme e normal, em que o desvio de intervalo/padrão é computado como uma função de fan-in e fan-out:
valor de init |
distribuição | intervalo/desvio padrão |
---|---|---|
'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) |
'zero' | n/a | 0 |
(Onde zero
é uma alternativa às vezes conveniente para especificar initValue=0
.) Para distribuição uniforme, os parâmetros serão inicializados uniformemente em [-intervalo, intervalo]; para distribuição normal, a média é sempre zero.
Observe que o padrão para init
é uniform
ao usar ParameterTensor{}
diretamente.
No entanto, o padrão é glorotUniform
para camadas que contêm parâmetros dentro, como DenseLayer{}
e ConvolutionalLayer{}
.
Fan-in e fan-out para inicialização aleatória
A inicialização aleatória pressupõe que os parâmetros fazem parte de alguma forma de operação de matriz-produto, que tem um fan-in e fan-out bem definidos, que são usados para determinar o dimensionamento dos valores aleatórios por tabela acima. Por padrão, o primeiro eixo é considerado fan-out e os eixos/eixos restantes são semânticos correspondentes do produto de matriz regular.
O parâmetro opcional initOutputRank
pode ser usado para especificar o número de eixos à esquerda que devem ser considerados fan-out. Por exemplo, para um produto de matriz no de interpretação estendida do tensor do CNTK que mapeia um vetor [K]
-dimensional x
para um objeto de classificação 2 [I x J]
dimensional pode ser escrito como Times
(W, x, outputRank=2)
, em que W
tem a forma [I x J x K]
.
Aqui, initOutputRank=2
especifica que, ao dimensionar os valores de inicialização aleatória, o fan-out é I*J
e o fan-in K
.
Valores negativos para initOutputRank
indicam que os eixos de saída são eixos à direita. Por exemplo, o kernel de filtro do ConvolutionalLayer{}
e a operação de Convolution()
subjacente para uma configuração típica de processamento de imagem tem uma forma [W x H x C x K]
, em que K
é o fan-out, enquanto o fan-in é W*H*C
.
Isso é especificado por initOutputRank=-1
.
Lendo valores iniciais de arquivos
Os valores iniciais podem ser lidos de um arquivo de texto. Para fazer isso, passe um nome de caminho para o parâmetro opcional initFromFilePath
.
Espera-se que o arquivo de texto consista em uma linha por linhas de matriz, que consistem em números separados por espaço, um por coluna.
As dimensões de linha e coluna no arquivo devem corresponder shape
.
Taxa de aprendizagem específica do parâmetro
As taxas de aprendizagem específicas do parâmetro podem ser realizadas com o parâmetro learningRateMultiplier
opcional.
Esse fator é multiplicado com a taxa de aprendizado real ao executar atualizações de parâmetro.
Por exemplo, se especificado como 0, o parâmetro não será atualizado, ele é constante.
Exemplos
Uma matriz de parâmetros regular que será inicializada como heUniform
(o padrão seria heNormal
):
W = ParameterTensor {(outDim:inDim), init=`heUniform`}
Um parâmetro de viés regular que será inicializado como zero:
b = ParameterTensor {outDim, initValue=0}
Uma matriz de inserção que deve ser lida de um arquivo e mantida constante:
E = ParameterTensor {(embedDim:vocabSize),
initFromFilePath='./EmbeddingMatrix.txt',
learningRateMultiplier=0} # prevents learning
Um parâmetro de viés do tamanho total de uma imagem de tamanho [width x height]
com planos de cor numChannels
:
bFull = ParameterTensor {(width:height:numChannels)}
{} constante
Crie um tensor constante.
Constant {scalarValue, rows=1, cols=1}
Parâmetros
-
scalarValue
: valor dessa constante -
rows
(padrão: 1): número de linhas, se constante não for escalar -
cols
(padrão: 1): número de cols, se constante não for escalar
Valor retornado
Uma constante, um objeto escalar ou um objeto rank-1 ou rank-2 de dimensão [rows x cols]
, em que todos os elementos são preenchidos com scalarValue
.
Descrição
Um valor constante. Pode ser um objeto escalar ou um objeto rank-1 (vector) ou um objeto rank-2 (matriz) inicializado com um único valor (como 0). Observe que, como para constantes vetoriais e matrizes todos os valores são idênticos, as constantes usadas em conjunto com operações em termos de elementos geralmente podem ser especificadas como escalares, aproveitando de difusão.
Observação de implementação:
Um Constant()
é um ParameterTensor{}
com learningRateMultiplier=0
.
Exemplos
Interpolação entre dois valores com peso de interpolação alpha
no intervalo 0..1 ("multiplexer suave"):
SoftMUX (x, y, alpha) = Constant (1-alpha) .* x + Constant (alpha) .* y
Perda de rede (cf. aqui):
HammingLoss (y, p) = ReduceSum (BS.Boolean.Xor (y, Greater (p, Constant(0.5))))
hl = HammingLoss (multiLabels, probabilities)