No curso de redes neurais e aprendizado profundo de Andrew Ng, sobre o Coursera, ele diz que usar é quase sempre preferível ao .
A razão que ele dá é que as saídas usando centralizam em torno de 0 em vez de 0,5 da , e isso "torna o aprendizado para a próxima camada um pouco mais fácil".
Por que centralizar o aprendizado da velocidade de saída da ativação? Suponho que ele esteja se referindo à camada anterior, pois o aprendizado acontece durante o backprop.
Existem outros recursos que tornam o preferível? O gradiente mais acentuado atrasaria o desaparecimento dos gradientes?
Existem situações em que o seria preferível?
Respostas leves e matemáticas, preferidas.
Respostas:
Yan LeCun e outros argumentam no Efficient BackProp que
É por isso que você deve normalizar suas entradas para que a média seja zero.
A mesma lógica se aplica às camadas intermediárias:
O postscript @craq destaca que esta citação não faz sentido para ReLU (x) = max (0, x), que se tornou uma função de ativação amplamente popular. Embora o ReLU evite o primeiro problema em zigue-zague mencionado por LeCun, ele não resolve este segundo ponto por LeCun, que afirma ser importante empurrar a média para zero. Gostaria muito de saber o que LeCun tem a dizer sobre isso. De qualquer forma, existe um documento chamado Normalização em lote , que se baseia no trabalho de LeCun e oferece uma maneira de resolver esse problema:
A propósito, este vídeo de Siraj explica muito sobre as funções de ativação em 10 minutos divertidos.
@elkout diz "O verdadeiro motivo pelo qual o tanh é preferido em comparação ao sigmóide (...) é que os derivados do tanh são maiores que os derivados do sigmóide".
Eu acho que isso não é problema. Eu nunca vi isso ser um problema na literatura. Se lhe incomoda que um derivado seja menor que outro, você pode apenas escalá-lo.
A função logística tem a formaσ( x ) = 11 + e- k x . Normalmente, usamosk = 1 , mas nada o proíbe de usar outro valor parak para aumentar suas derivadas, se esse era o seu problema.
Nitpick: tanh também é uma função sigmóide . Qualquer função com a forma S é um sigmóide. O que vocês estão chamando de sigmóide é a função logística. A razão pela qual a função logística é mais popular são as razões históricas. É utilizado há mais tempo por estatísticos. Além disso, alguns acham que é mais biologicamente plausível.
fonte
Mas por que a tangente hiperbólica tem derivadas maiores? Apenas para lhe dar uma intuição muito simples, você pode observar o seguinte gráfico:
O fato de o intervalo estar entre -1 e 1 em comparação com 0 e 1, torna a função mais conveniente para redes neurais. Além disso, se eu usar um pouco de matemática, posso provar que:
fonte
sigmoid(x) - 0.5
tanh
Respondendo a parte da pergunta até agora não endereçada:
Andrew Ng diz que o uso da função logística (geralmente conhecida como sigmóide) realmente só faz sentido na camada final de uma rede de classificação binária.
fonte
Tudo depende essencialmente das derivadas da função de ativação, o principal problema com a função sigmóide é que o valor máximo de sua derivada é 0,25, o que significa que a atualização dos valores de W e b será pequena.
A função tanh, por outro lado, tem uma derivada de até 1,0, tornando as atualizações de W e b muito maiores.
Isso torna a função tanh quase sempre melhor como uma função de ativação (para camadas ocultas) do que a função sigmóide.
Para provar isso eu mesmo (pelo menos em um caso simples), codifiquei uma rede neural simples e usei sigmoid, tanh e relu como funções de ativação, depois plotei como o valor do erro evoluiu e foi isso que obtive.
O caderno completo que escrevi está aqui https://www.kaggle.com/moriano/a-showcase-of-how-relus-can-speed-up-the-learning
Se ajudar, aqui estão os gráficos das derivadas da função tanh e da sigmóide (preste atenção ao eixo vertical!)
fonte