¿Cómo reconoce la red neuronal las imágenes?

25

Estoy tratando de aprender cómo funciona la red neuronal en el reconocimiento de imágenes. He visto algunos ejemplos y me confundo aún más. En el ejemplo del reconocimiento de letras de una imagen de 20x20, los valores de cada píxel se convierten en la capa de entrada. Entonces 400 neuronas. Luego, una capa oculta de neuronas y 26 neuronas de salida. Luego entrena la red, y luego funciona, no es perfecto.

Lo que me confundió sobre la Red Neural es cómo aprende sobre lo que hay en una imagen. No necesita hacer umbrales, segmentación o medición, de alguna manera la red aprende a comparar imágenes y reconocerlas. Es como magia para mí ahora. ¿Dónde comenzar a aprender la red neuronal?

usuario1731927
fuente
1
Si entiendo correctamente, una red neuronal es solo una superficie multidimensional en algún espacio abstracto, cuyos extremos locales conducen a posibles elecciones. Enseñar una red neuronal es solo ajustar esta superficie abstracta a su tarea. Es mi comprensión novata.
Entonces, ¿quieres una explicación O recursos para comenzar a trabajar con NN? Sería bueno aclararlo.
2
Hay (actualmente) un buen curso gratuito en coursera que está dedicado a su pregunta. coursera.org/course/neuralnets
pat
Parece que la clase Coursera NN será avanzada, no tan buena como una introducción. Andrew Ng tiene algunas introducciones más suaves que puedes encontrar, por ejemplo, en Youtube.
Douglas Zare
En realidad, el curso Coursera sí avanza, pero definitivamente se acumula y respondería bastante bien a la pregunta del OP. También tiene muchos ejemplos en reconocimiento de dígitos.
Chris A.

Respuestas:

24

Una gran idea de cómo una red neuronal puede aprender a clasificar algo tan complejo como los datos de imágenes dados solo ejemplos y respuestas correctas me llegó mientras estudiaba el trabajo del profesor Kunihiko Fukushima sobre el neocognitrion en la década de 1980. En lugar de solo mostrarle a su red un montón de imágenes, y usar la propagación hacia atrás para que pueda resolver las cosas por sí mismo, tomó un enfoque diferente y entrenó a su red capa por capa, e incluso nodo por nodo. Analizó el rendimiento y la operación de cada nodo individual de la red y modificó intencionalmente esas partes para que respondan de la manera prevista.

Por ejemplo, sabía que quería que la red pudiera reconocer líneas, por lo que entrenó a capas y nodos específicos para reconocer líneas horizontales de tres píxeles, líneas verticales de 3 píxeles y variaciones específicas de líneas diagonales en todos los ángulos. Al hacer esto, sabía exactamente en qué partes de la red se podía contar para disparar cuando existían los patrones deseados. Luego, dado que cada capa está altamente conectada, todo el neocognitrón en su conjunto podría identificar cada una de las partes compuestas presentes en la imagen, sin importar dónde existieran físicamente. Entonces, cuando existía un segmento de línea específico en algún lugar de la imagen, siempre habría un nodo específico que se dispararía.

Manteniendo esta imagen siempre presente, considere la regresión lineal, que es simplemente encontrar una fórmula (o una línea) a través de la suma de error al cuadrado, que pasa más de cerca a través de sus datos, eso es bastante fácil de entender. Para encontrar "líneas" curvas, podemos hacer el mismo cálculo de suma de productos, excepto que ahora agregamos algunos parámetros de x ^ 2 o x ^ 3 o incluso polinomios de orden superior. Ahora tiene un clasificador de regresión logística. Este clasificador puede encontrar relaciones que no son de naturaleza lineal. De hecho, la regresión logística puede expresar relaciones que son arbitrariamente complejas, pero aún debe elegir manualmente la cantidad correcta de características de potencia para hacer un buen trabajo al predecir los datos.

Una forma de pensar en la red neuronal es considerar la última capa como un clasificador de regresión logística , y luego las capas ocultas pueden considerarse como "selectores de características" automáticos . Esto elimina el trabajo de elegir manualmente el número correcto y la potencia de las características de entrada. Por lo tanto, el NN se convierte en un selector automático de características de potencia y puede encontrar cualquier relación lineal o no lineal o servir como un clasificador de conjuntos arbitrariamente complejos ** (esto, solo se supone, que hay suficientes capas y conexiones ocultas para representar la complejidad de el modelo que necesita aprender). Al final, se espera que un NN que funcione bien aprenda no solo "la relación" entre la entrada y las salidas, sino que luchamos por una abstracción o un modelo quegeneraliza bien.

