Creo que hay varias razones por las que la función softmax solo se aplica en la capa de salida. Se utiliza para limitar la salida a una distribución probabilística para que sea más fácil interpretar la respuesta de salida final.
El softmax también se aplica para hacer que cada salida dependa de otras salidas. Esto se logra al restringir la activación exponencial total a sumarse a la unidad. Esta interdependencia puede ser problemática si se aplica en capas ocultas demasiado pronto, pero a veces también puede ser beneficiosa. En el lado positivo, el softmax crea una competencia entre las neuronas en la misma capa, la neurona activa más fuerte suprimirá a las más débiles, este tipo de competiciones están motivadas biológicamente y pueden mejorar la precisión del reconocimiento cuando se implementan correctamente.
Usar un softmax puede ser problemático en el siguiente escenario.
- ¿Cómo se usa el aprendizaje automático en DevOps?
- ¿Se siguen evaluando empíricamente las arquitecturas de redes neuronales profundas?
- ¿Los métodos del núcleo siguen siendo relevantes hoy en día?
- Si su red neuronal no está aprendiendo (o no está aprendiendo mucho), ¿qué pasos toma para descubrir por qué?
- ¿Cuáles son algunos documentos similares al trabajo realizado para el Proyecto Tango de Google?
Considere una capa con [math] n [/ math] salidas representadas como un vector:
[matemáticas] v = [o_1, o_2, …, o_ {n}] [/ matemáticas]
El softmax se define como:
[matemáticas] {s (v)} _ {i} = \ frac {e ^ {o_ {i}}} {\ sum_ {j} ^ {n} {e ^ {o_ {j}}}} [/ matemáticas ]
Y la derivada dada por
[matemáticas] \ frac {\ partial {s (v)} _ {i}} {\ partial o_ {j}} = {s (v)} _ {i} (1 – {s (v)} _ {i }) [/matemáticas]
para [matemáticas] i = j [/ matemáticas]
y
[matemáticas] \ frac {\ partial {s (v)} _ {i}} {\ partial o_ {j}} = – {s (v)} _ {i} {s (v)} _ {j} [ /matemáticas]
para [matemáticas] i \ ne j [/ matemáticas]
Ahora, suponiendo que el vector de salida de capa [math] v [/ math] sea escaso, la derivada con respecto a la salida más fuerte será cercana a cero, esto puede causar un serio problema de gradiente de fuga para las neuronas activas más fuertes. Esto es contradictorio porque las neuronas activas más fuertes necesitan propagar gradientes de manera más eficiente. Por lo tanto, la función softmax aplicada a capas ocultas puede causar un problema complejo de gradiente de fuga que puede ser difícil de resolver incluso cuando se utiliza la normalización por lotes (BN).
Entonces, creo que el hecho de que funcionó bien en su parte se debe en parte a la competencia entre las neuronas, pero en la mayoría de los casos el softmax en la capa oculta puede causar un problema de gradiente de fuga y, por lo tanto, generalmente no mejora el rendimiento. Pero una evaluación emperical puede ser la mejor para concluir adecuadamente.
Espero que esto ayude.