¿Cómo convertir la salida de una red neuronal artificial en probabilidades?


He leído acerca de la red neuronal hace poco tiempo y entiendo cómo un ANN (especialmente un perceptrón multicapa que aprende a través de backpropagation) puede aprender a clasificar un evento como verdadero o falso.

Creo que hay dos maneras :

1) Obtienes una neurona de salida. Si su valor es > 0.5 el evento es probablemente verdadero, si su valor es

2) Obtienes dos neuronas de salida, si el valor de la primera es > que el valor de la segunda el evento es probablemente cierto y viceversa.

En estos casos, la ANN le dice si un evento es probablemente verdadero o probablemente falso. No dice qué tan probable es.

¿Hay una manera de convertir este valor en algunas cuotas o de obtener directamente las cuotas de la ANN? Me gustaría obtener una salida como"El evento tiene una probabilidad del 84% de ser verdad"

Author: Mathieu Pagé, 2009-10-06

7 answers

Una vez que un NN ha sido entrenado, por ejemplo. usando backprogation como se menciona en la pregunta (por lo que la lógica backprogation ha "empujado" los pesos de manera que minimice la función de error) los pesos asociados con todas las entradas individuales (entradas"externas" o entradas intra-NN) son fijos. El NN puede ser utilizado para fines de clasificación.

Por lo que las matemáticas (y las" opciones") durante la fase de aprendizaje pueden ser un poco gruesas, es relativamente simple y directa cuando se opera como clasificador. El algoritmo principal es calcular un valor de activación para cada neurona, como la suma de la entrada x peso para esa neurona. Este valor es entonces alimentado a una función de activación cuyo propósito es normalizarlo y convertirlo a un booleano (en casos típicos, ya que algunas redes no tienen una regla de todo o nada para algunas de sus capas). La función de activación puede ser más compleja de lo indicado, en particular no necesita ser lineal, pero cualquiera que sea su forma, típicamente sigmoide, operar de la misma manera: averiguar dónde encaja la activación en la curva y, si corresponde, por encima o por debajo de un umbral. El algoritmo básico entonces procesa todas las neuronas en una capa dada antes de proceder a la siguiente.

Con esto en mente, la pregunta de usar la capacidad del perceptrón para calificar su conjetura (o de hecho conjeturas - plural) con un valor porcentual, encuentra una respuesta fácil: usted apuesta que puede, su(s) salida (s) es valor real (si hay algo que necesite normalizarse) antes de convertir a un valor discreto (un booleano o un ID de categoría en el caso de varias categorías), utilizando las funciones de activación y los métodos de umbral/comparación descritos en la pregunta.

So... ¿Cómo y dónde obtengo "mis porcentajes"?... Todo depende de la implementación de NN, y lo más importante, la implementación dicta el tipo de funciones de normalización que se pueden usar para traer valores de activación en el rango 0-1 y de una manera que la suma de todos los porcentajes "se suman" a 1. En su forma más simple, la función de activación se puede utilizar para normalizar el valor y los pesos de la entrada a la capa de salida se pueden utilizar como factores para garantizar la "suma" a 1 pregunta (siempre que estos pesos son de hecho así normalizados a sí mismos).

Et voilà!

Clariticación: (siguiendo la nota de Mathieu)
Uno no necesita cambiar nada en la forma en que funciona la Red Neuronal en sí; lo único que se necesita es "engancharse" de alguna manera a la lógica de salida neuronas para acceder al valor de activación [valor real] que calcularon, o, posiblemente mejor, para acceder a la salida de valor real de la función de activación, antes de su conversión booleana (que normalmente se basa en un valor umbral o en alguna función estocástica).

En otras palabras, el NN funciona como antes, ni su entrenamiento ni su lógica de reconocimiento se alteran, las entradas al NN permanecen iguales, al igual que las conexiones entre varias capas, etc. Sólo tenemos un copia de la activación real de las neuronas en la capa de salida, y usamos esto para calcular un porcentaje. La fórmula real para el cálculo del porcentaje depende de la naturaleza del valor de activación y su función asociada (su escala, su rango relativo a la salida de otras neuronas, etc.).).
Aquí hay algunos casos simples (tomados de las reglas de salida sugeridas de la pregunta) 1) Si hay una sola neurona de salida: la relación del valor proporcionado por la función de activación en relación con el rango de esa función debe hacer. 2) Si hay dos (o más neuronas de salida), como con los clasificadores por ejemplo: Si todas las neuronas de salida tienen la misma función de activación, el porcentaje para una neurona dada es el de su valor de función de activación dividido por la suma de todos los valores de función de activación. Si las funciones de activación varían, se convierte en una situación caso por caso porque las distintas funciones de activación pueden ser indicativas de un deseo intencional de dar más peso a algunas de las neuronas, y el porcentaje debe respetar esto.

 21
