COMO: Inicialização de peso da rede neural profunda

10

Dada a tarefa de aprendizado difícil (por exemplo, alta dimensionalidade, complexidade inerente aos dados), as Redes Neurais Profundas se tornam difíceis de treinar. Para facilitar muitos dos problemas, pode-se:

  1. Normalizar && escolher dados de qualidade
  2. escolha um algoritmo de treinamento diferente (por exemplo, RMSprop em vez de Gradient Descent)
  3. escolha uma função de custo de gradiente mais íngreme (por exemplo, entropia cruzada em vez de MSE)
  4. Use estrutura de rede diferente (por exemplo, camadas de convolução em vez de Feedforward)

Ouvi dizer que existem maneiras inteligentes de inicializar pesos melhores. Por exemplo, você pode escolher melhor a magnitude: Glorot e Bengio (2010)

  • para unidades sigmóides: faça uma amostra de um uniforme (-r, r) comr=6Nin+Nout
  • ou unidades tangentes hiperbólicas: faça uma amostra de um uniforme (-r, r) comr=46Nin+Nout

Existe alguma maneira consistente de inicializar os pesos melhor?

Joonatan Samuel
fonte

Respostas:

7

Até onde eu sei, as duas fórmulas que você deu são praticamente a inicialização padrão. Eu tinha feito uma revisão de literatura há algum tempo, copiei abaixo se estiver interessado.


[1] aborda a questão:

Primeiro, os pesos não devem ser definidos como zeros, a fim de quebrar a simetria ao retrograr:

Geralmente, os vieses podem ser inicializados com zero, mas os pesos precisam ser inicializados com cuidado para quebrar a simetria entre unidades ocultas da mesma camada. Como unidades de saída diferentes recebem sinais de gradiente diferentes, esse problema de quebra de simetria não diz respeito aos pesos de saída (nas unidades de saída), que também podem ser definidos como zero.

Algumas estratégias de inicialização:

  • [2] e [3] recomendam o dimensionamento pela inversa da raiz quadrada do fan-in
  • Glorot e Bengio (2010) e os Tutoriais de Aprendizagem Profunda usam uma combinação de fan-in e fan-out:
    • para unidades sigmóides: faça uma amostra de um uniforme (-r, r) com (fan-in é o número de entradas da unidade).r=6fan-in+fan-out
    • para unidades tangentes hiperbólicas: experimente um uniforme (-r, r) com (fan-in é o número de entradas da unidade).r=46fan-in+fan-out
  • no caso de RBMs, um Gaussiano de média zero com um pequeno desvio padrão em torno de 0,1 ou 0,01 funciona bem (Hinton, 2010) para inicializar os pesos.
  • Inicialização ortogonal da matriz aleatória, ou seja W = np.random.randn(ndim, ndim); u, s, v = np.linalg.svd(W), use-a ucomo sua matriz de inicialização.

Além disso, o pré-treinamento não supervisionado pode ajudar em algumas situações:

Uma escolha importante é se deve-se usar o pré-treinamento não supervisionado (e qual algoritmo de aprendizado de recursos não supervisionado usar) para inicializar os parâmetros. Na maioria das situações, encontramos pré-treinamento não supervisionado para ajudar e muito raramente prejudicar, mas é claro que isso implica tempo de treinamento adicional e hiperparâmetros adicionais.

Algumas bibliotecas da RNA também possuem algumas listas interessantes, como Lasanha :

Constant([val]) Initialize weights with constant value.
Normal([std, mean]) Sample initial weights from the Gaussian distribution.
Uniform([range, std, mean]) Sample initial weights from the uniform distribution.
Glorot(initializer[, gain, c01b])   Glorot weight initialization.
GlorotNormal([gain, c01b])  Glorot with weights sampled from the Normal distribution.
GlorotUniform([gain, c01b]) Glorot with weights sampled from the Uniform distribution.
He(initializer[, gain, c01b])   He weight initialization.
HeNormal([gain, c01b])  He initializer with weights sampled from the Normal distribution.
HeUniform([gain, c01b]) He initializer with weights sampled from the Uniform distribution.
Orthogonal([gain])  Intialize weights as Orthogonal matrix.
Sparse([sparsity, std]) Initialize weights as sparse matrix.

[1] Bengio, Yoshua. " Recomendações práticas para o treinamento baseado em gradiente de arquiteturas profundas. " Redes Neurais: Truques do comércio. Springer Berlin Heidelberg, 2012. 437-478.

[2] LeCun, Y., Bottou, L., Orr, GB e Muller, K. (1998a). Backprop eficiente. Em redes neurais, truques do comércio .

[3] Glorot, Xavier e Yoshua Bengio. " Entendendo a dificuldade de treinar redes neurais profundas de avanço ". Conferência internacional sobre inteligência artificial e estatística. 2010.

Franck Dernoncourt
fonte
2
Algo que você parece estar perdendo é a Normalização de Lote. Descrito aqui: arxiv.org/abs/1502.03167 Pode ser útil.
Joonatan Samuel 28/03
Kaiming He, Xiangyu Zhang, Shaoqing Ren e Jian Sun publicaram um artigo mais recente que inclui uma variação da inicialização do peso Xavier de Glorot e Bengio: "Investigando profundamente os retificadores: superando o desempenho em nível humano na classificação ImageNet" .
mjul