¿Cómo funciona la capa de clasificación softmax de una red neuronal?

Imagine que tiene una red neuronal (NN) que tiene 1000 salidas (ImageNet). Podemos pensar en una función de activación de arg max dura en la salida como haciendo lo siguiente:

  1. La entrada se propaga hacia adelante.
  2. Los nodos de salida se activan para calcular [math] o = [o_1, o_2, …, o_ {n}] ^ {T} [/ math], que es un vector lineal n de salida dimensional. En este caso [matemáticas] n = 1000 [/ matemáticas].
  3. Evalúe [math] i_ {max} = [/ math] arg max [math] (o) [/ math]. Donde [math] i_ {max} = [/ math] índice de nodo de salida con el valor de salida máximo.
  4. El índice, [math] i_ {max} [/ math], también es la etiqueta predicha de salida final del NN. La etiqueta predicha de la entrada es, por lo tanto, el índice del nodo de salida de activación máxima.

¿Puedes identificar algunos problemas importantes con este enfoque?


Bien, enumeremos los principales problemas:

  • El enfoque arg max no es diferenciable.
  • Los componentes del vector de salida son ilimitados. Durante el aprendizaje, sin la operación de aplastamiento, los grandes valores de salida para puntos de datos más alejados del límite de decisión, pero no en el lado equivocado del límite, serán fuertemente penalizados y no queremos eso. También necesitamos valores de salida aplastados para reducir la sensibilidad a los valores atípicos.
  • Los resultados no son probabilidades. Es difícil establecer valores de salida ilimitados. Entonces, a menos que tengamos probabilidades, podemos tomar mejores decisiones. Por ejemplo, podríamos establecer el umbral en 90% para las probabilidades de salida, pero no podemos establecer un umbral para las entradas con valores ilimitados. También es más conveniente trabajar con probabilidades.

La operación softmax lo soluciona implementando un soft arg max:

[matemáticas] s_ {j} (o) = \ frac {e ^ {o_ {j}}} {\ sum_ {i} ^ {n} e ^ {o_ {i}}} [/ matemáticas]

La razón por la que softmax es en realidad un soft arg max es que en realidad no devuelve el valor máximo sino el vector de salida aplastado:

[matemáticas] s = [s_ {1}, s_ {2}, …, s_ {n}] ^ {T} [/ matemáticas]

Que tiene un valor cercano a 1 en el índice [math] i_ {max} [/ math] y valores casi cero en cualquier otro lugar. Por lo tanto, la salida es como un vector codificado en caliente que proporciona un valor cercano a uno para la entrada máxima y un valor cercano a cero para el resto de las entradas.

Por lo tanto, la función softmax implementa esencialmente una función soft arg max.

Y tiene varios beneficios para la operación hard arg max:

  • Es diferenciable Lo que significa más fácil de usar en optimizadores basados ​​en descenso de gradiente.
  • Las salidas se comprimen entre 0 y 1, lo que facilita la aplicación de un umbral. Los puntos de datos más alejados del límite de decisión, pero no en el lado equivocado del límite, ya no pueden ser penalizados.
  • Las salidas son acotadas e interpretables como probabilidades relativas. Por lo tanto, un rendimiento de una confianza del 85% puede ser aceptable como lo suficientemente bueno porque es una probabilidad. El softmax hace que las salidas compitan, por lo que si hay dos salidas igualmente fuertes, entonces las probabilidades serán 50-50. Si una salida permanece constante pero la otra se reduce, la probabilidad de que la salida permanezca constante aumentará. Por lo tanto, el softmax es sensible a los valores relativos de las salidas y no a sus valores reales.

Por lo tanto, es importante utilizar el softmax sobre el hard arg max para fines de optimización y el hecho de que la salida softmax es una distribución de probabilidad.

El softmax es, por lo tanto, una versión relajada de la operación arg max porque no realiza por completo una tarea difícil del ganador, lo hace suavemente de una manera bastante continua y diferenciable.

Espero que esto ayude.

Básicamente, las salidas de cualquier capa oculta se llaman ‘logits’ o ‘activaciones’ y pueden tomar muchos valores y distribuciones diferentes, dependiendo de la función de activación que se use y el valor del sesgo (o umbral en la figura a continuación).

Por ejemplo, si está utilizando tanh como función de activación, los ‘logits’ se vincularán entre -1 y 1, pero si está utilizando ReLu’s, los logits no tienen ningún límite superior y, por lo tanto, pueden llegar a ser bastante grandes.

El propósito de la capa de clasificación de softmax es simplemente transformar todas las activaciones netas en su capa de salida final en una serie de valores que pueden interpretarse como probabilidades. Para hacer esto, la función softmax se aplica a las salidas netas (sin una función de activación o sesgo).

Puede ver que la función softmax aplica una función exponencial a z (i) (por lo tanto, el resultado siempre será un valor positivo) y también se divide por la suma de exponenciales sobre todo z, normalizando así el resultado.

Esto dará como resultado un conjunto de números que son:

  • Positivo
  • Menor que 1
  • Suma hasta 1

y por lo tanto puede verse como las probabilidades de salida para cada clase.

Para resumir: la capa softmax realmente no hace mucho en términos de resolver el problema de clasificación (ese es el trabajo de las capas ocultas), solo aplica una transformación a los valores de salida para que podamos interpretar la salida final como una probabilidad vector.

Agrega los exponentes de todas las entradas [matemáticas] x_i [/ ​​matemáticas] a un solo divisor y luego, para cada entrada, calcula la salida correspondiente [matemáticas] \ frac {e ^ {x_i}} {\ sum_ {j = 0} ^ ne ^ {x_j}} [/ math].

La suma de todas esas salidas es 1.0, por lo que cada valor puede considerarse un valor de probabilidad. Una de las razones para usarlo en lugar de simplemente dividir los valores de entrada por su suma es limitar un poco el efecto de los valores atípicos.