Importancia de la Dimensión de los Datos de Entrada en Machine Learning

0
135

Desde que comencé a escribir artículos sobre Machine Learning aquí en Panama Hitek, me he propuesto explorar una amplia variedad de temas interesantes relacionados con esta disciplina, yendo más allá del simple uso de los algoritmos disponibles en la actualidad. En muchos de los artículos que he compartido hasta ahora, me he centrado en desarrollar algoritmos que implementen métodos de clasificación y probarlos en el conjunto de datos MNIST.

Sin embargo, hay algo que ha captado mi atención: todos los casos que hemos abordado hasta ahora utilizan la misma representación de datos del conjunto de datos MNIST, que consiste en un array unidimensional de 784 columnas. En el campo del Machine Learning, esto se conoce como un «flattened input array».

Para explicar este concepto de una manera más clara, les he preparado esta imagen:

Representación de las filas y columnas de pixeles en una imagen de un dígito del dataset MNIST

La imagen muestra uno de las imágenes del dataset MNIST. Todas las muestras de este dataset son imágenes de dígitos con una resolución de 28×28. En total, la imagen cuenta con 784 pixeles (28 x 28 = 784), donde cada pixel es representado por un valor entre 0 y 255. Un pixel representado por 0 es un pixel negro, mientras que un pixel de 255 es un pixel completamente blanco. Un pixel gris se puede representar con un número proporcional al valor de la intensidad del color.

La mayoría de los algoritmos que hemos probado aquí (Random Forests, KNN, Redes Neuronales, Support Vector Machine, etc) utilizan una representación «aplanada» (flatenned) de estas imágenes, donde cada fila de pixeles se juntan una al lado de la otra para formar una única fila de 784 pixeles.

Aquí les dejo una representación gráfica del proceso de convertir una imagen de 2 dimensiones en una imagen de una sola dimensión, el «flatenning».

Cada fila es separada en una única fila de 28 pixeles. Luego cada fila es puesta una al lado de la otra para convertirse en una única fila formada por las 28 filas originales. Por supuesto que en contexto de Machine Learning este procedimiento no se hace de esta manera. Esta animación es simplemente una representación gráfica para que se entienda el concepto.

En el post sobre PyTorch y MNIST: Cómo entrenar una red neuronal para clasificación de imágenes presenté la siguiente imagen:

Importancia de la Dimensión de los Datos de Entrada en Machine Learning

Aquí podemos observar una representación gráfica de una red neuronal utilizada para clasificación de imágenes. Esta red cuenta con 784 nodos de entrada, los cuales representan los valores de los pixeles de la imagen. Esta red permite clasificar las imágenes en los números que representan, con un 97.81% de eficacia.

Dicho esto, me intriga la posibilidad de introducir los datos de entrada a la red neuronal en un formato bidimensional en lugar de unidimensional. En lugar de utilizar una matriz de una fila y 784 columnas, propongo emplear una matriz de 28 filas por 28 columnas, similar a las imágenes previamente mostradas.

Esta propuesta tiene sentido, ¿no crees? Para los seres humanos resulta más natural reconocer una imagen en formato 2D que cuando se encuentra representada como una única fila de píxeles. Existen patrones en las imágenes que pueden ser fácilmente identificables en dos dimensiones, pero que podrían pasar desapercibidos en una dimensión.

Motivado por esta idea, me propuse tratar de descubrir cuáles son las técnicas utilizadas para emplear datos multidimensionales como entrada en algoritmos de aprendizaje automático (Machine Learning). Descubrí que la mayoría de los algoritmos clásicos de Machine Learning utilizan datos de entrada unidimensionales. Aún así, existen opciones para procesar datos de entrada multidimensionales, específicamente utilizando redes neuronales convolucionales.

Redes Neuronales Convolucionales

Las redes neuronales convolucionales (CNN por sus siglas en inglés, Convolutional Neural Networks) son un tipo de arquitectura de redes neuronales diseñadas para procesar datos en formato multidimensionales, como imágenes. Estas redes han demostrado ser muy efectivas en tareas de visión por computadora, reconocimiento de imágenes y procesamiento de datos espaciales.

La principal característica de las CNN es su capacidad para aprender y extraer automáticamente características relevantes de las imágenes a través de capas convolucionales. Estas capas convolucionales aplican filtros o kernels a las regiones de la imagen, lo que permite detectar patrones locales, como bordes, texturas o formas específicas. Estas características se capturan y combinan en capas subsiguientes mediante operaciones como el submuestreo o el agrupamiento (pooling), lo que reduce la dimensionalidad de los datos y conserva las características más relevantes.

Además de las capas convolucionales, las CNN también suelen incluir capas de activación no lineales, como la función ReLU (Rectified Linear Unit), que introducen la no linealidad en el modelo y ayudan a capturar relaciones más complejas entre las características. También pueden incluir capas de normalización, como la normalización por lotes (batch normalization), que estandarizan los valores de las características y aceleran el entrenamiento de la red.

