Cada ejemplo de red neuronal para reconocimiento de imágenes que he leído produce una respuesta simple de "sí" o "no". Un nodo de salida corresponde a "Sí, este es un rostro humano", y uno corresponde a "No, este no es un rostro humano".
Entiendo que esto es probable para simplificar la explicación, pero me pregunto cómo se podría programar una red neuronal como esta para dar una salida más específica. Por ejemplo, digamos que estaba clasificando animales. En lugar de decir "Animal" o "No es un animal", quisiera respuestas como "Perro", "Pez", "Pájaro", "Serpiente", etc., con un nodo de salida final como "No es un animal / I no reconozcas esto ".
Estoy seguro de que esto debe ser posible, pero tengo problemas para entender cómo. Parece que se debe al algoritmo de entrenamiento de retropropagación de error, ya que entrenas un nodo de salida (es decir, "Esto es un perro") y los pesos de las neuronas cambian, luego el estado ideal para otro nodo de salida que previamente entrenado (es decir, "Esto es un pájaro") comenzará a desviarse, y viceversa. Por lo tanto, entrenar a la red para que reconozca una categoría saboteará cualquier entrenamiento realizado para otra categoría, lo que nos limitará a un diseño simple de "Sí" o "No".
¿Esto hace que tal reconocedor sea imposible? ¿O estoy malinterpretando el algoritmo? Las únicas dos cosas en las que puedo pensar son:
O bien podríamos entrenar una red neuronal para cada cosa que queramos clasificar y usar de alguna manera para construir una super-red mayor (por ejemplo, una red para "perro", una red para "pájaro", etc., que de alguna manera se suman para crear la súper red para "animales"); o,
Cree algún tipo de metodología de entrenamiento ridículamente complicada que requeriría matemáticas increíblemente avanzadas y de alguna manera produciría un estado ideal de peso neuronal para todas las salidas posibles (en otras palabras
insert math magic here
).
(Nota al margen 1: Estoy mirando específicamente los perceptrones multicapa como una especie de red neuronal).
(Nota al margen 2: Para la primera "solución posible" con viñetas, tener cada red neuronal específica e iterar a través de ellas hasta que recibamos una respuesta de "Sí" no es lo suficientemente bueno. Sé que esto podría hacerse con bastante facilidad, pero eso es funcional simple programación en lugar de aprendizaje automático. Quiero saber si es posible tener una red neuronal para alimentar la información y recibir la respuesta adecuada).
La respuesta de @ anaximander es bastante buena, pensé en comentar esta parte de tu pregunta:
Bueno, creo que su suposición está mal aquí; si entiendo correctamente, tiene un NN con una salida por categoría que está tratando de clasificar. Idealmente, le gustaría que funcionen casi independientemente, para que la clasificación de "perro" y "pájaro" no se dispare al mismo tiempo. Entonces, realmente, durante el entrenamiento, lo que sucederá es que cuando entrenas el NN con un resultado de "perro", la propagación hacia atrás intentará garantizar que el "pájaro" y otras neuronas de salida no produzcan falsos positivos. Entonces, teóricamente, funcionará bien, contrario a tu comentario; El refuerzo de un resultado negativo para "pájaro" es correcto.
Sin embargo, su problema será la escalabilidad de este enfoque. A medida que agrega más categorías a la red, la capacitación se volverá más compleja al menos de manera lineal (pero probablemente mucho peor). Por esta razón, muchas personas usan un enfoque en el que se entrenan NN individuales para cada categoría; Esto mantiene las cosas lo suficientemente simples y relativamente escalables. El meta-nivel de cómo se combinan estos depende de usted. Simplemente podría recorrer todas las NN y ver cuáles producen resultados positivos, podría crear NN heurísticas de nivel medio que intenten reducir el tipo de animal para usted, o incluso podría tener una NN gigante que combine las NN individuales como neuronas . En esencia, lo que estoy tratando de decir es que tienes un conocimiento previo de la estructura del problema: las clasificaciones individuales son muy distintas entre sí;
EDITAR: Para responder a la pregunta del título, por supuesto, las NN pueden proporcionar más respuestas que sí / no. En los modelos "estándar", cada neurona de salida generalmente dispara sí / no (aunque este comportamiento podría cambiarse, si estuviera tan inclinado), representando un bit de información; pero al igual que con su computadora, los bits se pueden combinar para proporcionar un rango de valores discretos, que se pueden interpretar de la manera que desee. Un ejemplo bastante visual de salidas no binarias sería un Mapa autoorganizado , que generalmente tiene una salida 2D.
fuente
Respuesta corta y no muy rígida: sí, cada NN puede proporcionar más información que solo
yes
, ono
. Se debe al umbral. Si los pesos son más altos que algún umbral, la respuesta es una de las clases de clasificación, si es más baja, la respuesta es la segunda clase de clasificación. Básicamente:La salida de Neuron está en el intervalo [0..1] (o [-1,1] depende), y no desea obtener respuesta si la salida es más baja o más alta que el umbral, pero la salida (la salida puede convertirse fácilmente en 0..1 intervalo y eso significa%)
fuente