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?
machine-learning
neural-networks
deep-learning
gradient-descent
Hans-Peter Störr
fonte
fonte
Respostas:
Aqui está um artigo que explica o problema. Estou citando parte dela para esclarecer o problema.
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;
Ele também responde à pergunta que você fez:
Você pode ler o jornal para obter mais detalhes.
fonte
É 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.
Eu diria até que deveríamos proibir chamá-los de "derivativos" e começar a chamá-los de outra coisa, por exemplo,
error activation functions
nã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.
fonte
initialization that corresponds to a type of activation function one is using
em umNOTE
post, 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 .Aqui está uma explicação heurística:
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.
fonte
Vamos considerar a principal relação de recorrência que define a propagação de retorno do sinal de erro.
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.
fonte