Biblioteca de evaluación y entrenamiento de redes neuronales artificiales implementada en Rust y OpenCL
Description
El presente trabajo consiste en el desarrollo de un framework para el diseño, evaluación y entrenamiento de Redes Neuronales con soporte de OpenCL para acelerar los cálculos mediante del uso de la Unidad de Procesamiento Gráfico (GPU por sus siglas en inglés) y desarrollado en Rust, un lenguaje de alto nivel diseñado para la programación de sistemas con un desempeño equiparable a C y C++. En primer lugar, se exploran algunas de las librerías de machine learning más utilizadas en la industria actualmente (Tensorflow, Theano, CNTK, PyTorch y Keras), así como otros proyectos de machine learning más recientes propuestos por la comunidad de Rust (Rust Tensorflow, Juice, Rust-autograd y tchrs). De este análisis se obtiene una comparación breve entre las soluciones existentes que sirve para establecer puntos de mejora en el estado del arte del área de machine learning en Rust. Posteriormente se analizan las bases teóricas sobre las cuales se fundamenta el modelado, entrenamiento y evaluación de redes neuronales: los perceptrones, las funciones de activación, los algoritmos detrás del entrenamiento de una red neuronal (feedforward-backpropagation), técnicas para el procesamiento de grandes cantidades de datos, generalización de una red neuronal y el sobreentrenamiento. Se detallan también las características de OpenCL y Rust que permiten implementar dichas bases teóricas a lo largo de este trabajo. Con la finalidad de establecer un marco de referencia que ayude a determinar el éxito de la biblioteca que se desarrolla en este trabajo, se toman dos problemas bastante populares en el área de machine learning (compuerta XOR y detección de dígitos escritos a mano a partir del dataset MNIST), cuya solución radica en el uso de redes neuronales clásicas. Ambas soluciones son implementadas con la biblioteca propuesta en este trabajo y se procede a comparar el desempeño obtenido contra los mismos modelos de redes neuronales implementados con Tensorflow y Keras. Finalmente, se proporciona una discusión a partir de los resultados obtenidos durante los experimentos realizados y se analizan posibles mejoras en el desempeño de la biblioteca, así como trabajo a futuro.ITESO, A. C.