Al final de la arquitectura de una CNN, se suelen utilizar capas totalmente conectadas (fully connected layers) para realizar la clasificación o la predicción final. Estas capas toman las características extraídas por las capas convolucionales y las utilizan para generar una salida final.

La siguiente imagen muestra una representación muy básica de una red neuronal convolucional:

Importancia de la Dimensión de los Datos de Entrada en Machine Learning

La imagen presentada muestra una simplificación de la estructura de una red neuronal convolucional. La red se compone de una imagen de entrada en forma de datos 2D. Esta imagen se introduce en la red a través de una capa convolucional, que realiza operaciones de convolución al multiplicar matricialmente pequeñas partes de la imagen por los filtros de la capa convolucional. Como resultado, se obtiene una estructura multidimensional de datos, que puede convertirse en una estructura unidimensional utilizando un Lineal Layer (representado en la imagen como «Capa de conversión»).

Después de la conversión de los datos de entrada de una estructura multidimensional a una dimensión, la red neuronal utiliza la estructura tradicional de capas ocultas completamente interconectadas para mapear los resultados de la clasificación en la capa de salida, que consta de 10 nodos en este caso.

Codificación de la red neuronal convolucional

El código que describe la red condolucional mostrada en la imagen anterior lo podrán encontrar en nuestro repositorio de Github. Se trata de una red neuronal codificada en Pytorch, con una capa convolucional en la entrada, una capa de conversión a 128 nodos y 10 nodos de salida. Similar a la de nuestro post de redes neuronales simples con Pytorch.

Este es el código de la red neuronal convoluciona:

El resultado de ejecutar este código es el siguiente:

Importancia de la Dimensión de los Datos de Entrada en Machine Learning

De todos los códigos que he probado hasta ahora en esta tarea de clasificación con MNIST, este algoritmo es el que ha alcanzado el mayor nivel de precisión. Esto a pesar de que se trata de una implementación muy básica que podría ser optimizada a través de una cuidadosa selección de hiperparámetros o agregando más capas a la extructura de la red neuronal. Pero de eso hablaremos después.

Aquí les dejo el top actualizado de los mejores algoritmos que hemos probado con MNIST:

Tabla de resultados de algoritmos de Machine Learning probados con el MNIST dataset

También lo probé con mis propios números manuscritos, algo que ya he hecho en otras ocasiones con otros algoritmos que hemos probado. La red neuronal convolucional, por primera vez, logró clasificar correctamente los 10 números que escribí a mano:

Importancia de la Dimensión de los Datos de Entrada en Machine Learning

Les recuerdo que en mi post sobre Analizando mi escritura con Machine Learning en Python construí mi propio dataset de numeros manuscritos:

Importancia de la Dimensión de los Datos de Entrada en Machine Learning

Hasta ahora ningún algoritmo había logrado clasificar correctamente los 10 números.

Conclusiones

En Machine Learning, la representación de datos desempeña un papel crucial en el rendimiento de los algoritmos. En el caso del conjunto de datos MNIST, se ha utilizado ampliamente la representación «aplanada» de las imágenes como un array unidimensional de 784 columnas en diferentes algoritmos de clasificación. Sin embargo, explorar nuevas formas de representar los datos puede llevar a resultados más precisos y una mejor comprensión de los patrones en las imágenes. Esto logramos demostrarlo en este post.

Se propuso utilizar una representación bidimensional de las imágenes, manteniendo su estructura original de filas y columnas. Para ello, las redes neuronales convolucionales (CNN) se presentan como una opción poderosa. Estas redes han demostrado su eficacia en tareas de visión por computadora y reconocimiento de imágenes al aprender y extraer automáticamente características relevantes a través de capas convolucionales.

En el contexto del conjunto de datos MNIST, podemos aprovechar la estructura bidimensional de las imágenes al introducir los datos de entrada en la red neuronal a través de una capa convolucional. Esta capa realiza operaciones de convolución, multiplicando matricialmente pequeñas partes de la imagen con filtros específicos. Esto permite capturar patrones locales y extraer características relevantes.

Es importante destacar que, después de esta etapa, es necesaria la conversión de la estructura multidimensional de datos a una estructura unidimensional mediante una capa de conversión o «Lineal Layer». Esto permite utilizar la estructura tradicional de capas ocultas completamente interconectadas en la red neuronal, las cuales clasifican las características extraídas en la capa de salida.

En resumen, al emplear redes neuronales convolucionales y aprovechar la estructura bidimensional de las imágenes en el conjunto de datos MNIST, se abre una nueva vía para mejorar la precisión de los algoritmos de clasificación y comprender mejor los patrones presentes en las imágenes. La exploración de nuevas representaciones y técnicas en Machine Learning es fundamental para avanzar en el campo y obtener resultados más precisos y confiables en diversas aplicaciones.

Espero que la información presentada en este post les haya sido útil. Cualquier duda o comentario me lo pueden hacer llegar a través de la sección de comentarios.

2 4 votes
Article Rating
Suscríbete
Notify of
guest

0 Comments
Inline Feedbacks
View all comments