Quais são os bons pesos iniciais em uma rede neural?


68

Acabo de ouvir que é uma boa ideia escolher pesos iniciais de uma rede neural no intervalo , onde é o número de entradas para um dado neurônio. Supõe-se que os conjuntos sejam normalizados - média 0, variação 1 (não sei se isso importa).(1d,1d)d

Por que essa é uma boa ideia?


Veja minha tese de mestrado, página 81 para uma visão geral das técnicas de inicialização.
Martin Thoma

Respostas:


47

Suponho que você esteja usando neurônios logísticos e que esteja treinando por gradiente de descida / propagação traseira.

A função logística é quase plana para grandes entradas positivas ou negativas. A derivada em uma entrada de é cerca de , mas em a derivada é de cerca de . Isso significa que se a entrada de um neurônio logístico for , então, para um determinado sinal de treinamento, o neurônio aprenderá cerca de vezes mais lentamente que se a entrada for .21/10101/220001022002

Se você deseja que o neurônio aprenda rapidamente, é necessário produzir um enorme sinal de treinamento (como uma função de perda de entropia cruzada) ou deseja que o derivado seja grande. Para aumentar a derivada, defina os pesos iniciais para obter entradas no intervalo .[4,4]

Os pesos iniciais que você fornece podem ou não funcionar. Depende de como as entradas são normalizadas. Se as entradas forem normalizadas com média e desvio padrão , uma soma aleatória de termos com pesos uniformes em terá média e variância , independente de . A probabilidade de você obter uma soma fora de é pequena. Isso significa que, à medida que você aumenta , você não está causando a saturação dos neurônios para que eles não aprendam.01d(1d,1d)013d[4,4]d

Com entradas que não são normalizadas, esses pesos podem não ser eficazes para evitar a saturação.


11
Então, basicamente, deve-se sempre considerar, pelo menos, normalizar os dados. Faz sentido agora. Você poderia explicar por que o desvio padrão será 1/3 e qual é a probabilidade da soma de entrada fora do intervalo <-4,4>?
Elmes

11
Existem algumas propriedades básicas de variação que implicam isso: Se e são independentes, então e se e são independentes e têm média , então . XYVar(X+Y)=Var(X)+Var(Y)XY0Var(XY)=Var(X)Var(Y)
Douglas Zare

11
Você pode estimar a probabilidade de uma variável aleatória estar a pelo menos desvios padrão da média usando a desigualdade de Chebyshev. Na prática, isso não é nítido, mas o resultado exato depende da distribuição. 12
Douglas Zare

A propósito, eu calculei mal. A variação é portanto o desvio padrão é . 1313
Douglas Zare 14/01

11
"A função logística é quase plana para grandes entradas positivas ou negativas. A derivada em uma entrada de ..." O sujeito relevante não deveria ser a derivada da função de custo da regressão logística? Em que a entrada para a derivada da função de custo já é escalada pela função logística para (0,1), independentemente do tamanho dos pesos e sinais?
Moobie

28

[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 tangentes hiperbólicas: faça uma amostra de um uniforme (-r, r) com (fan-in é o número de insumos da unidade).r=6fan-in+fan-out
    • para unidades sigmóides: faça uma amostra de um uniforme (-r, r) com (fan-in é o número de insumos 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.


2
Gostaria de acrescentar duas referências úteis: 1) Investigando profundamente os retificadores: superando o desempenho em nível humano na classificação ImageNet - sobre a importância do dimensionamento sensível à ativação arxiv.org/abs/1502.01852 2) Soluções exatas para a dinâmica não-linear de aprendizado em redes neurais lineares profundas arxiv.org/abs/1312.6120 - matrizes ortonormais são muito melhores do que apenas o ruído Gaussian
old-ufo

11
Um editor sugere que as inicializações do sigmóide e da tangente hiperbólica devem ser alteradas para coincidir com o artigo original.
gung - Restabelece Monica

2
Você quer manter essa edição, Frank? Caso contrário, você pode reverter.
gung - Restabelece Monica

