24 votos

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

Estoy intentando aprender cómo funcionan las redes neuronales en el reconocimiento de imágenes. He visto algunos ejemplos y estoy aún más confuso. En el ejemplo de 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. A continuación, entrenar la red, y luego funciona, no es perfecto.

Lo que me confundió de la red neuronal es cómo aprende lo que hay en una imagen. No necesita hacer umbralización, o segmentación, o medición, de alguna manera la red aprende a comparar imágenes y reconocer. Ahora es como magia para mí. ¿Por dónde empezar a aprender redes neuronales?

24voto

ForCripeSake Puntos 265

Cuando estudiaba los trabajos del profesor Kunihiko Fukushima sobre la neocognición en los años 80, me di cuenta de que una red neuronal puede aprender a clasificar algo tan complejo como los datos de una imagen a partir de ejemplos y respuestas correctas. En lugar de limitarse a mostrar a su red un montón de imágenes y utilizar la retropropagación para dejar que resolviera las cosas por sí misma, adoptó un enfoque diferente y entrenó su red capa por capa, e incluso nodo por nodo. Analizó el rendimiento y el funcionamiento de cada uno de los nodos de la red y los modificó intencionadamente para que respondieran de la forma prevista.

Por ejemplo, sabía que quería que la red fuera capaz de reconocer líneas, así que entrenó 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. De este modo, sabía exactamente con qué partes de la red podía contar para dispararse cuando existían los patrones deseados. Luego, como cada capa está muy conectada, todo el neocognitrón en su conjunto podía identificar cada una de las partes compuestas presentes en la imagen sin importar dónde existieran físicamente. Así, cuando en algún lugar de la imagen existiera un segmento de línea concreto, siempre habría un nodo específico que se activaría.

Manteniendo esta imagen siempre presente, consideremos la regresión lineal, que consiste simplemente en encontrar una fórmula (o una línea) mediante la suma del error cuadrático, que pase lo más cerca posible de los datos, lo cual es bastante fácil de entender. Para encontrar "líneas" curvas podemos hacer el mismo cálculo de suma de productos, excepto que ahora añadimos algunos parámetros de x^2 o x^3 o incluso polinomios de orden superior. Ahora tenemos un clasificador de regresión logística. Este clasificador puede encontrar relaciones que no son lineales por naturaleza. De hecho, la regresión logística puede expresar relaciones que son arbitrariamente complejas, pero todavía tiene que elegir manualmente el número correcto de características de potencia para hacer un buen trabajo en la predicción de 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 el las capas ocultas pueden considerarse "selectores de características" automáticos . Esto elimina el trabajo de elegir manualmente el número y la potencia correctos de las características de entrada. Así, la 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 clasificador de conjuntos arbitrariamente complejos** (esto, sólo suponiendo, que haya suficientes capas ocultas y conexiones para representar la complejidad del modelo que necesita aprender). Al final, se espera que una NN que funcione bien aprenda no sólo "la relación" entre la entrada y las salidas, sino que nos esforcemos por conseguir una abstracción o un modelo que generaliza Bien.

Sin embargo, como regla general, la red neuronal no puede aprender nada que un ser humano razonablemente inteligente no pudiera aprender teóricamente con el tiempo suficiente a partir de los mismos datos,

  • puede ser capaz de aprender algunas cosas que nadie ha descubierto todavía
  • para grandes problemas, un banco de ordenadores que procese redes neuronales puede encontrar soluciones realmente buenas mucho más rápido que un equipo de personas (a un coste mucho menor)
  • una vez entrenadas, las NN producirán resultados coherentes con las entradas con las que han sido entrenadas y deberían generalizar bien si se ajustan adecuadamente
  • Los NN nunca se aburren ni se distraen

10voto

Raffael Puntos 154

Quizá haya oído decir que las redes neuronales son " aproximadores de funciones universales ". En esencia, el teorema de Cybenko dice que para cualquier función que asigne reales a reales, se puede aproximar con una red neuronal con funciones de activación sigmoideas. De hecho, resulta que las redes neuronales permiten calcular cualquier función que se pueda calcular con una función de activación sigmoidea. Máquina de Turing (es decir, cualquier cosa para cuyo cálculo se pueda escribir un algoritmo). Por desgracia, estas pruebas sólo dicen que para una configuración finita de neuronas y pesos, se puede aproximar cualquier función.

La teoría está muy bien, pero tu pregunta parece ir más en la línea de cómo codificar realmente el cálculo de una función en un conjunto de neuronas y pesos. Para ilustrarlo, considere un ejemplo sencillo: el XOR exclusivo. El XOR toma dos entradas y las pasa. Cuando se activa una y sólo 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.

A three layer Perceptron net capable of calculating XOR borrowed from wikipedia.

Observa que los tres nodos ocultos hacen cosas diferentes. Los nodos más a la izquierda y más a la derecha simplemente pasan a través de las activaciones de los nodos de entrada correspondientes. La neurona central 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 la forma en que se realiza el trabajo en una red neuronal.