Como regla general, la red neuronal no puede aprender nada que un ser humano razonablemente inteligente no podría aprender teóricamente dado el tiempo suficiente de los mismos datos, sin embargo,

  • puede ser capaz de aprender algo que nadie ha descubierto todavía
  • Para grandes problemas, un banco de computadoras que procesan redes neuronales puede encontrar soluciones realmente buenas mucho más rápido que un equipo de personas (a un costo mucho menor)
  • una vez entrenados, los NN producirán resultados consistentes con las entradas en las que han sido entrenados y deberían generalizarse bien si se ajustan adecuadamente
  • Los NN nunca se aburren o se distraen
mcstar
fuente
1
+1 para el párrafo sobre cómo la última capa realiza una regresión logística en la parte superior de la selección de características de la capa oculta. Esa es una buena manera de pensar en las NN.
jlund3
Gracias, pero debo aclarar que no estoy diciendo exactamente que la última capa de cada ANN es en realidad una capa de regresión logística, sino solo que esta es una configuración posible que podría resolver muchos problemas. Debido a la forma principalmente aleatoria de entrenar típicamente a ANN, es muy probable que cualquier regresión resultante se extienda a través de muchos nodos y capas de manera muy aleatoria. Uno podría entrenar subredes para responder de maneras específicas y luego bombear la salida de esos a una capa de regresión para crear redes especializadas a mano para problemas particulares. Haciendo un ANN altamente eficiente en memoria y velocidad.
mcstar
1
Esta respuesta sigue obteniendo puntos de vista, así que pensé en señalar que ahora tiene más de 5 años y solo considera las redes totalmente conectadas. Aunque las ideas conceptuales aquí siguen siendo válidas, no le dan al profesional lo suficiente como para comprender conceptos de NN profundos que se han convertido en estándar en la última década. La CNN (red neuronal de convolución) es una adaptación moderna muy importante que otorga superpoderes a las redes profundas al permitirles localizar bordes, contraste, nitidez, espacios de color, sombras y más, y usar eso para determinar el contexto de las características de bajo nivel.
mcstar
10

Es posible que haya escuchado decir que las redes neuronales son " aproximadores de funciones universales ". En esencia, el teorema de Cybenko dice que para cualquier función de mapeo de reales a reales, puede aproximarlo con una red neuronal con funciones de activación sigmoideas. De hecho, resulta que las redes neuronales le permiten calcular cualquier función que sea computable por una máquina de Turing (es decir, cualquier cosa que pueda escribir un algoritmo para calcular). Desafortunadamente, estas pruebas solo dicen que para algunas configuraciones finitas de neuronas y pesos, puede aproximar cualquier función.

La teoría es muy agradable y elegante, pero su pregunta parece estar más en la línea de cómo codificar realmente el cálculo de alguna función en un conjunto de neuronas y pesos. Para ilustrar, considere un ejemplo simple: el exclusivo o. El XOR toma dos entradas, pasa esas entradas. Cuando se activa una y solo una de las entradas, se activa el nodo de salida. Con ambas o ninguna de las entradas activadas, el nodo de salida no se activa.

Una red Perceptron de tres capas capaz de calcular XOR prestada de wikipedia.

Observe que los tres nodos ocultos hacen cosas diferentes. Los nodos más a la izquierda y a la derecha simplemente pasan a través de las activaciones de nodos de entrada de respeto. La neurona media toma las dos entradas y de alguna manera las niega si ambas están activadas. Esta inteligente combinación y recombinación de entradas es esencialmente cómo se realiza el trabajo en una red neuronal.

Obviamente, para funciones más complejas, la combinación y la recombinación deben realizarse de maneras más inteligentes y complicadas, pero esto es en esencia lo que sucede en un nivel bajo. ¡Lo loco es que esto es realmente todo lo que necesita para calcular cualquier función computable! Por otra parte, las máquinas de Turing también resultan ser engañosamente simples ...