Eu devo estar esquecendo alguma coisa. Onde se diz no artigo de Glorot e Bengio (2010) que eles recomendam usar 4 vezes o valor da Equação 16 ao usar funções logísticas de ativação sigmóide? A Equação 16 segue o uso da Equação 12 e a variação de uma distribuição uniforme, mas a Equação 16 é derivada assumindo uma ativação simétrica com derivada unitária em 0. Assim, por exemplo, uma função de ativação tanh, mas não uma função de ativação logística (não simétrica). Além disso, eles nem testam essa inicialização proposta com sigmoide logístico; eles apenas o testam com tanh e softsign.
Tommy G

10

A explicação a seguir é retirada do livro: Redes Neurais para Reconhecimento de Padrões, de Christopher Bishop. Grande livro! Suponha que você tenha branqueado as entradas anteriormente para as unidades de entrada, ou seja, e

<xi>=0
<xi2>=1

A questão é: como escolher melhor os pesos ?. A idéia é escolher valores dos pesos aleatoriamente após uma distribuição que ajude o processo de otimização a convergir para uma solução significativa.

Você tem para ativar as unidades na primeira camada, que . Agora, como você escolhe os pesos independentemente das entradas, e onde sigma é a variação da distribuição de pesos. Para obter esse resultado, é necessário lembrar que os pesos são inicializados independentemente um do outro, ou seja,

y=g(a)
a=i=0dwixi
<a>=i=0d<wixi>=i=0d<wi><xi>=0
<a2>=(i=0dwixi)(i=0dwixi)=i=0d<wi2><xi2>=σ2d
<wiwj>=δij

Erro menor: vez de . <xi2>=10
precisa saber é

Isso explica como você alcança um Ceratin assumindo que conhece o necessário . Pelo que entendi, deve ser pequeno para permitir um grande valor da derivada sigmóide, mas não muito pequeno para que os deltas não desapareçam. Isso é verdade? Se sim - é uma boa regra dizer que deve ser ~ 0,2? σααα
Uri

Isso é especialmente verdadeiro para redes neurais profundas, nas quais as unidades tendem a saturar rapidamente à medida que você adiciona camadas. Existem vários artigos que tratam dessa questão. Um bom ponto de partida pode ser "Compreender a dificuldade de redes neurais formação profunda feedforward" por glorot e Bengio
jpmuc

10

Bem, apenas como uma atualização, Explorando profundamente os retificadores: superando o desempenho em nível humano n A classificação ImageNet de He et al introduziu uma inicialização especificamente com a inicialização, w = U([0,n]) * sqrt(2.0/n)onde nestá o número de entradas do seu NN. Eu já vi essa inicialização usada em muitos trabalhos recentes (também com ReLU). Na verdade, eles mostram como isso começa a reduzir a taxa de erro muito mais rapidamente do que o (-1 / n, 1 / n) que você mencionou. Para obter uma explicação completa, consulte o documento, mas veja a rapidez com que ele converge: A convergência de um modelo grande de 22 camadas


Uau! Melhoria significativa para mim.
Thomas W

Porém, não para um grande número de entradas ... falha com o MNIST.
Thomas W

Observe que a inicialização He é projetada especificamente para (P) ReLUs e explica o fato de que não é simétrica (que é uma das suposições na inicialização de Xavier). Não se deixe enganar por este gráfico fora de contexto!
Tsjolder

5

A idéia é que você deseja inicializar os pesos de forma a garantir um bom fluxo de dados para frente e para trás na rede. Ou seja, você não deseja que as ativações diminuam ou aumentem consistentemente à medida que avança na rede.

Esta imagem mostra as ativações de um ReLU Multi-Layer Perceptron de 5 camadas em 3 estratégias diferentes de inicialização após uma passagem do MNIST pela rede.

Ativações em um ReLU MLP com diferentes estratégias de inicialização

