En el curso de Redes neuronales y aprendizaje profundo de Andrew Ng en Coursera , dice que usar es casi siempre preferible a usar .
La razón que da es que las salidas que usan centran alrededor de 0 en lugar de 's 0.5, y esto "hace que el aprendizaje para la siguiente capa sea un poco más fácil".
¿Por qué centrar el aprendizaje de la velocidad de salida de la activación? ¿Asumo que se está refiriendo a la capa anterior cuando el aprendizaje ocurre durante el backprop?
¿Hay alguna otra característica que haga preferible ? ¿El gradiente más pronunciado retrasaría la desaparición de los gradientes?
¿Hay alguna situación en la que sería preferible ?
Math-light, se prefieren respuestas intuitivas.
Respuestas:
Yan LeCun y otros argumentan en Efficient BackProp que
Es por eso que debe normalizar sus entradas para que el promedio sea cero.
La misma lógica se aplica a las capas intermedias:
Postscript @craq señala que esta cita no tiene sentido para ReLU (x) = max (0, x), que se ha convertido en una función de activación muy popular. Si bien ReLU evita el primer problema de zigzag mencionado por LeCun, LeCun no resuelve este segundo punto, quien dice que es importante llevar el promedio a cero. Me encantaría saber qué dice LeCun sobre esto. En cualquier caso, hay un documento llamado Batch Normalization , que se basa en el trabajo de LeCun y ofrece una manera de abordar este problema:
Por cierto, este video de Siraj explica mucho sobre las funciones de activación en 10 divertidos minutos.
@elkout dice "La verdadera razón por la que se prefiere el tanh en comparación con el sigmoide (...) es que las derivadas del tanh son más grandes que las derivadas del sigmoide".
Creo que esto no es un problema. Nunca vi que esto fuera un problema en la literatura. Si te molesta que una derivada sea más pequeña que otra, puedes escalarla.
La función logística tiene la forma . Usualmente, usamos , pero nada le prohíbe usar otro valor para para ampliar sus derivados, si ese fuera su problema.σ(x)=11+e−kx k=1 k
Nitpick: tanh es también una función sigmoidea . Cualquier función con forma de S es un sigmoide. Lo que ustedes llaman sigmoide es la función logística. La razón por la cual la función logística es más popular es por razones históricas. Ha sido utilizado durante más tiempo por los estadísticos. Además, algunos sienten que es más biológicamente plausible.
fuente
No es que sea necesariamente mejor que . En otras palabras, no es el centro de una función de activación lo que lo hace mejor. Y la idea detrás de ambas funciones es la misma, y también comparten una "tendencia" similar. No hace falta decir que la función se llama una versión desplazada de la función .sigmoid tanh sigmoid
La verdadera razón por la que se prefiere comparación con , especialmente cuando se trata de big data cuando generalmente está luchando por encontrar rápidamente el mínimo local (o global), es que las derivadas de son más grandes que las derivadas de . En otras palabras, minimiza su función de costo más rápido si usa como función de activación.tanh sigmoid tanh sigmoid tanh
Pero, ¿por qué la tangente hiperbólica tiene derivados más grandes? Solo para darle una intuición muy simple, puede observar el siguiente gráfico:
El hecho de que el rango esté entre -1 y 1 en comparación con 0 y 1 hace que la función sea más conveniente para las redes neuronales. Aparte de eso, si uso algunas matemáticas, puedo demostrar que:
Y en general, podemos probar que en la mayoría de los casos .∣∣∂tanh(x)∂x∣∣>∣∣∂σ(x)∂x∣∣
fuente
sigmoid(x) - 0.5
tanh
Respondiendo la parte de la pregunta hasta ahora sin abordar:
Andrew Ng dice que usar la función logística (comúnmente conocida como sigmoide) realmente solo tiene sentido en la capa final de una red de clasificación binaria.
Como se espera que la salida de la red esté entre y , la logística es una elección perfecta ya que su rango es exactamente . No se requiere escala y desplazamiento de .0 1 (0,1) tanh
fuente
Todo depende esencialmente de las derivadas de la función de activación, el principal problema con la función sigmoide es que el valor máximo de su derivada es 0.25, esto significa que la actualización de los valores de W y b será pequeña.
La función tanh, por otro lado, tiene una derivada de hasta 1.0, lo que hace que las actualizaciones de W y b sean mucho más grandes.
Esto hace que la función tanh sea casi siempre mejor como una función de activación (para capas ocultas) en lugar de la función sigmoidea.
Para probar esto yo mismo (al menos en un caso simple), codifiqué una red neuronal simple y usé sigmoide, tanh y relu como funciones de activación, luego tracé cómo evolucionó el valor del error y esto es lo que obtuve.
El cuaderno completo que escribí está aquí https://www.kaggle.com/moriano/a-showcase-of-how-relus-can-speed-up-the-learning
Si ayuda, aquí están los gráficos de las derivadas de la función tanh y la sigmoidea (¡preste atención al eje vertical!)
fuente