El problema es que realmente no tenemos una forma de generar mágicamente la red neuronal que computa alguna función arbitraria. Las pruebas solo nos dicen que hay alguna red por ahí que podría hacerlo. Cuando entrenamos nuestras redes neuronales, simplemente estamos tratando de encontrar una red que esté bastante cerca.

En el contexto del reconocimiento de imágenes, puede imaginarse codificando patrones en la red. Por ejemplo, para reconocer el número '1', puede imaginar nodos ocultos que esperan que una columna de píxeles esté activada en su mayoría o en su totalidad, con los píxeles vecinos apagados. Este nodo oculto podría ser bastante bueno para reconocer una línea recta en esa columna en particular. Ponga suficientes de estos juntos y muy pronto tendrá un montón de nodos que lo hacen en suficientes lugares de su imagen que si le muestro a la red uno, se activarán suficientes nodos ocultos en línea recta, lo que indica un '1'. El problema, por supuesto, es generalizar la red para que pueda reconocer un conjunto variado de entradas.

Esperemos que esto le ayude a comprender más o menos los conceptos de cómo una red neuronal puede realizar cálculos. Sin embargo, se ha topado con un punto que es bastante importante sobre las redes neuronales: en general, en el mejor de los casos es difícil entender por qué la red escupe una salida en particular, especialmente cuando considera que para algo como el reconocimiento de imágenes, las redes son generalmente lo suficientemente grande como para que los humanos tengan dificultades para comprender cada una de las partes móviles de la máquina. Lo que complica aún más el asunto es que, en general, la mayoría de las redes neuronales en realidad no tienen un solo nodo oculto para cada pequeña característica que la red podría aprender sobre los datos. En cambio, detectar algo como una línea recta para clasificar el número '1' se llevaría a cabo de manera no centralizada en muchos nodos ocultos. Otros algoritmos,

Si está buscando más lectura, le recomiendo leer este tutorial en ai junkie. Le guía a través de los conceptos básicos de cómo funciona una red neuronal, e incluso proporciona un ejemplo de código simple para lograr que las redes neuronales conduzcan un tanque hacia una meta. Sin embargo, el tutorial no cubre la propagación hacia atrás, que es, con mucho, la forma más común de entrenar redes neuronales, y en su lugar utiliza un algoritmo genético simple. Una vez que comience a hablar sobre genética, supongo que puedes dejar de leer ...

jlund3
fuente
Gracias por todo el tiempo y los esfuerzos para poner todas estas palabras y pensamientos juntos. Estoy particularmente interesado en Convolutional NN para el reconocimiento de imágenes. Probé el ejemplo de detección de rostros en la biblioteca OpenCV, pero descubrí que solo es bueno para objetos rígidos. ¿Neural Network tiene un límite similar en el reconocimiento de patrones, es decir, solo es bueno en objetos rígidos?
user1731927
No existe una razón teórica por la cual el NN (o el CNN para ese caso) tendría un límite para su reconocimiento de patrones, pero como ya ha descubierto, ciertos problemas son más fáciles de aprender que otros. Al igual que muchos problemas en el aprendizaje automático, es probable que tenga que modificar un poco su modelo para que pueda funcionar bien en el tipo específico de problema que está tratando de resolver, y las NN no son una excepción a esto.
jlund3
1
Aquí hay un documento interesante sobre cómo estructurar mejor NN para resolver problemas de cuadrícula 2D como la clasificación de imágenes. axon.cs.byu.edu/~martinez/classes/678/Papers/science.pdf
jlund3
1
Tangencialmente, la dificultad de clasificar correctamente los objetos visuales "no rígidos", o dicho de otra manera, los objetos cuyos bordes no tienen líneas limpias, es exactamente por qué incluso la naturaleza ha determinado que el camuflaje es una excelente estrategia de evasión. Comida para el pensamiento.
mcstar
2

Que lo que te confundió es

cómo aprende sobre lo que hay en una imagen.

Lo que hay en una imagen está representado digitalmente por los valores en los píxeles de la imagen. Si tomas un ejemplo de color en la imagen. El píxel puede tener tres valores, cada uno para los tres colores principales: rojo, verde y azul ( RGB). Un píxel con ( 10,50,100) significa que tiene "menos" elementos de color azul que un píxel con ( 40,50,100). Por lo tanto, en la imagen, el primer píxel representa una región con menos color azul. Esta es la información que la red neuronal aprende, de una ubicación / región de la imagen a la otra y termina "sabiendo" lo que hay en la imagen. El mismo principio se aplica para otras características de imagen (además del color) que pueden usarse como entrada a la red neuronal. Vea esto y aprenda cómo funciona la red neuronal. esto para conceptos básicos de imagen y luego pase a esto

