¿Cómo y por qué los MLP para la clasificación difieren de los MLP para la regresión? ¿Diferentes funciones de retropropagación y transferencia?


8

Estoy usando dos perceptrones de múltiples capas de avance de 3 capas (MLP). Con los mismos datos de entrada (14 neuronas de entrada), hago una clasificación (verdadero / falso) y una regresión (si es verdadera, "cuánto") ¹. Hasta ahora, he usado perezosamente Patternnet y Fitnet de Matlabs , respectivamente. Perezosamente, porque no me he tomado el tiempo para comprender realmente lo que está sucediendo, y debería hacerlo. Además, necesito hacer la transición a una biblioteca OSS (probablemente FANN), que probablemente requerirá más configuración manual que la caja de herramientas Matlab NN. Por lo tanto, estoy tratando de entender con mayor precisión lo que está sucediendo.

Las redes creadas por patternnety fitnetson casi idénticas: 14 neuronas de entrada, 11 neuronas ocultas, 1 neurona objetivo (2 para el fitnet, pero solo 1 pieza de información). Pero, no son completamente idénticos. Las diferencias por defecto son:

¿Deberían ser esas diferencias?

¿Qué tipo de funciones de retropropagación son óptimas para la clasificación, y qué tipo de regresión, y por qué?

¿Qué tipo de funciones de transferencia son óptimas para la clasificación, y qué tipo de regresión, y por qué?


Classification La clasificación es para "nublado" o "sin nubes" (2 objetivos complementarios), la regresión es para cuantificar "cuánta nube" (1 objetivo).

Respuestas:


2

La diferencia clave está en el criterio de entrenamiento. A menudo se usa un criterio de entrenamiento de mínimos cuadrados para la regresión, ya que esto proporciona una estimación de máxima probabilidad (penalizada) de los parámetros del modelo suponiendo que el ruido gaussiano corrompe la variable de respuesta (objetivo). Para los problemas de clasificación, es común utilizar un criterio de entrenamiento de entropía cruzada, para dar la estimación de máxima probabilidad suponiendo un Bernoilli o pérdida multinomial. De cualquier manera, las salidas del modelo pueden interpretarse como una estimación de la probabilidad de pertenencia a la clase, pero es común usar funciones de activación logística o softmax en la capa de salida, por lo que las salidas están limitadas a estar entre 0 y 1 y sumar 1. Si usa la función tanh, puede reasignarlas a las probabilidades agregando una y dividiendo por dos (pero por lo demás es lo mismo).

La diferencia entre gradientes conjugados escalados y Levenberg-Marquardt es probable que sea bastante menor en términos de rendimiento de generalización.

Recomiendo encarecidamente la caja de herramientas NETLAB para MATLAB sobre la caja de herramientas de red neuronal propia de MATLAB. Probablemente sea una buena idea investigar la regularización bayesiana para evitar un ajuste excesivo ( vale la pena leer el libro de Chris Bishop y la mayor parte está cubierto en la caja de herramientas de NETLAB).


Interesante: ¿por qué recomienda NETLAB sobre la caja de herramientas NN propia de MATLAB? Estoy bastante satisfecho con esto último, pero estoy tratando de alejarme para liberarme de las licencias comerciales. Claramente, Netlab sigue siendo Matlab, por lo que solo resuelve la mitad del problema en lo que respecta a la independencia; Preferiblemente usaría algo que pueda usar con Python.
gerrit

Sospecho que NETLAB también funciona con octava, lo que resuelve el problema de la licencia comercial. Prefiero NETLAB ya que tiene las herramientas básicas para la clasificación y la regresión configuradas de manera bastante sencilla y alienta el uso de redes regularizadas, lo cual es muy importante para evitar el sobreajuste. También complementa muy bien el libro de Chris Bishop, y ese es el libro que recomendaría a cualquiera que quisiera usar las redes neuronales con ira. Sin embargo, los procesos gaussianos son una opción más moderna, la caja de herramientas GPML y el libro también son muy recomendables ( gaussianprocess.org/gpml ).
Dikran Marsupial

OK veo. Siempre funcionó bastante bien para mí, no he tenido problemas de ajuste excesivo con las paradas tempranas. Veo el punto con Octave, pero si de todos modos necesito hacer una transición, prefiero mudarme a Python de inmediato (aplaudo a Octave, y desearía poder ejecutar mi código Matlab en él, que depende en gran medida de las clases posteriores a R2008a ; pero no amo a Matlab como un lenguaje suficiente para elegir un clon de FOSS Matlab sobre Octave. De todos modos, esta discusión está fuera de tema).
gerrit

Si he querido aprender Python por un tiempo, se usa bastante en la comunidad de aprendizaje automático, por lo que espero que haya algunas buenas bibliotecas disponibles.
Dikran Marsupial
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.