Author: mjv,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-06 19:23:20

Lo que puede hacer es usar una función de transferencia sigmoide en los nodos de la capa de salida (que acepta rangos de datos (-inf,inf) y genera un valor en [-1,1]).
Luego, usando la codificación de salida 1-of-n (un nodo para cada clase), puede mapear el rango [-1,1] a [0,1] y usarlo como probabilidad para cada valor de clase (tenga en cuenta que esto funciona naturalmente para más de dos clases).

 17
Author: Amro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-06 21:49:00

El valor de activación de una neurona de salida única es una suma ponderada linealmente, y puede interpretarse directamente como una probabilidad aproximada si la red está entrenada para dar salidas de un rango de 0 a 1. Esto tendería a ser el caso si la función de transferencia (o función de salida) tanto en la etapa anterior como en la que proporciona la salida final también está en el rango de 0 a 1 (típicamente la función logística sigmoidal). Sin embargo, no hay garantía de que lo hará, pero las reparaciones son posibles. Además a menos que los sigmoides sean logísticos y los pesos estén limitados a ser positivos y sumar a 1, es poco probable. Generalmente una red neuronal se entrenará de una manera más equilibrada usando el sigmoide tanh y pesos y activaciones que van positivo y negativo (debido a la simetría de este modelo). Otro factor es la prevalencia de la clase: si es del 50%, es probable que un umbral de 0,5 sea efectivo para logística y un umbral de 0,0 para tanh. El sigmoid está diseñado para empujar las cosas hacia el centro de la gama (en backpropogation) y constreñirlo de salir de la gama (en feedforward). La importancia del rendimiento (con respecto a la distribución de Bernoulli) también se puede interpretar como una probabilidad de que la neurona esté haciendo predicciones reales en lugar de adivinar. Idealmente, el sesgo del predictor a los positivos debe coincidir con la prevalencia de los positivos en el mundo real (que puede variar en diferentes momentos y lugares, por ejemplo, mercados alcistas vs. bajistas, por ejemplo, solvencia de personas que solicitan préstamos frente a personas que no hacen los pagos del préstamo): calibrar las probabilidades tiene la ventaja de que cualquier sesgo deseado se puede establecer fácilmente.

Si usted tiene dos neuronas para dos clases, cada una puede ser interpretada independientemente como arriba, y la diferencia reducida a la mitad entre ellas también puede ser. Es como voltear la neurona de clase negativa y promediar. Las diferencias también pueden dar lugar a una estimación de probabilidad de significancia (utilizando la prueba T).

La puntuación Brier y su descomposición de Murphy da una estimación más directa de la probabilidad de que una respuesta promedio sea correcta, mientras que la información da la probabilidad de que el clasificador esté tomando una decisión informada en lugar de una suposición, el AUC de ROC da la probabilidad de que una clase positiva se clasifique más alto que una clase negativa (por un predictor positivo), y Kappa dará un número similar que coincide con la Información cuando prevalencia = sesgo.

Lo que normalmente quieres es tanto una probabilidad de significación para el clasificador general (para asegurarse de que está jugando en un campo real, y no en un marco imaginario de estimaciones) y una estimación de probabilidad para un ejemplo específico. Hay varias formas de calibrar, incluyendo hacer una regresión (lineal o no lineal) versus probabilidad y usar su función inversa para reasignar a una estimación de probabilidad más precisa. Esto puede verse por la mejora de la puntuación Brier, con el componente de calibración reduciéndose hacia 0, pero el componente de discriminación permanecer igual, al igual que el AUC de ROC y la información (Kappa está sujeto a sesgo y puede empeorar).