Nos três casos, os pesos são calculados a partir de uma distribuição normal centralizada em zero, determinada pelo seu desvio padrão. Você pode ver que, se os pesos iniciais forem muito pequenos (o desvio padrão é pequeno), as ativações serão bloqueadas e, se forem muito grandes, as ativações explodirão. O valor do meio, aproximadamente à direita, pode ser encontrado definindo os pesos de forma que a variação das ativações e atualizações de gradiente permaneça aproximadamente a mesma que você passa pela rede.

Eu escrevi um post sobre a inicialização do peso que entra em mais detalhes, mas a idéia básica é a seguinte.

Se denota as ativações da ésima camada, o tamanho da camada e os pesos que os conectam à -st camada, então um podemos mostrar que, para as funções de ativação com , temosx(i)iniw(i)(i+1)ff(s)1

Var(x(i+1))=niVar(x(i))Var(w(i))

Para conseguir , portanto, precisamos impor a condiçãoVar(x(i+1))=Var(x(i))

Var(w(i))=1ni.

Se denotarmos por , no passe para trás, queremos da mesma formaLxj(i)Δj(i)

Var(Δ(i))=ni+1Var(Δ(i+1))Var(w(i)).

A menos que , tenhamos que comprometer-se entre essas duas condições, e uma escolha razoável é a média harmônicani=ni+1

Var(w(i))=2ni+ni+1.

Se amostrarmos pesos de uma distribuição normal , satisfazeremos essa condição com . Para uma distribuição uniforme , devemos tomar desde que . Chegamos assim à inicialização do Glorot. Essa é a estratégia de inicialização padrão para as camadas de convolução densa e 2D no Keras, por exemplo.N(0,σ)σ=2ni+ni+1U(a,a)a=6ni+ni+1Var(U(a,a))=a2/3

A inicialização do Glorot funciona muito bem para ativações triviais e , mas não funciona tão bem para . Felizmente, como zera apenas as entradas negativas, ele remove aproximadamente metade da variação e isso é facilmente alterado multiplicando uma de nossas condições acima por duas:tanhReLUf(s)=ReLU(s)

Var(w(i))=2ni.

3

Uma outra técnica que alivia o problema da inicialização do peso é a Normalização em Lote . Ele atua para padronizar a média e a variação de cada unidade, a fim de estabilizar o aprendizado, conforme descrito no artigo original . Na prática, as redes que usam BN (Normalização em lote) são significativamente mais robustas à inicialização incorreta. O BN funciona da seguinte maneira: Calculamos a média e a variação empíricas de cada minilote e padronizamos a entrada e forme a saída escalandoxiBN(xi)xiγβ

μB=1mi=1Mxi   and   σB2=1mi=1m(xiμB)2x^i=xiμBσB2+ϵ   and   BN(xi)=γx^i+β
xiBN(xi)x^i por e adicionando ambos aprendidos durante o treinamento.γβ

O BN apresenta dois parâmetros extras ( e ) por ativação que permitem que o tenha qualquer desvio médio e padrão. A razão para isso é normalizar pode reduzir seu poder expressivo. Essa nova parametrização possui uma melhor dinâmica de aprendizado: na parametrização antiga, a média de era determinada por uma interação complicada entre os parâmetros de todas as camadas anteriores - portanto, pequenas alterações nos parâmetros da rede ampliam à medida que a rede se torna mais profunda. Na nova parametrização, a média de é determinada por que aprendemos junto comp x i x i x i x i p yγβx^ixixix^iβγdurante o treinamento. Assim, a Normalização em lote estabiliza o aprendizado.

Como resultado, a Normalização em lote permite um treinamento mais rápido usando taxas de aprendizado muito mais altas e alivia o problema de uma má inicialização. O BN também possibilita o uso de não linearidades de saturação, impedindo que a rede fique presa nos modos de saturação. Em resumo, a Normalização em lote é uma transformação diferenciável que introduz ativações normalizadas na rede. Na prática, uma camada BN pode ser inserida imediatamente após uma camada totalmente conectada.

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.