Como a função de ativação retilínea resolve o problema do gradiente de fuga nas redes neurais?

40

Encontrei a unidade linear retificada (ReLU) elogiada em vários locais como uma solução para o problema do gradiente de fuga para redes neurais. Ou seja, usa-se max (0, x) como função de ativação. Quando a ativação é positiva, é óbvio que isso é melhor do que, digamos, a função de ativação sigmóide, pois sua derivação é sempre 1 em vez de um valor arbitrariamente pequeno para x grande. Por outro lado, a derivação é exatamente 0 quando x é menor que 0. No pior dos casos, quando uma unidade nunca é ativada, os pesos para essa unidade também nunca mudam mais e a unidade seria para sempre inútil - o que parece muito pior do que gradientes muito pequenos. Como os algoritmos de aprendizado lidam com esse problema quando usam o ReLU?

Hans-Peter Störr
fonte
2
O que você descreve como o pior caso é chamado de morrer Relu
Martin Thoma
Penso que a ideia é que, para uma função logística, uma vez que o gradiente pode se tornar arbitrariamente pequeno, você pode obter um gradiente que desaparece numericamente compondo várias logísticas "desprezíveis" (o problema pioraria para arquiteturas mais profundas). Para a função de rampa, como o gradiente é constante seccionalmente, um gradiente composto de fuga pode ocorrer apenas se houver um componente que é, na verdade, 0.
GeoMatt22
(Não tenho certeza se isso é "para sempre"? Não poderia se tornar diferente de zero após mais treinamento? Das dependências de outros nós e / ou do atual mini-lote de dados? (Para descida estocástica do gradiente)
GeoMatt22

Respostas:

33

Aqui está um artigo que explica o problema. Estou citando parte dela para esclarecer o problema.

A função de ativação do retificador permite que uma rede obtenha facilmente representações esparsas. Por exemplo, após a inicialização uniforme dos pesos, cerca de 50% dos valores de saída contínuos das unidades ocultas são zeros reais e essa fração pode facilmente aumentar com a regularização indutora de dispersão.

Portanto, a função de ativação do retificador introduz um efeito de escassez na rede. Aqui estão algumas vantagens da escarsidade do mesmo artigo;

  • Desembaraço de informações . Um dos objetivos reivindicados dos algoritmos de aprendizagem profunda (Bengio, 2009) é separar os fatores que explicam as variações nos dados. Uma representação densa é altamente emaranhada, porque quase qualquer alteração na entrada modifica a maioria das entradas no vetor de representação. Em vez disso, se uma representação é esparsa e robusta para pequenas alterações de entrada, o conjunto de recursos diferentes de zero é quase sempre conservado aproximadamente por pequenas alterações na entrada.

  • Representação eficiente de tamanho variável . Entradas diferentes podem conter quantidades diferentes de informações e seriam mais convenientemente representadas usando uma estrutura de dados de tamanho variável, o que é comum em representações de informações por computador. A variação do número de neurônios ativos permite que um modelo controle a dimensionalidade efetiva da representação para uma determinada entrada e a precisão necessária.

  • Separabilidade linear . Também é mais provável que representações esparsas sejam separáveis ​​linearmente ou mais facilmente separáveis ​​com menos máquinas não lineares, simplesmente porque as informações são representadas em um espaço de alta dimensão. Além disso, isso pode refletir o formato original dos dados. Em aplicativos relacionados a texto, por exemplo, os dados brutos originais já são muito escassos.

  • Distribuído, mas escasso . Representações distribuídas densas são as representações mais ricas, sendo potencialmente exponencialmente mais eficientes do que as puramente locais (Bengio, 2009). A eficiência de representações esparsas ainda é exponencialmente maior, com o poder do expoente sendo o número de recursos diferentes de zero. Eles podem representar um bom compromisso em relação aos critérios acima.

Ele também responde à pergunta que você fez:

Pode-se supor que a saturação rígida em 0 possa prejudicar a otimização ao bloquear a propagação reversa do gradiente. Para avaliar o impacto potencial desse efeito, também investigamos a ativação do softplus: softplus(x)=registro(1+ex)(Dugas et al., 2001), uma versão suave da não linearidade retificadora. Perdemos a esparsidade exata, mas podemos esperar obter um treinamento mais fácil. No entanto, resultados experimentais tendem a contradizer essa hipótese, sugerindo que zeros fortes podem realmente ajudar no treinamento supervisionado. Nossa hipótese é de que as não linearidades rígidas não prejudiquem desde que o gradiente possa se propagar por alguns caminhos, ou seja, que algumas das unidades ocultas em cada camada sejam diferentes de zero. Com o crédito e a culpa atribuídos a essas unidades ON, em vez de distribuídos de maneira mais uniforme, sugerimos que a otimização seja mais fácil.

Você pode ler o jornal para obter mais detalhes.

yasin.yazici
fonte
18

É por isso que provavelmente é uma idéia melhor usar PReLU, ELU ou outras ativações vazias do tipo ReLU que não diminuem para 0, mas caem para algo como 0,1 * x quando x fica negativo para continuar aprendendo. Pareceu-me por muito tempo que as ReLUs são uma história como sigmóide, embora, por algum motivo, as pessoas ainda publiquem documentos com elas. Por quê? Eu não sei.

Dmytro Mishkin e outros caras realmente testaram uma rede com vários tipos de ativação diferentes, você deve examinar as descobertas deles sobre o desempenho de diferentes funções de ativação e outras coisas. Algumas funções, como o XOR, são melhor aprendidas com o ReLU simples. Não pense em nenhum material neural em termos de dogma, porque as redes neurais têm muito trabalho em andamento. Ninguém no mundo realmente os conhece e entende bem o suficiente para contar a verdade divina. Ninguém. Experimente as coisas, faça suas próprias descobertas. Lembre-se de que o uso do ReLU em si é um desenvolvimento muito recente e, durante décadas, todos os diferentes doutores da área usaram funções de ativação complicadas, das quais agora só podemos rir. Muitas vezes, "saber" demais pode gerar resultados ruins. É importante entender que as redes neurais não são uma ciência exata. Nada na matemática diz que as redes neurais realmente funcionam tão bem quanto funcionam. É heurístico. E por isso é muito maleável.

Até a ativação de valor absoluto obtém bons resultados em alguns problemas, por exemplo, problemas do tipo XOR. Diferentes funções de ativação são mais adequadas para diferentes propósitos. Eu tentei o Cifar-10 com abs () e parecia ter um desempenho pior. No entanto, não posso dizer que "é uma função de ativação pior para reconhecimento visual", porque não tenho certeza, por exemplo, se minha pré-inicialização foi ideal para ela etc. O próprio fato de estar aprendendo relativamente bem me surpreendeu.

Além disso, na vida real, as "derivadas" que você passa para o backprop não precisam necessariamente corresponder às derivadas matemáticas reais.

Eu diria até que deveríamos proibir chamá-los de "derivativos" e começar a chamá-los de outra coisa, por exemplo, error activation functionsnão fechar nossas mentes às possibilidades de mexer com elas. Você pode, por exemplo, usar a ativação ReLU, mas fornecer 0,1 ou algo parecido em vez de 0 como uma derivada para x <0. De certa forma, você tem uma ReLU simples, mas com os neurônios não sendo capazes de "morrer de adaptabilidade". Eu chamo isso de NecroRelu, porque é um ReLU que não pode morrer. E, em alguns casos (definitivamente não na maioria), isso funciona melhor que o LeakyReLU comum, que na verdade tem 0,1 derivada em x <0 e é melhor que o ReLU usual. Não creio que muitos outros tenham investigado essa função, porém, isso ou algo semelhante possa realmente ser uma função de ativação geralmente legal que ninguém considerou apenas porque está concentrada demais em matemática.

Quanto ao que geralmente é usado, para a função de ativação tanH (x) é comum passar 1 - x² em vez de 1 - tanH (x) ² como derivado para calcular as coisas mais rapidamente.

Além disso, lembre-se de que ReLU não é tão "obviamente melhor" do que, por exemplo, TanH. O TanH provavelmente pode ser melhor em alguns casos. Apenas, ao que parece, não em reconhecimento visual. No entanto, o ELU, por exemplo, possui um pouco de suavidade sigmóide e é uma das funções de ativação mais conhecidas para reconhecimento visual no momento. Eu realmente não tentei, mas aposto que é possível definir vários grupos com diferentes funções de ativação no mesmo nível de camada para uma vantagem. Porque, uma lógica diferente é melhor descrita com diferentes funções de ativação. E às vezes você provavelmente precisa de vários tipos de avaliação.

Observe que é importante ter uma inicialização que corresponda ao tipo de sua função de ativação. As ReLUs com vazamento precisam de outras init que as ReLUs simples, por exemplo.

EDIT: Na verdade, o ReLU padrão parece menos propenso a sobreajuste versus vazamentos nas arquiteturas modernas. Pelo menos no reconhecimento de imagem. Parece que, se você estiver buscando uma rede de precisão muito alta com uma enorme carga de parâmetros, talvez seja melhor usar as opções simples ReLU vs leaky. Mas, é claro, teste tudo isso sozinho. Talvez algumas coisas vazadas funcionem melhor se for dada mais regularização.

Íhor Mé
fonte
Estou interessado no seu NecroReLU, mas não consigo entender pelo que você escreveu, como é diferente do LeakyReLU. Você poderia esclarecer?
Tom Hale
Diferente em que a ativação é ReLU, mas a derivada é LReLU
Íhor Mé 27/02
@ ÍhorMé, como você mencionou no initialization that corresponds to a type of activation function one is usingem um NOTEpost, você poderia fornecer suas sugestões para isso nas mesmas linhas? Não estou totalmente convencido de que o uso de ativações ReLu sobre sigmoid / tanH seja uma solução para o problema de gradiente de fuga / explosão .
anu
16

Aqui está uma explicação heurística:

  • Cada atualização de gradiente no backprop consiste em vários fatores multiplicados.
  • Quanto mais você avança no início da rede, mais esses fatores são multiplicados para obter a atualização do gradiente.
  • Muitos desses fatores são derivados da função de ativação dos neurônios - o restante são pesos, vieses etc.
  • Desses fatores, os que importam intuitivamente são pesos, vieses etc. As derivadas da função de ativação são mais um tipo de parâmetro de ajuste, projetado para fazer com que a descida do gradiente vá na direção certa e no tipo certo de velocidade.
  • Se você multiplicar um monte de termos inferiores a 1, eles tenderão a zero quanto mais termos você tiver. Daí desaparecer o gradiente à medida que você se afasta da camada de saída, se tiver funções de ativação com inclinação <1.
  • Se você multiplicar um monte de termos maiores que 1, eles tenderão ao infinito quanto mais você tiver, daí explodindo o gradiente à medida que você se afasta da camada de saída se tiver funções de ativação com inclinação> 1.
  • Que tal se pudéssemos, de alguma maneira, magicamente, obter esses termos contribuídos pela derivada das funções de ativação como 1. Isso intuitivamente significa que todas as contribuições para as atualizações de gradiente vêm da entrada para o problema e o modelo - os pesos, entradas, vieses - ao invés de algum artefato da função de ativação escolhida.
  • RELU tem gradiente 1 quando a saída é> 0 e zero, caso contrário.
  • Portanto, multiplicar um conjunto de derivadas RELU nas equações backprop tem a boa propriedade de ser 1 ou zero - a atualização não é nada ou recebe contribuições inteiramente de outros pesos e preconceitos.

Você pode pensar que seria melhor ter uma função linear, em vez de achatar quando x <0. A idéia aqui é que a RELU gera redes esparsas com um número relativamente pequeno de links úteis, que tem mais plausibilidade biológica, portanto a perda de um monte de pesos é realmente útil. Além disso, a simulação de funções interessantes com redes neurais só é possível com alguma não linearidade na função de ativação. Uma função de ativação linear resulta em uma saída linear, o que não é muito interessante.

Tom Walker
fonte
ótima explicação, você poderia elaborar mais sobre o sexto ponto Além disso, você poderia fornecer suas sugestões para isso nas mesmas linhas, não estou totalmente convencido de que o uso das ativações ReLu sobre sigmoid / tanH seja uma solução para o problema de gradiente de fuga / explosão.
anu
1
A inicialização sensível do peso também é importante; mas o mesmo acontece com a escolha da função de ativação. Como um exemplo trivial, se todos os seus pesos forem zerados e você usar a RELU, todas as saídas de seus neurônios serão zero e permanecerão zero ... Nem a RELU sozinha nem as técnicas de inicialização resolvem completamente o gradiente de fuga / explosão, mas as duas ajudam. Não sabe ao certo o que você quer dizer com refração no ponto 6, o que não está claro?
Tom Walker
1

Vamos considerar a principal relação de recorrência que define a propagação de retorno do sinal de erro.

WEubEuEuf

hEuEu

sEu=WEu(hEu-1)+bEu

hEu=f(sEu)

δEu

δEu=WEu+1(δEu+1f(sEu))

ff(sEu)=(1-hEu2)hEu

f=Reeuvocê=mumax(0 0,x)ff=numpy.where(hEu>0 0,1,0 0)

Essa equação também demonstra a outra característica do problema para reativar a ativação - neurônios mortos: se um dado neurônio fosse inicializado de uma maneira que não disparasse para nenhuma entrada (sua ativação é zero), seu gradiente também seria zero e portanto, nunca seria ativado.

user1767774
fonte