Una forma simple no lineal de calibrar las probabilidades es usar la curva ROC-a medida que el umbral cambia para la salida de una sola neurona o la diferencia entre dos neuronas competidoras, trazamos los resultados de las tasas de verdadero y falso positivo en una curva ROC (las tasas de falso y verdadero negativo son naturalmente los complementos, ya que lo que no es realmente un positivo es un negativo). Luego escaneas el ROC curva (polilínea) punto por punto (cada vez que cambia el gradiente) muestra por muestra y la proporción de muestras positivas le da una estimación de probabilidad para los positivos correspondientes al umbral neuronal que produjo ese punto. Los valores entre los puntos de la curva se pueden interpolar linealmente entre los que están representados en el conjunto de calibración, y de hecho, cualquier punto malo en la curva ROC, representado por deconvexidades (abolladuras) se puede suavizar por el casco convexo, probabilísticamente interpolación entre los puntos finales del segmento del casco. Flach y Wu proponen una técnica que realmente voltea el segmento, pero esto depende de que la información se use de manera incorrecta y aunque podría usarse repetidamente para mejorar arbitrariamente el conjunto de calibración, será cada vez más improbable que se generalice a una situación de prueba.

(Vine aquí buscando documentos que había visto hace siglos sobre estos enfoques basados en ROC, así que esto es de memoria y sin estos perdidos referencia.)

 8
Author: dmwp,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2011-11-27 02:55:00

¿Probó la sugerencia del profesor Hinton de entrenar la red con la función de activación softmax y el error de entropía cruzada?

Como ejemplo, cree una red de tres capas con lo siguiente:

linear neurons   [ number of features ]
sigmoid neurons [ 3 x number of features ]
linear neurons   [ number of classes ]

Luego entrénalos con cross entropy error softmax transfer con tu optimizador favorito stochastic descent/iprop plus/ grad descent. Después de entrenar las neuronas de la salida se deben normalizar a la suma de 1.

Por favor ver http://en.wikipedia.org/wiki/Softmax_activation_function para más detalles. Shark Machine Learning framework proporciona la función Softmax mediante la combinación de dos modelos. Y el profesor Hinton un excelente curso en línea @ http://coursera.com en cuanto a los detalles.

 6
Author: Steven Varga,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-07-22 23:55:50

Seré muy prudente al interpretar las salidas de una red neuronal (de hecho cualquier clasificador de aprendizaje automático) como una probabilidad. La máquina está entrenada para discriminar entre clases, no para estimar la densidad de probabilidad. De hecho, no tenemos esta información en los datos, tenemos que inferirla. Por mi experiencia no aconsejo a nadie que interprete directamente las salidas como probabilidades.

 6
Author: user2377833,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-12-10 10:01:52

Puedo recordar que vi un ejemplo de red neuronal entrenada con propagación hacia atrás para aproximar la probabilidad de un resultado en el libro Introducción a la teoría de la computación neuronal (hertz krogh palmer). Creo que la clave del ejemplo era una regla de aprendizaje especial para que no tuvieras que convertir la salida de una unidad a probabilidad, sino que obtuvieras automáticamente la probabilidad como salida.
Si tienes la oportunidad, intenta revisar ese libro.

(por cierto, las "máquinas boltzman", aunque menos famosas, son redes neuronales diseñadas específicamente para aprender distribuciones de probabilidad, es posible que desee comprobarlas también)

 4
Author: mic.sca,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2009-10-06 07:33:37

Cuando se utiliza ANN para la clasificación de 2 clases y la función de activación sigmoide logística se utiliza en la capa de salida, los valores de salida podrían interpretarse como probabilidades.

Así que si eliges entre 2 clases, entrenas usando codificación 1-of-C, donde 2 salidas ANN tendrán valores de entrenamiento (1,0) y (0,1) para cada una de las clases respectivamente.

Para obtener la probabilidad de primera clase en porcentaje, simplemente multiplique la primera salida ANN a 100. Para obtener la probabilidad de otra clase utilice el segunda salida.

Esto podría generalizarse para la clasificación multiclase usando la función de activación softmax.

Puede leer más, incluyendo pruebas de interpretación probabilística aquí:

[1] Bishop, Christopher M. Redes neuronales para el reconocimiento de patrones. Oxford university press, 1995.

 3
Author: krokodil,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-10-01 23:21:57