Como escolher uma função de ativação?

13

Escolho a função de ativação para a camada de saída, dependendo da saída necessária e das propriedades da função de ativação que conheço. Por exemplo, eu escolho a função sigmóide quando estou lidando com probabilidades, uma ReLU quando estou lidando com valores positivos e uma função linear quando estou lidando com valores gerais.

Em camadas ocultas, uso um ReLU com vazamento para evitar neurônios mortos em vez do ReLU e o tanh em vez do sigmóide. Claro, eu não uso uma função linear em unidades ocultas.

No entanto, a escolha deles na camada oculta deve-se principalmente a tentativa e erro.

Existe alguma regra prática sobre qual função de ativação provavelmente funcionará bem em algumas situações? Pegue o termo situações o mais geral possível: pode estar se referindo à profundidade da camada, à profundidade do NN, ao número de neurônios dessa camada, ao otimizador que escolhemos, ao número de recursos de entrada do NN. nessa camada, à aplicação deste NN, etc.

Em sua resposta , cantordust refere-se a outras funções de ativação que não mencionei, como ELU e SELU. Essas informações são mais do que bem-vindas. No entanto, quanto mais funções de ativação descubro, mais confuso estou na escolha da função a ser usada em camadas ocultas. E não acho que jogar uma moeda seja uma boa maneira de escolher uma função de ativação.

gvgramazio
fonte

Respostas:

10

Parece-me que você já entende as deficiências de ReLUs e sigmoides (como neurônios mortos no caso de ReLU simples). Eu sugeriria olhar para ELU (unidades lineares exponenciais) e SELU (versão auto-normalizada de ELU). Sob algumas suposições suaves, estes últimos têm a boa propriedade de auto-normalização, o que mitiga o problema de desaparecer e explodir gradientes. Além disso, eles propagam a normalização - isto é, garantem que a entrada para a próxima camada terá média zero e variação unitária.

Editar:


Seria incrivelmente difícil recomendar uma função de ativação que funcione para todos os casos de uso (embora eu acredite que o SELU foi projetado para fazer a coisa certa com praticamente qualquer entrada). Há muitas considerações - quão difícil é calcular a derivada (se é alguma coisa diferenciada!), Quão rapidamente uma rede com o AF escolhido converge, quão suave é se satisfaz as condições do teorema da aproximação universal , seja preserva a normalização e assim por diante. Você pode ou não se importar com alguns ou qualquer um deles.

A conclusão é que não há regra universal para escolher uma função de ativação para camadas ocultas. Pessoalmente, eu gosto de usar sigmóides (especialmente tanh) porque eles são bem limitados e muito rápidos para calcular, mas o mais importante porque eles funcionam nos meus casos de uso . Outros recomendam ReLU com vazamento para as camadas de entrada e ocultas como uma função essencial se a sua rede falhar em aprender. Você pode até misturar e combinar funções de ativação para desenvolver redes neurais para aplicações sofisticadas .

No final do dia, você provavelmente terá tantas opiniões quanto as pessoas sobre a escolha correta da função de ativação, portanto a resposta curta provavelmente deve ser: comece com o AF do dia (vazamento ReLU / SELU?) e trabalhe com outros AFs em ordem decrescente de popularidade se sua rede se esforçar para aprender alguma coisa.

cantordust
fonte
1
Certo, esqueci a propagação da normalização. Obrigado por me lembrar. No entanto, a questão ainda não foi respondida. Existe uma regra ou algo para escolher quais funções de ativação devo colocar nas camadas ocultas? Para simplificar, estou falando apenas de camadas simplesmente totalmente conectadas. Eu não quero complicar o assunto com circunvoluções, associação, etc.
gvgramazio
@gvgramazio Editei a resposta, espero que seja um pouco mais útil agora.
Cantordust
Com a edição, acho que você respondeu à minha pergunta, além de fornecer links interessantes (em particular o que diz respeito a misturar e combinar ). Infelizmente não é a resposta que eu queria ouvir. Vou manter minha pergunta em aberto por mais alguns dias. Se ninguém encontrar uma resposta melhor, marcarei a sua como aceita.
Gvgramazio
-1

Não sei em que tipo de redes neurais você está trabalhando. Mas também se deve considerar as funções de ativação tanh ao lidar com redes neurais recorrentes. O porquê é evitar a explosão de problemas de gradiente, pois a função tanh é limitada pela diferença da função RELU, por exemplo.

Alexis
fonte
Na questão, afirmei que uso tanh e sigmoid, não apenas ReLU. Além disso, para simplificar, estou me referindo em geral às camadas totalmente conectadas ocultas clássicas. Se você acha que o fato de estarmos lidando com uma rede neural recorrente é significativo para a escolha da função de ativação, indique o motivo disso. O fenômeno de explosão / fuga também pode ocorrer em redes neurais não recorrentes.
gvgramazio