Obviamente, para funciones más complejas, la combinación y recombinación debe hacerse de formas más inteligentes y complicadas, pero esto es en esencia lo que ocurre a bajo nivel. Lo curioso es que esto es todo lo que se necesita para calcular cualquier función computable. Por otra parte, las máquinas de Turing también resultan ser engañosamente sencillas...

El problema es que en realidad no tenemos una forma de generar mágicamente la red neuronal que compute alguna función arbitraria. Las pruebas sólo nos dicen que hay alguna red por ahí que podría hacerlo. Cuando entrenamos nuestras redes neuronales, simplemente intentamos encontrar una red que se acerque bastante.

En el contexto del reconocimiento de imágenes, se podría imaginar la codificación de patrones en la red. Por ejemplo, para reconocer el número "1", se podría imaginar un nodo oculto que espera que una columna de píxeles esté activada en su mayoría o en su totalidad, y que los píxeles vecinos estén desactivados. Este nodo oculto podría ser bastante bueno reconociendo una línea recta en esa columna concreta. 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 muestro a la red un uno, suficientes nodos ocultos de línea recta se activarán, indicando un '1'. El problema, por supuesto, es generalizar la red para que pueda reconocer un conjunto variado de entradas.

Espero que esto te ayude a entender más o menos los conceptos de cómo una red neuronal puede realizar cálculos. Sin embargo, has dado con un punto que es bastante importante sobre las redes neuronales: en general es difícil, en el mejor de los casos, entender por qué la red escupe un resultado concreto, especialmente si tenemos en cuenta que para algo como el reconocimiento de imágenes, las redes suelen ser lo suficientemente grandes como para que a los humanos nos cueste comprender cada una de las partes móviles de la máquina. Para complicar aún más el asunto, en general la mayoría de las redes neuronales no tienen un único 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" tendría lugar de forma no centralizada en muchos nodos ocultos. Otros algoritmos, como los árboles de decisión, son mucho mejores en este sentido.

Si desea leer algo más, le recomiendo encarecidamente que lea esto tutorial en ai junkie. En él se explican los fundamentos del funcionamiento de las redes neuronales, e incluso se ofrece un ejemplo de código sencillo para que las redes neuronales conduzcan un tanque hacia un objetivo. El tutorial, sin embargo, no cubre la retropropagación, que es con mucho la forma más común de entrenar redes neuronales, y en su lugar utiliza un simple algoritmo genético. Una vez que empieza a hablar de genética, supongo que puedes dejar de leer...

2voto

Que lo que te confundió es

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

Lo que hay en una imagen se representa digitalmente mediante los valores de los píxeles de la imagen. Si tomamos como ejemplo el 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 ). Así, en la imagen el primer píxel representa una región con menos color azul. Esta es la información que aprende la red neuronal, de una localización/región de la imagen a otra y acaba "sabiendo" lo que hay en la imagen. El mismo principio se aplica a otras características de la imagen (además del color) que pueden utilizarse como entrada para la red neuronal. Véase este y este para conceptos básicos de imagen y luego pasar a este para aprender cómo funcionan las redes neuronales.

1voto

Erogol Puntos 379

Todos los problemas de aprendizaje automático son iguales. Tienes algunos datos de entrenamiento, aprendes un modelo que representa estos datos y tienes la capacidad de generalizar este conocimiento de esa manera agrupas, clasificas, aprendes con diferentes algoritmos.

En el reconocimiento de imágenes se dispone de nuevo de un conjunto de imágenes sobre las que se quiere aprender.

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

Si desea reconocer más de una cosa, utilice varios clasificadores para cada una.

1voto

Edwin Puntos 48

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

Brevemente, en la CNN la imagen se divide primero en características, como bordes, formas, colecciones de formas. A continuación, estas características se "introducen" en una red neuronal multicapa "normal" totalmente conectada (perceptrón multicapa).

Más en detalle, se aplica un conjunto de filtros para extraer características en forma de mapa de características. Un filtro no es más que una matriz (aleatoria al principio) que se aplica a la imagen original, de modo que se calcula el producto punto de la matriz de la imagen original y la matriz del filtro y se suma el resultado. El filtro se mueve a lo largo de la imagen original un píxel (el paso) a la vez y la matriz del mapa de características se va llenando. Se crea un mapa de características para cada filtro. A continuación, se introduce la no linealidad con RELU (unidad lineal rectificada) para cada píxel de 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. Por último, las características extraídas de este modo parecen trozos "ampliados" de la imagen original. Estas características se introducen en una red neuronal totalmente conectada (todas las unidades están conectadas) y las probabilidades de cada imagen (digamos que hemos entrenado nuestra red con imágenes de coches, árboles y barcos) se calculan después de cada paso por la red. La red se entrena, lo que significa que los parámetros (pesos) y las matrices de filtrado se optimizan mediante retropropagación (minimización del error de clasificación). Cuando se introduce una nueva imagen en la red entrenada, sólo se necesita el feedforward para identificar la imagen (siempre que la red sea lo suficientemente precisa, es decir, que la hayamos entrenado con suficientes ejemplos, etc.).

i-Ciencias.com

I-Ciencias es una comunidad de estudiantes y amantes de la ciencia en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X