Qual é o problema do "ReLU moribundo" nas redes neurais?

119

Referindo-se às notas do curso de Stanford sobre Redes neurais convolucionais para reconhecimento visual , um parágrafo diz:

"Infelizmente, as unidades ReLU podem ser frágeis durante o treinamento e podem" morrer ". Por exemplo, um grande gradiente que flui através de um neurônio ReLU pode fazer com que os pesos sejam atualizados de forma que o neurônio nunca seja ativado em nenhum ponto de dados novamente. Se isso acontece, o gradiente que flui através da unidade será para sempre zero a partir desse ponto. Ou seja, as unidades ReLU podem morrer irreversivelmente durante o treinamento, pois podem ser eliminadas do coletor de dados. Por exemplo, você pode achar que até 40 % da sua rede pode estar "morta" (por exemplo, neurônios que nunca são ativados em todo o conjunto de dados de treinamento) se a taxa de aprendizado estiver muito alta. Com uma configuração adequada da taxa de aprendizado, isso é menos frequente ".

O que significa morrer de neurônios aqui?

Você poderia fornecer uma explicação intuitiva em termos mais simples.

tejaskhot
fonte
2
Alguém pode encontrar uma referência a algum artigo científico sobre "neurônios mortos"? Como este é o primeiro resultado nas tentativas do Google, seria ótimo se essa pergunta fosse editada com uma referência.
Marek Židek
podemos evitar o viés pela regularização para resolver esse problema?
Len
3
Cara, eu consegui revitalizar os neurônios mortos relu, fornecendo novos valores aleatórios (distribuídos normais) em cada época para pesos <= 0. Eu uso esse método apenas em conjunto com pesos de congelamento em diferentes profundidades, à medida que o treinamento continua em épocas mais altas (I ' agora não sei se é isso que chamamos de transição de fase. Agora, podemos usar taxas de aprendizado mais altas, produz uma melhor precisão geral (testada apenas em regressão linear). É realmente fácil de implementar.
Boli
11
@boli, você pode compartilhar sua implementação aqui?
anu

Respostas:

121

Uma ReLU "inoperante" sempre gera o mesmo valor (zero, mas isso não é importante) para qualquer entrada. Provavelmente, isso é alcançado através da aprendizagem de um grande termo de viés negativo para seus pesos.

Por sua vez, isso significa que não assume nenhum papel na discriminação entre insumos. Para classificação, você pode visualizar isso como um plano de decisão fora de todos os dados de entrada possíveis.

Quando uma ReLU termina nesse estado, é improvável que se recupere, porque o gradiente da função em 0 também é 0; portanto, o aprendizado da descida do gradiente não altera os pesos. ReLUs "com vazamento" com um pequeno gradiente positivo para entradas negativas ( y=0.01xquando x <0 diz) são uma tentativa de resolver esse problema e oferecem uma chance de recuperação.

Os neurônios sigmóides e tanh podem sofrer problemas semelhantes à medida que seus valores saturam, mas sempre há pelo menos um pequeno gradiente que lhes permite se recuperar a longo prazo.

Neil Slater
fonte
7
Bom comentário e também vale a pena mencionar as Unidades Lineares Exponenciais (ELU), que podem ajudar a resolver os problemas de uma maneira melhor: arxiv.org/abs/1511.07289
padura
14
@alex: Porque o viés é muito importante para a precisão. Livrar-se do preconceito é o mesmo que dizer que todos os planos de decisão devem passar pela origem - com algumas exceções, essa é uma má escolha. De fato, livrar-se dos termos de viés em uma rede neural ou de modelos relacionados (como regressão linear ou regressão logística) geralmente significa que seu modelo sofrerá viés! É uma das poucas maneiras que você pode acabar com um modelo que é sub-dimensionadas e overfit, ao mesmo tempo,,,
Neil Slater
11
@ Alex: Eu acho que é comum adicionar um pequeno viés positivo para ReLUs. Não sei se isso ajuda com o "problema de morte da ReLU" - provavelmente não mudaria muito os valores do gradiente numericamente (porque o gradiente é 1 ou 0 para a ReLU e é quando é 1 que ele pode ultrapassar, um um pequeno viés inicial parece fazer muito pouca diferença). Principalmente, acho que é apenas um truque para adicionar um pequeno impulso ao aprendizado inicial - mas isso pode ajudar ao começar melhor e ter gradientes geralmente mais baixos antes.
Neil Slater
11
@max: Está faltando a parte "para qualquer entrada" da minha resposta. Nenhum gradiente fluirá para qualquer peso associado ao neurônio "morto" em uma rede de alimentação direta, porque todos os caminhos para esses pesos são cortados - não há caminhos alternativos para o gradiente fluir para o subconjunto de pesos que alimentam a unidade ReLU. Você pode visualizar uma ReLU em, por exemplo, uma CNN ou como tendo pesos compartilhados; nesse caso, todos os locais no mapa de recursos precisariam zerar de uma só vez. No entanto, eu veria isso como outra instância de "para qualquer entrada".
Neil Slater
11
@anu: Por descida gradiente. Um grande gradiente positivo, causado por um grande valor de erro, pode, por sua vez, fazer com que uma única etapa do termo de polarização seja grande o suficiente para "matar" o neurônio, de modo que atinja um estado (para pesos e polarização) que as entradas futuras para a função ReLU nunca ultrapasse 0.
Neil Slater
102

Vamos revisar a aparência da ReLU (Rectified Linear Unit):

xn

zn=i=0kwiain
wiainxnReLU=max(0,zn)

Assumindo uma medida de erro muito simples

error=ReLUy

errorzn=δn={1zn00zn<0
wj
error=errorwj=errorzn×znwj=δn×ajn={ajnzn00zn<0

=xn

xnx

zn<0

ReLU=max(0.1x,x)insira a descrição da imagem aqui

MohamedEzz
fonte
Você não está esquecendo o termo tendencioso da fórmula para entrada no retificador?
Tom Hale
Acho que segui a notação de alguns livros que assumem que a_0 = 1 para todas as camadas e w_0 é o viés. O viés não é importante, por isso é melhor omiti-lo de qualquer maneira #
MohamedEzz #
@MohamedEzz, eu não entendi o seu ponto What if, for the input 𝑥𝑛, the current weights put the ReLU on the left flat side while it optimally should be on the right side for this particular input ?, se a entrada for negativa, o gradiente seria 0? o que é ideal para este caso? você poderia ajudar a entendê-lo?
anu 29/03
11
Por ideal, eu quis dizer que, se a rede fizesse uma previsão melhor para essa entrada, seria necessário ajustar os pesos para que a ReLU desse um valor positivo, não seria possível fazer esse ajuste devido ao gradiente 0 que possui. no lado plano.
MohamedEzz 31/03
Resposta incrível. Obrigado
David Refaeli
13

Os neurônios ReLU produzem zero e derivam zero para todas as entradas negativas. Portanto, se os pesos em sua rede sempre levarem a entradas negativas em um neurônio ReLU, esse neurônio não estará efetivamente contribuindo para o treinamento da rede. Matematicamente, a contribuição do gradiente para as atualizações de peso provenientes desse neurônio é sempre zero (consulte o Apêndice Matemático para obter mais detalhes).

L(W)LLWL

Em geral, o que acontece depende de como as informações fluem pela rede. Você pode imaginar que, à medida que o treinamento avança, os valores que os neurônios produzem podem se desviar e possibilitar que os pesos matem todo o fluxo de dados através de alguns deles. (Às vezes, eles podem deixar essas configurações desfavoráveis ​​devido a atualizações de peso anteriores à rede!). Explorei essa idéia em um post sobre inicialização de peso - que também pode contribuir para esse problema - e sua relação com o fluxo de dados. Acho que meu argumento aqui pode ser ilustrado por uma trama desse artigo:

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

O gráfico exibe ativações em um Multi-Layer Perceptron de 5 camadas com ativações ReLU após uma passagem pela rede com diferentes estratégias de inicialização. Você pode ver que, dependendo da configuração do peso, as saídas da sua rede podem ser bloqueadas.

Apêndice Matemático

Lxj(i)jif(s)=max(0,s)sj(i)(i+1)i(i+1)

Lwjk(i)=Lxk(i+1)xk(i+1)wjk(i).

O primeiro termo à direita pode ser computado recursivamente. O segundo termo à direita é o único local que envolve diretamente o peso e pode ser dividido emwjk(i)

xk(i+1)wjk(i)=f(sj(i))sj(i)sj(i)wjk(i)=f(sj(i))xj(i).

Com isso, você pode ver que, se as saídas são sempre negativas, os pesos que levam ao neurônio não são atualizados e o neurônio não contribui para o aprendizado.

Andre P
fonte
ótima explicação !, você poderia me ajudar a entender Therefore, if your inputs are on roughly the same scale, a large step in the direction of the gradient can leave you with weights that give similar inputs which can end up being negative.como os pesos estão ficando negativos se as entradas são normalizadas?
anu 29/03
@anu A atualização de peso é , portanto, se você der um grande passo, neste caso, selecionar um grande e se for positivo, poderá ver que pode se tornar negativo. Isso é especialmente ruim se atualizarmos o viés para ser um grande valor negativo. wλdwλdww
Johnson
@JohnsonJia, ótimo, entendi :), é necessário mais um esclarecimento, por que é especialmente ruim em caso de viés em comparação com o peso, já que a contribuição negativa pode estar no peso e no viés, me corrija se eu estiver errado.?
anu 29/03
Como o viés não é modificado pela entrada: , portanto, se é muito negativo, pode permanecer negativo para todos os valores de . b z xz=wx+bbzx
Johnson
5

Para ser mais específico no idioma, enquanto o gradiente local de ReLU (que é ) multiplica o gradiente que retorna por causa da propagação de retorno, o resultado do gradiente atualizado pode ser um número negativo grande (se o gradiente que back é um número negativo grande).1

Um gradiente atualizado negativo tão grande produz um negativo grande quando a taxa de aprendizado é relativamente grande; portanto, reprimirá as atualizações que acontecerão nesse neurônio, já que é quase impossível colocar um número positivo grande para compensar o grande número negativo gerado por esse " quebrado " .w iwiwi

Misairu
fonte
4

O "Dying ReLU" refere-se ao neurônio que gera 0 para seus dados no conjunto de treinamento. Isso acontece porque a soma das entradas de peso * em um neurônio (também chamada de ativação ) se torna <= 0 para todos os padrões de entrada. Isso faz com que ReLU produza 0. Como o derivado de ReLU é 0, neste caso, nenhuma atualização de peso é feita e o neurônio fica preso na saída 0.

Coisas a serem observadas:

  1. A morte de ReLU não significa que a saída do neurônio também permaneça zero no momento do teste. Dependendo das diferenças de distribuição, isso pode ou não ser o caso.
  2. Morrer ReLU não está morto permanente. Se você adicionar novos dados de treinamento ou usar um modelo pré-treinado para um novo treinamento, esses neurônios poderão se recuperar!
  3. Tecnicamente morrendo, o ReLU não precisa gerar 0 para TODOS os dados de treinamento. Pode acontecer que ele produza valores diferentes de zero para alguns dados, mas o número de épocas não é suficiente para mover pesos significativamente.
Shital Shah
fonte