Gathide
fuente
1

Todos los problemas de aprendizaje automático son iguales. Tiene algunos datos del tren, aprende un modelo que representa estos datos y tiene la capacidad de generalizar este conocimiento de esa manera que agrupa, clasifica y aprende con diferentes algoritmos.

En Reconocimiento de imágenes, nuevamente tiene un conjunto de imágenes sobre las que desea aprender.

  1. Estas imágenes se procesan primero y algunas características se extraen de las imágenes (muchos esquemas posibles de características de imagen como SIFT, Bag of WORDS) como si usara píxeles y sus valores.
  2. Dele estas imágenes con los vectores de características correspondientes a su algoritmo ML (Neural Net, SVM u otros).
  3. Aprende un modelo
  4. Use este modelo para reconocer objetos que se ven suficientemente en los datos de entrenamiento.

Si desea reconocer más de una cosa, use un clasificador múltiple para cada una.

erogol
fuente
1

También me gustaría mencionar muy popular para el reconocimiento de imágenes de redes neuronales convolucionales. Aquí hay un enlace a la explicación simplificada de una CNN .

Brevemente, en CNN la imagen se divide primero en características, como bordes, formas, colecciones de formas. Luego, estas características se 'alimentan' a una red neuronal multicapa 'normal' totalmente conectada (perceptrón multicapa).

En más detalles, se aplica un conjunto de filtros para extraer entidades en forma de un mapa de entidades. Un filtro es solo una matriz (aleatoria al principio) que se aplica a la imagen original para que se calcule el producto de puntos de la matriz de imagen original y la matriz de filtro y se sume el resultado. El filtro se mueve a lo largo de la imagen original un píxel (el paso) a la vez y se llena la matriz del mapa de características. Se crea un mapa de características para cada filtro. Luego se introdujo la no linealidad con RELU (Unidad lineal rectificada) para cada píxel en cada mapa de características. La agrupación, mediante la aplicación de max (), sum () o average (), se realiza después de la convolución. Finalmente, las características extraídas de esta manera se ven como piezas 'magnificadas' de la imagen original. Estas características se ingresan en una red neuronal completamente conectada (todas las unidades están conectadas) y las probabilidades para cada imagen (digamos que capacitamos a nuestra red en imágenes de automóviles, árboles y botes) se calculan después de cada paso de alimentación a través de la red. La red está capacitada, lo que significa que los parámetros (pesos) y las matrices de filtro se optimizan mediante retropropagación (minimización del error de clasificación errónea). Cuando se ingresa una nueva imagen en la red capacitada, solo se necesita información para identificar la imagen (siempre que la red sea lo suficientemente precisa, es decir, la capacitamos con suficientes ejemplos, etc.) lo que significa que los parámetros (pesos) y las matrices de filtro se optimizan mediante retropropagación (minimización del error de clasificación errónea). Cuando se ingresa una nueva imagen en la red capacitada, solo se necesita información para identificar la imagen (siempre que la red sea lo suficientemente precisa, es decir, la capacitamos con suficientes ejemplos, etc.) lo que significa que los parámetros (pesos) y las matrices de filtro se optimizan mediante retropropagación (minimización del error de clasificación errónea). Cuando se ingresa una nueva imagen en la red capacitada, solo se necesita información para identificar la imagen (siempre que la red sea lo suficientemente precisa, es decir, la capacitamos con suficientes ejemplos, etc.)

Leo Skhrnkv
fuente
0

Es bueno saber que ANN puede crear cualquier función f (x) o f (x, y, z, ..) o cualquier multifunción para el caso. Pero también es importante saber que las funciones tienen límites en la forma en que pueden clasificar los datos ... hay subconjuntos de relaciones más complejos de conjuntos de poder de objetos, que son importantes en la clasificación y estas funciones no las describen de manera elegante o natural, pero son importantes en el lenguaje y en la clasificación de objetos. ANN puede lograr esto sin embargo también.

zach
fuente