artificial-intelligence - que - redes neuronales estadistica
¿Cómo convertir la salida de una red neuronal artificial en probabilidades? (7)
¿Has probado el prof ¿La sugerencia de Hinton de entrenar la red con la función de activación de 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, entrene con la transferencia softmax de error de entropía cruzada con su ascendente estocástico optimizador favorito / descenso de graduación / graduación positiva. Después del entrenamiento, las neuronas de salida deben normalizarse a la suma de 1.
Por favor, consulte http://en.wikipedia.org/wiki/Softmax_activation_function para más detalles. El marco de Shark Machine Learning proporciona la función Softmax mediante la combinación de dos modelos. Y el prof. Hinton es un excelente curso en línea @ http://coursera.com con respecto a los detalles.
Hace poco tiempo que leí sobre redes neuronales y entiendo cómo una ANN (especialmente un perceptrón multicapa que aprende a través de la propagación inversa) puede aprender a clasificar un evento como verdadero o falso.
Creo que hay dos formas:
1) Obtienes una neurona de salida. Su valor es> 0.5, los eventos son probablemente verdaderos; si su valor es <= 0.5, es probable que el evento sea falso.
2) Obtienes dos neuronas de salida, si el valor del primero es> que el valor del segundo, el evento es probablemente verdadero y viceversa.
En estos casos, la ANN le dice si un evento es probable o probablemente falso. No dice qué tan probable es.
¿Hay alguna forma de convertir este valor a algunas probabilidades o sacar directamente las probabilidades de la ANN? Me gustaría obtener un resultado como "El evento tiene un 84% de probabilidad de ser cierto"
Cuando se usa ANN para la clasificación de 2 clases y la función de activación sigmoidea logística se utiliza en la capa de salida, los valores de salida se podrían interpretar como probabilidades.
Entonces, si eliges entre 2 clases, entrenas usando la codificación 1-de-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 use la segunda salida.
Esto podría generalizarse para la clasificación de clases múltiples usando la función de activación de softmax.
Puede leer más, incluyendo pruebas de interpretación probabilística aquí:
[1] Bishop, Christopher M. Redes neuronales para reconocimiento de patrones. Prensa universitaria de Oxford, 1995.
El valor de activación de una sola neurona de salida es una suma ponderada linealmente, y puede interpretarse directamente como una probabilidad aproximada si la red está entrenada para dar a las salidas 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 la salida final está en el rango de 0 a 1 también (típicamente la función logística sigmoidal). Sin embargo, no hay garantía de que las reparaciones sean posibles. Además, a menos que los sigmoides sean logísticos y los pesos estén limitados a ser positivos y sumen a 1, es poco probable. En general, una red neuronal se entrenará de una manera más equilibrada utilizando el sigmoide tanh y los pesos y las activaciones que varían entre positivo y negativo (debido a la simetría de este modelo). Otro factor es la prevalencia de la clase: si es 50%, es probable que un umbral de 0.5 sea efectivo para logística y un umbral de 0.0 para tanh. El sigmoide está diseñado para empujar las cosas hacia el centro del rango (en retropropagación) y evitar que salga del rango (en avance). La importancia del rendimiento (con respecto a la distribución de Bernoulli) también puede interpretarse como una probabilidad de que la neurona esté haciendo predicciones reales en lugar de adivinar. Idealmente, el sesgo del predictor a positivos debe coincidir con la prevalencia de positivos en el mundo real (que puede variar en diferentes momentos y lugares, por ejemplo, mercados alcistas vs bajistas, por ejemplo, la solvencia de personas que solicitan préstamos frente a personas que no hacen los pagos del préstamo) ) - calibrar a probabilidades tiene la ventaja de que cualquier sesgo deseado se puede establecer fácilmente.
Si tiene dos neuronas para dos clases, cada una se puede interpretar de forma independiente como se indicó anteriormente, y la diferencia a la mitad entre ellas también puede ser. Es como mover la neurona de clase negativa y promediar. Las diferencias también pueden dar lugar a una estimación de probabilidad de significación (utilizando la prueba T).
El puntaje de Brier y su descomposición de Murphy dan 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 tome una decisión informada en lugar de una conjetura, el AUC ROC da la probabilidad de que una clase positiva sea clasificada mayor que una clase negativa (por un predictor positivo), y Kappa dará un número similar que coincida con Informedness cuando prevalence = bias.
Lo que normalmente desea es tanto una probabilidad de significación para el clasificador global (para asegurarse de estar jugando en un campo real, y no en un marco imaginario de estimaciones) como una estimación de probabilidad para un ejemplo específico. Hay varias maneras 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 se puede ver mejorando el puntaje de Brier, con el componente de calibración reduciéndose hacia 0, pero el componente de discriminación permanece igual, como el AUC de ROC y la información (Kappa está sujeto a sesgos 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, graficamos los resultados con tasas verdaderas y falsas positivas en una curva ROC ( las tasas negativas falsas y verdaderas son naturalmente los complementos, ya que lo que no es realmente positivo es un factor negativo). A continuación, escanea la curva ROC (polilínea) punto por punto (cada vez que cambia el gradiente) muestra por muestra y la proporción de muestras positivas proporciona 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 desconexiones (abolladuras) puede suavizarse mediante el casco convexo, interpolando probabilísticamente entre el puntos finales del segmento del casco. Flach y Wu proponen una técnica que realmente invierte el segmento, pero esto depende de que la información se use al revés y, aunque podría usarse repetidamente para mejorar arbitrariamente el conjunto de calibración, será cada vez menos probable generalizar a una situación de prueba.
(Vine aquí buscando documentos que había visto hace mucho tiempo sobre estos enfoques basados en ROC, así que esto es de memoria y sin estas referencias perdidas).
Recuerdo que vi un ejemplo de una 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 tuviera que convertir la salida de una unidad a probabilidad, sino que obtenía automáticamente la probabilidad como salida.
Si tiene la oportunidad, intente verificar 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)
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 aconsejé a nadie que interpretara directamente los resultados como probabilidades.
Una vez que un NN ha sido entrenado, por ej. utilizando backprogation como se menciona en la pregunta (donde la lógica de backprogation ha "empujado" los pesos de forma que minimiza la función de error) los pesos asociados con todas las entradas individuales (entradas "externas" o entradas intra-NN) son fijos. El NN se puede usar para fines de clasificación.
Por lo que las matemáticas (y las "opciones") durante la fase de aprendizaje pueden ser un poco más densas, es relativamente simple y directo cuando se trabaja 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 se envía luego a una función de activación cuya finalidad es normalizarla y convertirla en booleana (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 que usted indicó, en particular no necesita ser lineal, pero cualquiera que sea su forma, típicamente sigmoidea, opera de la misma manera: averiguando dónde se ajusta la activación en la curva, y si corresponde, arriba o por debajo de un umbral. El algoritmo básico luego procesa todas las neuronas en una capa determinada antes de pasar a la siguiente.
Con esto en mente, la cuestión de usar la capacidad del perceptrón para calificar su conjetura (o de hecho adivina - plural) con un valor porcentual, encuentra una respuesta fácil: apostar que puede, su (s) producción (es) es de valor real (en todo caso) en necesidad de normalización) antes de convertirlo a un valor discreto (un booleano o una identificación 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.
Entonces ... ¿Cómo y dónde obtengo "mis porcentajes"? ... Todo depende de la implementación de NN, y más importante aún, la implementación dicta el tipo de funciones de normalización que se pueden usar para llevar los valores de activación en el 0-1 rango 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 el "complemento" a 1 pregunta (siempre que estos pesos estén de hecho tan normalizados por sí mismos).
Et voilà!
Clarificación : (siguiendo la nota de Mathieu)
Uno no necesita cambiar nada en la forma en que funciona la Red Neural; lo único que se necesita es "conectar" la lógica de las neuronas de salida para acceder al valor de activación [de valor real] que calcularon o, posiblemente, acceder a la salida de valor real de la función de activación, antes de su conversión booleana (que generalmente se basa en un valor de 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 están alterados, las entradas al NN siguen siendo las mismas, al igual que las conexiones entre varias capas, etc. Solo obtenemos una copia de la activación de valor real del 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 producción de otras neuronas, etc.).
Aquí hay algunos casos simples (tomados de las reglas de salida sugeridas de la pregunta) 1) Si hay una única neurona de salida: la relación del valor proporcionado por la función de activación con respecto al rango de esa función debería hacer. 2) Si hay dos (o más neuronas de salida), como con clasificadores por ejemplo: si todas las neuronas de salida tienen la misma función de activación, el porcentaje de una neurona dada es el de su valor de función de activación dividido por la suma de todas las funciones de activación valores. 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 determinado de dar más peso a algunas de las neuronas, y el porcentaje debe respetar esto.
Lo que puede hacer es usar una función de transferencia sigmoidea 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-de-n (un nodo para cada clase), puede asignar 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).