scieee AI-readable full text Open interactive document viewer

Caracterización de piezas mediante técnicas de Deep Learning

Ivanov Manov, Istaliyan

Abstract

Grado en Ingeniería Informática

Full text

Universidad de Valladolid ESCUELA DE INGENIER´ IA INFORM ´ ATICA TRABAJO FIN DE GRADO GRADO EN INGENIER´ IA INFORM ´ ATICA MENCI ´ ON EN INGENIER´ IA DE SOFTWARE Caracterizaci´on de piezas mediante t´ecnicas de Deep Learning Autor: Istaliyan Ivanov Manov Tutor: Dr.Benjam´ın Sahelices Fern´andez A mi familia. I II RESUMEN Resumen El control de calidad es una parte del proceso de producci´on de suma relevancia. Identificar correctamente las piezas que sufran imperfecciones, antes de que sean usadas en el producto final, es una de las tareas clave en este proceso. Para poder automatizarla es posible usar t´ecnicas de Deep Learning que han visto gran aplicaci´on durante la ´ultima d´ecada. Este Trabajo de Fin de Grado est´a orientado a aprender los conceptos sobre los que se apoyan estas t´ecnicas y aplicarlos, usando la librer´ıa fastai, para realizar clasificadores de im´agenes mediante los que automatizar la detecci´on de piezas defectuosas. Conceptos clave: Deep Learning, redes neuronales, descenso de gradiente, backpropagation,overfitting, convoluci´on, fastai,Transfer Learning. III RESUMEN IV ABSTRACT Abstract Quality control is an extremely important part of the production process. Identifying correctly the components that suffer imperfections, before they are used in the final product, is one key part of this process. In order to automate it, is possible to use Deep Learning techniques that have seen great use during the last decade. This project is aimed at learning que concepts on which this techniques are based on and appliying them, using the fastai library to create classifiers with which to automate this detection. Key concepts: Deep Learning, neural networks, gradient descent, backpropagation, overfitting, convolution, fastai, transfer learning. V ABSTRACT VI ´ INDICE GENERAL ´ Indice general Resumen III Abstract V Lista de figuras XI Lista de tablas XV 1. Introducci´on 1 1.1. Motivaci´on ..................................... 1 1.2. Objetivos ...................................... 2 1.3. Requisitost´ecnicos................................. 3 1.3.1. Hardware .................................. 3 1.3.2. Software................................... 3 1.4. Estructura del documento . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2. Planificaci´on 7 2.1. Introducci´on..................................... 7 2.2. Stepwise ...................................... 7 2.2.1. Escogerelproyecto............................. 8 2.2.2. Limites del proyecto . . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.2.3. Infraestructura del proyecto . . . . . . . . . . . . . . . . . . . . . . . . 9 VII ´ INDICE DE FIGURAS 5.36. Convoluci´on pointwise.Fuente:[57]........................ 97 5.37. Gr´aficas de coste frente a n´umero de batches evaluados para el Dataset 1 (izda.) y Dataset 2 (dcha) usando la implementaci´on Xception. . . . . . . . . 99 5.39. Im´agenes transformadas mediante el Bloque 1. . . . . . . . . . . . . . . . . . 99 5.38. Matriz de confusi´on para el Dataset 1 (izda.) y Dataset 2 (dcha) usando la implementaci´on de Xception. . . . . . . . . . . . . . . . . . . . . . . . . . . . 100 5.40. Im´agenes transformadas mediante bloques residuales con convoluciones separables......................................... 100 XIV ´ INDICE DE CUADROS ´ Indice de cuadros 2.1. Tabla de estimaci´on opt. optimista y real. realista del esfuerzo para cada actividad......................................... 11 2.2. Tabla de riesgos y sus caracter´ısticas . . . . . . . . . . . . . . . . . . . . . . . 12 2.3. Planes para cada riesgo presentado en la Tabla 2.2 . . . . . . . . . . . . . . . 13 4.1. Principales funciones de activaci´on usadas en Machine Learning. . . . . . . . 35 5.1. Resultado del entrenamiento sobre el Dataset 2 mediante Transfer Learning de una arquitectura ResNet-34 . . . . . . . . . . . . . . . . . . . . . . . . . . 71 5.2. Resultado del entrenamiento sobre el Dataset 1 mediante Transfer Learning de una arquitectura ResNet-34 . . . . . . . . . . . . . . . . . . . . . . . . . . 71 5.3. Resultado del entrenamiento sobre el Dataset 2 mediante Transfer Learning de una arquitectura ResNet-34 . . . . . . . . . . . . . . . . . . . . . . . . . . 72 5.4. Resultado del entrenamiento sobre el Dataset 1 mediante Transfer Learning de una arquitectura Alexnet . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 5.5. Resultado del entrenamiento sobre el Dataset 2 mediante Transfer Learning de una arquitectura Alexnet . . . . . . . . . . . . . . . . . . . . . . . . . . . 77 5.6. Resultado del entrenamiento sobre el Dataset 1 mediante Transfer Learning de una arquitectura SqueezeNet . . . . . . . . . . . . . . . . . . . . . . . . . 79 5.7. Resultado del entrenamiento sobre el Dataset 2 mediante Transfer Learning de una arquitectura SqueezeNet . . . . . . . . . . . . . . . . . . . . . . . . . 79 5.8. Resultado del entrenamiento sobre el Dataset 1 mediante Transfer Learning de una arquitectura Densenet . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 5.9. Resultado del entrenamiento sobre el Dataset 2 mediante Transfer Learning de una arquitectura Densenet . . . . . . . . . . . . . . . . . . . . . . . . . . . 80 XV ´ INDICE DE CUADROS 5.10. Resultado del entrenamiento sobre el Dataset 1 mediante Transfer Learning mediante la funci´on de activati´on Leaky ReLU ................. 82 5.11. Resultado del entrenamiento sobre el Dataset 2 mediante Transfer Learning mediante la funci´on de activaci´on Leaky ReLU ................. 82 5.12. Resultado del entrenamiento sobre el Dataset 1 mediante Transfer Learning mediante la funci´on de activati´on tangente hiperb´olica. . . . . . . . . . . . . 84 5.13. Resultado del entrenamiento sobre el Dataset 2 mediante Transfer Learning mediante la funci´on de activati´on tangente hiperb´olica. . . . . . . . . . . . . 84 5.14. Resultado del entrenamiento sobre el Dataset 1 usando el optimizador Adam. 86 5.15. Resultado del entrenamiento sobre el Dataset 2 usando el optimizador Adam. 86 5.16. Resultado del entrenamiento sobre el Dataset 1 usando la arquitectura LeNet implementadaenPytorch.............................. 88 5.17. Resultado del entrenamiento sobre el Dataset 1 mediante una red ResNet-34 implementada y entrenada exclusivamente sobre el dataset. . . . . . . . . . . 93 5.18. Resultado del entrenamiento sobre el Dataset 2 mediante una red ResNet-34 implementada y entrenada exclusivamente sobre el dataset . . . . . . . . . . . 93 5.19. Resultado del entrenamiento sobre el Dataset 1 mediante una red Xception implementada y entrenada exclusivamente sobre el dataset. . . . . . . . . . . 98 5.20. Resultado del entrenamiento sobre el Dataset 2 mediante una red Xception implementada y entrenada exclusivamente sobre el dataset. . . . . . . . . . . 99 5.21. Comparaci´on entre los resultados obtenidos en los distintos experimentos para el Dataset 1 donde TL(Transfer Learning), FA(Funciones de Activaci´on) y OP(Optimizador). ................................. 101 5.22. Comparaci´on entre los resultados obtenidos en los distintos experimentos para el Dataset 2 donde TL(Transfer Learning), FA(Funciones de Activaci´on) y OP(Optimizador). ................................. 101 XVI CAP´ ITULO 1. INTRODUCCI ´ ON Cap´ıtulo 1 Introducci´on En este cap´ıtulo, en primer lugar, se va a describir el origen de las cuestiones principales que han motivado la realizaci´on de este trabajo. A continuaci´on se indicar´an los objetivos que se plantean al iniciar el proyecto as´ı como los requisitos t´ecnicos necesarios para llevarlo a cabo. Por ´ultimo presentar´a la estructura que va a seguir esta memoria. 1.1. Motivaci´on En los ´ultimos a˜nos hemos sido testigos de grandes avances en el campo de la Inteligencia Artificial (IA).En concreto el auge del Aprendizaje Profundo (en ingl´es, Deep Learning) ha derivado del gran potencial que tiene para obtener una soluci´on satisfactoria a cierto tipo de problemas. Algunos de estos problemas pueden ser: Clasificaci´on de im´agenes. Detecci´on de objetos. Segmentaci´on. Traducci´on autom´atica. Detecci´on de anomal´ıas. La clasificaci´on de im´agenes es uno de los problemas donde los avances en Deep Learning has supuesto una mejora significativa respecto a las soluciones obtenidas por m´etodos mas tradicionales de Visi´on Artificial. Pero estas mejoras en los resultados han venido acompa˜nadas de una mayor complejidad a la hora de desarrollar aplicaciones basadas en Deep Learning que han vinculado esta disciplina casi por completo al mundo acad´emico, sin poder integrarlas de manera r´apida y efectiva en los procesos de desarrollo habituales en las empresas. 1 1.2. OBJETIVOS Esto est´a empezando a cambiar gracias a la introducci´on de librer´ıas para Deep Learning como fast.ai [1] que ofrecen una forma sencilla de obtener resultados convincentes a problemas como los mencionados anteriormente. La posibilidad de desarrollar aplicaciones usando fast.ai de forma r´apida y sin la necesidad de muchos a˜nos de estudio del campo puede suponer un punto clave en la integraci´on de la Inteligencia Artificial en la industria, de forma que se pueda obtener los beneficios derivados de los avances en Deep Learning sin una gran barrera de entrada. El control de calidad en los procesos industriales se puede ver altamente beneficiado por este tipo de aplicaciones debido al estrecho v´ınculo que tiene con la clasificaci´on de im´agenes. Automatizar la identificaci´on de piezas defectuosas puede mejorar la calidad y la velocidad a la que se producen los productos y por tanto este ser´a el problema con el que trataremos en este Trabajo de Fin de Grado. 1.2. Objetivos El objetivo principal de este trabajo es desarrollar las competencias necesarias para automatizar el proceso de identificaci´on de piezas industriales defectuosas usando t´ecnicas de Deep Learning y la librer´ıa fast.ai. Para conseguir este objetivo plantearemos varios objetivos intermedios. 1. Aprendizaje te´orico de los conceptos b´asicos usados en Aprendizaje Autom´atico: Antes de poder adentrarnos en el campo de Deep Learning primero debemos familiarizarnos con algunas de las herramientas matem´aticas b´asicas que son com´unmente utilizadas en aprendizaje autom´atico (en ingl´es, Machine Learning) ya que Deep Learning es un subcampo de este. Centraremos el estudio en los conceptos que est´en mas estrechamente relacionados con la clasificaci´on de im´agenes. 2. Aprendizaje te´orico de conceptos usados en Deep Learning: Una vez explorados los conceptos principales de Machine Learning pasaremos a entender como usarlos de manera efectiva en aplicaciones de Deep Learning as´ı como los conceptos propios de este campo como las redes neuronales. 3. Aprendizaje te´orico y pr´actico de la librer´ıa fast.ai: Para poder poner en pr´actica los conceptos te´oricos aprendidos hasta este punto deberemos familiarizarnos con la librer´ıa fast.ai, entender cual es el proceso t´ıpico definido por los creadores para obtener buenos resultados y aplicarlo a ciertos ejemplos para comprobar lo aprendido. 4. Puesta en pr´actica de los conocimientos adquiridos mediante un caso real: Por ´ultimo usaremos im´agenes obtenidas de un proceso de fabricaci´on de piezas real para clasificarlas en funci´on de si son incorrectas o no. Se comprobar´a como se comportan distintas arquitecturas y se comparar´an los resultados para de esta forma obtener los modelos mas efectivos posibles. 2 CAP´ ITULO 1. INTRODUCCI ´ ON 1.3. Requisitos t´ecnicos En esta secci´on vamos a describir los materiales tanto elementos hardware como software, usados durante el desarrollo de este proyecto. 1.3.1. Hardware El trabajo completo se ha llevado a cabo en un PC port´atil MSI GF63 Thin 9SC con las siguientes caracter´ısticas: Procesador: Intel Core i7-9750H Nucleos: 6 Frecuencia: 2,60 GHz Cache: 12 MB Intel Smart Cache Memoria: 16GB DDR4 2666MHz Almacenamiento: 512GB NVMe PCIe SSD Tarjeta gr´afica: GTX 1650 MAX Q GDDR5 NVIDIA CUDA Cores: 1024 Frecuencia b´asica: 930 - 1395 MHz Frecuencia modificada: 1125 - 1560 MHz Velocidad de memoria: Hasta 8Gbps Ancho de banda de memoria: 128 GB/s Esta ´ultima parte referente a la tarjeta gr´afica usada se debe tener en cuenta en caso de querer replicar los resultados obtenidos a lo largo de este proyecto debido a que las t´ecnicas de Deep Learning usan una gran cantidad de datos. Para acelerar los c´alculos necesarios se ha usado la GPU para la ejecuci´on de todos los programas creados salvo que se indique lo contrario. Intentar ejecutar los programas con una tarjeta gr´afica con caracter´ısticas inferiores puede producir resultados dispares en cuanto a tiempo de ejecuci´on o directamente la imposibilidad de ejecutar el c´odigo. 1.3.2. Software Sistema operativo: Ubuntu 20.04.2 LTS Frente a la elecci´on entre desarrollar este proyecto en Windows o alguna distribuci´on de Linux se ha tomado la decisi´on de usar Linux por varios motivos. En primer lugar es el sistema que se ha utilizado mayoritariamente durante el curso de la carrera y por tanto el factor comodidad se debe tener en cuenta. Debemos tener en cuenta la linea 3 1.3. REQUISITOS T ´ ECNICOS de comandos y el sistema de gesti´on de paquetes que hacen trabajar con m´ultiples versiones de distintos paquetes software una mejor experiencia. Tambi´en se debe tener en cuenta que al usar tarjetas gr´aficas de NVIDIA es posible que se creen conflictos con sistemas operativos que usen el kernel Linux debido a los drivers necesarios. Respecto a este punto la distribuci´on usada ha minimizado estos errores que son mas comunes en otras distribuciones. Lenguaje de programaci´on: Python 3.8.5 En este caso la elecci´on no ha sido tanto personal como influenciada por las elecciones de los profesionales especializados en Aprendizaje Autom´atico. Esto es debido a varios factores. Python es un lenguaje de programaci´on multiparadigma que fue creado en 1991 [2]. Una de las grandes ventajas de utilizar este lenguaje es la legibilidad y la sencillez de la sintaxis. A la hora de resolver problemas de Aprendizaje Autom´atico usar un lenguaje f´acil de entender supone disminuir la complejidad total del trabajo. Otra de las grandes ventajas que tiene Python frente a otros lenguajes es el gran n´umero de librer´ıas para Machine Learning que dispone. Algunos ejemplos de estas librer´ıas son Tensorflow, Pytorch, scikit-learn y la que usaremos en este proyecto: fastai . Adem´as de estas librer´ıas, cuyo uso espec´ıfico es el Machine Learning, Python dispone de una gran cantidad de librer´ıas estrechamente relacionadas con este campo pero que pueden ser usadas para prop´ositos diferentes. Algunos ejemplos son Matplotlib, una librer´ıa dedicada a la generaci´on de gr´aficas a partir de listas o arrays, u OpenCV, dedicada a la visi´on artificial en tiempo real. Entorno de Deep Learning: Anaconda Para simplificar el trabajo a la hora de lidiar con versiones espec´ıficas de m´ultiples librer´ıas se ha decidido usar Anaconda que es una distribuci´on libre de Python ampliamente usada en problemas como el Aprendizaje Autom´atico u otros tipos de c´omputo cient´ıfico. La ventaja que ofrece esta distribuci´on es que incluye Conda, que es un sistema de gesti´on de paquetes y entornos, adem´as de numerosos paquetes usados habitualmente en Aprendizaje Autom´atico. A continuaci´on se listan las librer´ıas y aplicaciones necesarias para el desarrollo del proyecto. Todas ellas vienen instaladas en la distribuci´on base de Anaconda a excepci´on de fastai, Tensorboard y Torch. Puede que las versiones que vengan por defecto en la distribuci´on base no se correspondan con las listadas a continuaci´on y por tanto habr´ıa que modificarlas de forma manual. Conda 4.9.2 Conda nos brinda la posibilidad de crear entornos virtuales f´acilmente donde dispongamos de los paquetes que necesitemos con las versiones adecuadas para no crear conflictos ya que hay ocasiones en las que algunos paquetes requieren de una versi´on espec´ıfica de otro. El manejo de estas dependencias hace de Conda una herramienta esencial. fastai 2.2.5 La librer´ıa fastai, como ya se ha mencionado, tendr´a un papel central en el desarrollo de este proyecto. Hay otras muchas librer´ıas de Deep Learning que se podr´ıan usar. Algunas de ellas son Tensorflow, Pytorch, Keras o Theano. La principal ventaja de fastai es que proporciona componentes de alto nivel, con los cuales es sencillo obtener 4 CAP´ ITULO 1. INTRODUCCI ´ ON resultado satisfactorios a problemas t´ıpicos de Deep Learning, as´ı como componentes de bajo nivel para usuarios experimentados que requieren modificaciones mas sutiles en los modelos. Para esto fastai usa PyTorch, que es una librer´ıa de bajo nivel, como base sobre la que a˜nadir nuevas funcionalidades. Jupyter Notebook 6.2.0 Jupyter Notebook [3] es una aplicaci´on web comunicada con un kernel de c´alculo. Esto permite la ejecuci´on de m´ultiples lenguajes de programaci´on, entre ellos Python, Julia, C/C++, R y otros. La estructura en la que se presenta esta aplicaci´on es una secuencia de celdas. Estas sirven como entrada de texto en la que se incluye el c´odigo a ejecutar. Una vez ejecutado el c´odigo se muestra su salida a continuaci´on o se pasa a la pr´oxima celda en caso de que no haya nada que mostrar por pantalla. Las celdas pueden ser editadas y ejecutadas de nuevo sin tener que ejecutar el c´odigo completo del Notebook, solo las celdas que lo requieran. Esto permite experimentar de una manera r´apida con distintas modificaciones. Tensorboard 2.4.0 Tensorboard es un conjunto de aplicaciones web para visualizaci´on de gr´aficas y modelos. Originalmente fue creado para Tensorflow y posteriormente integrado en Pytorch. Esta herramienta puede ser sustituida por otras similares ya que ofrecen una funcionalidad parecida y durante este proyecto no se usar´an todas las opciones de Tensorboard. Nos serviremos de ella como herramienta de apoyo a la hora de visualizar ciertos datos. scikit-image 0.17.2 Esta librer´ıa [4] contiene algoritmos de procesamiento de im´agenes. Al igual que el caso anterior puede ser sustituida por otras, como OpenCV, que ofrecen herramientas similares. Algunos de estos algoritmos pueden ser usados para aplicar modificaciones a las im´agenes, algo que es muy ´util a la hora de aumentar sint´eticamente los datos empleados para los modelos. 1.4. Estructura del documento A continuaci´on se describir´a el contenido de los cap´ıtulos y las secciones presentes en este Trabajo de Fin de Grado excluyendo el Capitulo 1 ya que es el actual. Cap´ıtulo 2: En este cap´ıtulo se detallar´a las principales caracter´ısticas de la metodolog´ıa usada para determinar el plan que se seguir´a durante este proyecto. Siguiendo esta metodolog´ıa se elaborar´a un plan que tiene como objetivo cumplir los objetivos propuestos en un tiempo limitado. Se indicar´an las tareas que se deber´an realizar, sus duraciones y cuales son los principales problemas que pueden surgir y como afrontarlos. Cap´ıtulo 3: En este cap´ıtulo se har´a una descripci´on de las tecnolog´ıas que se usar´an para conseguir los objetivos. Se dar´an ejemplos de su uso as´ı como una visi´on global del tipo de problemas que pueden ser resueltos y c´omo encajan en este proyecto. Cap´ıtulo 4 : Este cap´ıtulo se centrar´a en primer lugar sobre los conceptos te´oricos que conforman la base del Aprendizaje Autom´atico. Se realizar´a la distinci´on entre las diferentes 5 1.4. ESTRUCTURA DEL DOCUMENTO categor´ıas en las que se divide as´ı como los principales algoritmos usados en este campo. Sobre esta base se describir´a el principal modelo de computaci´on usado en Aprendizaje Profundo, las redes neuronales convolucionales y sus principales componentes. Capitulo 5 : En este cap´ıtulo se realizar´a una descripci´on de los datos con los que se va a trabajar. A continuaci´on se mostrar´an los resultados de los distintos experimentos realizados usando distintos enfoques as´ı como una comparaci´on entre ellos para determinar cual ha sido la mejor estrategia. Se Cap´ıtulo 6 : Por ´ultimo, en este cap´ıtulo, se presentar´an las conclusiones que se han obtenido despu´es de llevar a cabo el proceso. En esta secci´on se incluir´an las principales dificultades que se han presentado as´ı como cuales han sido las partes mas relevantes del trabajo. Tambi´en se revisar´an los objetivos presentados en el Cap´ıtulo 1 y se comprobar´a si han llegado a cumplirse o no. 6 CAP´ ITULO 2. PLANIFICACI ´ ON Cap´ıtulo 2 Planificaci´on 2.1. Introducci´on En este cap´ıtulo se va a describir el enfoque usado para planificar este proyecto. En primer lugar se va a describir en que consiste este enfoque, identificando y explicando cada uno de los pasos necesarios y despu´es se va a indicar como se ha llevado a la pr´actica cada uno de los pasos mencionados. 2.2. Step wise El enfoque usado en la planificaci´on de este proyecto tiene el nombre de Step wise. El nombre mismo ya nos indica la estructura que se va a seguir ya que la traducci´on es “paso a paso”. Este no es el ´unico enfoque que podemos usar ya que existen otras metodolog´ıas, como PRINCE2 [5] o SSADM [6], para gestionar un proyecto. Antes de indicar cuales ser´an los pasos a seguir veamos en que se diferencia de otros m´etodos y cual es su origen.El enfoque Step wise [7] es creado por Robert T.Hughes en 1996. Debido al incremento en la producci´on de software surgi´o la necesidad de usar marcos de trabajo efectivos ya que el desarrollo era cada vez m´as complejo y los proyectos cada vez mas grandes. Step wise se centra en la gesti´on de este tipo de proyectos y toma algunos conceptos de PRINCE2 como la realizaci´on de un plan m´as general que despu´es es refinado mediante un proceso iterativo o el uso de “productos” que son los resultados de las actividades realizadas. Step wise por su parte es una metodolog´ıa escalable, resulta adecuada tanto para proyectos peque˜nos como grandes, y centrada en la planificaci´on a diferencia de PRINCE2 donde se incluye la monitorizaci´on y el control en pasos posteriores. Para realizar la planificaci´on del proyecto Step wise propone los siguientes pasos: 7 2.2. STEP WISE 2.2.8. Asignaci´on de recursos Al haber exclusivamente una persona trabajando en este proyecto es f´acil asignar las tareas a la persona encargada ya que para todas es el autor. Pero tambi´en se debe ver c´omo se asignan los recursos temporales y como encajan en la planificaci´on. Para ello se har´a uso del diagrama de Gantt presente en la Figura 2.4. 2.2.9. Revisi´on, publicaci´on, modificaci´on y ejecuci´on del plan Una vez descrito el plan de acci´on y habiendo planificado cada aspecto de este es el momento de revisar cada uno de los pasos y publicar el plan. Habitualmente el proceso de revisi´on del plan deber´ıa ser realizado en conjunto con miembros de la organizaci´on que no han formado parte de la creaci´on del plan pero tienen claros los objetivos. Esto es debido a que mientras se est´a realizando una actividad es habitual tener ciertos fallos que no se han detectado. Una nueva perspectiva sobre el resultado puede detectar estos errores y evitar problemas futuros. Este proceso no es viable en esta situaci´on debido a que la ´unica persona encargada del proyecto es el autor. Por ello la revisi´on, publicaci´on, modificaci´on y ejecuci´on del plan son tareas que no pueden ejecutarse de la forma ideal sino que deben ser adaptadas a la situaci´on existente. Esto no es una situaci´on extra˜na debido a que Step-wise es una metodolog´ıa que funciona igualmente para proyectos de una sola persona. La ´unica diferencia es que estos ´ultimos pasos se realizar´a por la misma persona. Por ´ultimo se debe mencionar que existe la posibilidad de hacer ciertas modificaciones en el plan a medida que se est´a ejecutando. En caso de que haya cambios de este estilo en el proyecto estos ser´an mencionados en las conclusiones ya que no pueden indicarse antes de la ejecuci´on del plan. 2.2.10. C´alculo de presupuesto Para realizar el c´alculo del presupuesto existen m´ultiples enfoques. Algunos de estos enfoques est´an m´as orientados al trabajo cercano con el cliente donde se realizan pago cada vez que hay un bloque funcional de software. Otros en cambio buscan obtener un contrato inalterable donde el precio ya est´a definido al inicio del proyecto. En este caso se usar´a un enfoque que estimar´a el pago dividi´endolo en dos categor´ıas, los materiales usados y las unidades de esfuerzo necesarias para completar el proyecto. Las estimaci´on del precio de los materiales es sencilla en este caso ya que la totalidad del software usado es de c´odigo abierto y por tanto gratuito. Respecto al hardware usado, detallado en el Cap´ıtulo 1, este ya era propiedad del desarrollador y por tanto supone un coste de 0e. 14 CAP´ ITULO 2. PLANIFICACI ´ ON Figura 2.4: Diagrama Gantt en el que se indica la duraci´on relativa de cada tarea. 15 2.2. STEP WISE En este apartado cabe destacar que las aplicaciones basadas en Deep Learning suelen ser computacionalmente muy costosas. Realizar estos c´alculos en la CPU casi siempre resulta inadecuado y por tanto se deben usar GPUs, y mas recientemente TPUs (Tensorial Processing Unit) que debido a su capacidad de paralelizaci´on permiten realizar estos c´omputos. Durante este proyecto se ha utilizado la GPU detallada en el Capitulo 1 pero su rendimiento es modesto. Muchos de los resultado obtenidos podr´ıan haber sido mejores, al menos respecto al tiempo de ejecuci´on necesario para obtenerlos, en caso de disponer de una GPU mejor. Los precios de este tipo de hardware pueden variar entre los 500 e1000 epara GPUs que puedan obtener un buen rendimiento en modelos similares a los presentados en este proyecto hasta los 10000 epara GPUs y TPUs usados en datacenters de forma profesional. Pasemos ahora a la estimaci´on del pago basado en las unidades de esfuerzo. En este caso una unidad de esfuerzo supondr´a una hora de trabajo realizado por el desarrollador. El proyecto tiene una carga de 12 cr´editos ECTS. Un cr´edito ECTS equivale a 25 horas de trabajo, por tanto obtenemos 300 horas de trabajo totales para la realizaci´on del proyecto. El sueldo medio de un ingeniero inform´atico reci´en graduado oscila entre los 18.000ey los 22.000eanuales brutos. En este caso supondremos el valor m´ınimo de este intervalo. De esta forma obtenemos un sueldo bruto de 1500ey por tanto un pago de 68,18epor jornada laboral completa (8 horas) o aproximadamente 8,5epor hora de trabajo. Por tanto si multiplicamos el precio por hora obtenido por las horas totales que hay que realizar obtenemos un coste total de 2556,81epara la realizaci´on del proyecto. Como no hay costes materiales que cubrir este es el precio final. 16 CAP´ ITULO 3. CONTEXTO TECNOL ´ OGICO Cap´ıtulo 3 Contexto tecnol´ogico 3.1. Introducci´on En este cap´ıtulo se va a realizar una exposici´on mas detallada de las librer´ıas usadas as´ı como herramientas que las complementan de modo que en el Cap´ıtulo 5 no sea necesario centrarse en estos detalles. 3.2. Fastai Como ya se ha indicado, fastai es una librer´ıa de aprendizaje profundo que permite al usuario usar componentes de alto nivel para dise˜nar modelos de forma r´apida y obtener resultados que sean comparables a los obtenidos por gigantes de la tecnolog´ıa como Google o Facebook. En la mayor´ıa de casos obviamente esto no ocurrir´a pero ha habido momentos en los que se ha probado el potencial de esta librer´ıa, como en 2017 [11] cuando un equipo de estudiantes consigui´o obtener mejores resultados que Google e Intel en la competici´on DAWNBench. Fastai tambi´en permite realizar modificaciones a bajo nivel lo que hace que la librer´ıa sea apta para un amplio espectro de usuarios. Para ver como se consigue esto debemos fijarnos en la arquitectura de la librer´ıa. En la Figura 3.1 se pueden ver los bloques que componen la API de fastai. Los bloques superiores indican las aplicaciones t´ıpicas para las que est´an configuradas las clases de fastai: visi´on artificial, procesamiento del lenguaje natural... Esta configuraci´on base incluye par´ametros predefinidos que han sido probados con anterioridad y se ha llegado a la conclusi´on de que producen buenos resultados para un amplio n´umero de situaciones. Por ejemplo, el learning rate predefinido en la clase Learner tiene un 17 3.2. FASTAI Figura 3.1: Arquitectura de la librer´ıa fastai. valor de 0,001. Este valor probablemente ser´a modificado y es recomendable que sea as´ı pero es un buen lugar de inicio. Adem´as de los par´ametros tambi´en se incluyen decisiones ya probadas sobre distintos aspectos de las arquitecturas. Por ejemplo, una parte muy importante del proceso de aprendizaje de un modelo es el algoritmo mediante el que se realiza la optimizaci´on. El algoritmo b´asico para realizar esta optimizaci´on es el descenso de gradiente, explicado en m´as profundidad en el Cap´ıtulo 4. Pero existen variantes como el descenso de gradiente estoc´astico (tambi´en explicado en el Cap´ıtulo 4), Adam [12] o el descenso de gradiente con momento [13] (o simplemente Momentum). Fastai por defecto usa el algoritmo Adam que produce resultados satisfactorios habitualmente. L´ogicamente este algoritmo no ser´a el que obtenga los mejores resultados siempre, si fuese as´ı se usar´ıa siempre. Dependiendo del dataset que se est´e utilizando, las transformaciones que se puedan realizar sobre las im´agenes, la arquitectura que se ha implementado, etc... se pueden obtener mejores resultados adaptando esta selecci´on. El descenso de gradiente estoc´astico suele tardar m´as tiempo pero puede producir un modelo que generalice mejor [14]. En la segunda fila de la Figura 3.1 se pueden ver algunos ejemplos de clases de alto nivel. La clase Learner tiene un papel fundamental en cualquier aplicaci´on que use fastai. En ella se introduce un modelo, un Dataloader y una funci´on de p´erdida (tambi´en llamada funci´on de coste). Antes de continuar con esta clase veamos las principales caracter´ısticas de un Dataloader. 18 CAP´ ITULO 3. CONTEXTO TECNOL ´ OGICO La clase Dataloader nos permite trabajar con el dataset que se va a usar para realizar el aprendizaje. Se debe especificar un lugar desde el que se cargan los elementos, si se est´a trabajando con im´agenes se especifica la carpeta, si en cambio son datos tabulares se puede especificar la ruta de un fichero CSV o TSV, tambi´en existe la posibilidad de especificar la URL de la que descargar alguno de los datasets ofrecidos por fastai como CIFAR o MNIST. Aparte de especificar el dataset se puede definir el n´umero de elementos que queremos en cada batch, el n´umero de procesos que se van a usar para cargar los datos, si queremos mezclar los elementos (esto puede ayudar a obtener una mejor generalizaci´on al aplicar el modelo al dataset de validaci´on). Volviendo a la clase Learner, esta nos permite definir aparte de la tasa de aprendizaje, las m´etricas de las que queremos realizar un seguimiento, callbacks que queremos introducir para modificar el bucle de aprendizaje etc. El bucle de aprendizaje es la funci´on principal del Learner ya que es el momento en el que se modifican los valores de los par´ametros del modelo con el objetivo de minimizar los valores de la funci´on de p´erdida que se ha seleccionado. 1from f a s t a i . v i s i o n . a l l import * 2 3l e a r n e r = c n n l e ar n er ( dls , r es net3 4 , op t f un c=SGD, 4l o s s f u n c= CrossEntropyLossFlat ( ) , 5metr i cs = accuracy , 6cbs=Mixup ) 7 8l e a r n e r . f i t (1 0) Listing 3.1: Ejemplo de un Learner en fastai En el Listing 3.1 se puede observar la inicializaci´on de un Learner para una arquitectura Resnet 34 que usa un Dataloader del que obtiene los datos y descenso de gradiente estoc´astico como m´etodo de optimizaci´on, una funci´on de coste propia de fastai que supone una modificaci´on de la entrop´ıa cruzada, la especificaci´on de las m´etricas que en este caso es la precisi´on de clasificaci´on y un callback para realizar aumento sint´etico de datos. A continuaci´on se llama al bucle de aprendizaje que se ejecuta durante 10 epochs. Todo esto en unas pocas l´ıneas de c´odigo. Esto supone una gran simplificaci´on de complejidad con respecto a otras librer´ıas de Deep Learning como Pytorch que se ver´a en la siguiente secci´on. 1from f a s t a i . v i s i o n . a l l import * 2 3def c o r r e c t a ( nombre imagen ) : 4return nombre imagen [ 0 ] == ’C ’ 5 6d l s = ImageDataLoaders . from name func ( path , g e t i m a g e f i l e s ( path ) , 7v a l i d p c t =0.3 , s ee d =42, l a b e l f u n c=c o r r e c t a ( ) , 8item tfms=Resiz e (100 , ResizeMethod . Pad , pad mode=’ z e r o s ) 9) Listing 3.2: Ejemplo de un Dataloader 19 3.2. FASTAI En el Listing 3.2 se puede observar la inicializaci´on de un Dataloader de im´agenes donde se especifica el path en el que se encuentran, el porcentaje de validaci´on que nos permite indicar la cantidad de im´agenes sobre las que el modelo probar´a su capacidad de generalizaci´on, una semilla de modo que los batchs contengan siempre las mismas im´agenes si volvemos a entrenar el modelo, una funci´on que determina si la imagen es correcta dependiendo de si la primera letra del nombre es el caracter ‘C’ y una transformaci´on donde las im´agenes van a pasar a tener un tama˜no de 100 pixels de ancho por 100 pixels de alto. Y estas son solo algunas de las clases usadas para visi´on artificial, existen otras muchas como TextDataLoaders oLMLearner para procesamiento de lenguaje natural, TabularDataLoaders para datos tabulares, etc. Pero es posible que las necesidades del programador sean mas espec´ıficas. Para ello se dispone de las clases que forman el nivel medio y bajo de la arquitectura. Los callbacks como ya se ha indicado modifican el bucle de aprendizaje insertando el c´odigo del callback en distintos momentos del bucle, por ejemplo al empezar cada epoch, al empezar el aprendizaje, despu´es de realizar las predicciones, etc. 1class ModelResetter ( Callback ) : 2def b e g i n t r a i n ( s e l f ) : s e l f . model . r e s e t ( ) 3def b e g i n v a l i d a t e ( s e l f ) : s e l f . model . r e s e t ( ) Listing 3.3: Ejemplo sencillo de un Callback En el Listing 3.3 se puede ver un ejemplo sencillo de como puede ser un callback personalizado que hereda de la clase Callback de fastai. En este caso se eliminan los valores calculados en las diferentes capas del modelo al principio del entrenamiento y al principio de la validaci´on [15]. Es posible tambi´en que sea necesario implementar un nuevo algoritmo mediante el que realizar la optimizaci´on ya que los ya implementados no se adaptan a las necesidades del programador. Para ello se puede usar la clase Optimizer de la cual pueden heredar los optimizadores personalizados. Este tipo de optimizador gen´erico no existe en otras librer´ıas de Deep Learning donde se deber´ıa programar el algoritmo desde cero.Como todos los algoritmos est´an basados en la idea del descenso de gradiente en esencia lo que proporciona esta abstracci´on es la posibilidad de definir la forma en la que se da el paso hacia los valores de la funci´on que la minimizan (m´as en detalle en el Cap´ıtulo 4) y la forma en la que se guardan las estad´ısticas. Por ´ultimo al nivel mas bajo se pueden crear Pipelines personalizadas que permiten al programador definir una serie de funciones que ser´an aplicadas en serie a un elemento. Este elemento puede ser una imagen en forma de tensor, un objeto Image, objetos TensorText, etc. Si volvemos al Listing 3.2 podemos ver que en la pen´ultima l´ınea se realiza la operaci´on Resize sobre el dataset que estamos cargando. Mediante las Pipelines podemos sustituir las funciones predeterminadas que permite usar fastai. De esta forma se dispone de total libertad para modificar los datos que estemos cargando para ser utilizados por el modelo y adem´as 20 CAP´ ITULO 3. CONTEXTO TECNOL ´ OGICO el tipo de datos que modifiquemos puede ser el que deseemos siempre y cuando funcione correctamente con las funciones que se definan. Como se ha visto a lo largo de esta secci´on fastai es una librer´ıa dise˜nada para ser apta en m´ultiples niveles de uso y adaptarse a toda clase de necesidades. El dise˜no de la arquitectura que da la posibilidad de usar abstracciones o implementar mucha de la funcionalidad hace que sea id´onea para un proyecto como este. 3.3. PyTorch Como fastai est´a construida sobre Pytorch, as´ı como otras muchas librer´ıas, es conveniente dedicar una breve secci´on a esta librer´ıa as´ı como hacer una comparaci´on entre algunos de los elementos m´as habitualmente usados. PyTorch es una librer´ıa de aprendizaje profundo que a su vez est´a basada en Torch. Como base sobre la que se implementa fastai, PyTorch proporciona un c´omputo eficiente de tensores y distintas herramientas con las que construir redes neuronales profundas. (a) Bucle de aprendizaje (b) Carga de datos Figura 3.2: Muestras de c´odigo haciendo uso de PyTorch [16] En la la imagen ade la Figura 3.2 podemos ver el c´odigo necesario en PyTorch para realizar el bucle de aprendizaje para un modelo definido previamente en una aplicaci´on de Transfer Learning. Si recordamos el Listing 3.1 vemos como en fastai definimos el bucle con todos los par´ametros necesario en dos l´ıneas cuando en PyTorch se requiere definir a mano 21 3.4. TENSORBOARD todos los pasos. Sobre todo en los casos en los que se usa Transfer Learning la implementaci´on del bucle la mayor´ıa de veces supone una fuente de errores aportando muy poco en cuanto a modificaciones funcionales de valor. Al hacer zoom en la imagen (se ha reducido el tama˜no para no ocupar varias p´aginas con este c´odigo) podemos ver que manejamos los mismos elementos que en fastai, un modelo en el que ajustaremos los pesos y los bias, una funci´on de activaci´on (criterion), un algoritmo de optimizaci´on y el n´umero de epochs que se traduce en iteraciones del bucle. El ´unico elemento novedoso es el scheduler que b´asicamente es una funci´on que indica c´omo debe variar la tasa de aprendizaje a lo largo del proceso ya que habitualmente se quiere empezar con una tasa mayor e ir decreciendo seg´un se acerca la funci´on que se est´a optimizando al valor m´ınimo. Para ello en fastai tambi´en se dispone de una forma muy c´omoda para definir este comportamiento. En la imagen bde la Figura 3.2 se implementa una funcionalidad similar a la del Listing 3.2 donde se realizan transformaciones a los datos de entrada,se llevan a GPU si est´a disponible y se implementa una funci´on de visualizaci´on. De nuevo toda esta funcionalidad se implementa en fastai en dos l´ıneas sin perder expresividad. 3.4. Tensorboard Por ´ultimo veremos una herramienta para visualizaci´on de grafos de modelos, m´etricas, im´agenes, etc. Forma parte de la librer´ıa Tensorflow y ofrece una interfaz muy f´acil de usar adem´as de cierta funcionalidad que no se encuentra en otras librer´ıas e implementar por completo ser´ıa un trabajo considerable. Tensorboard est´a integrado en PyTorch y por tanto resulta muy sencillo transferir todos los datos necesarios para crear las gr´aficas, visualizar las im´agenes, etc. ´ Unicamente se debe instanciar una clase SummaryWriter() que incluye los m´etodos necesarios mediante los que transferir los datos y poder visualizarlos. 1from torch . u t i l s . tensorboard import SummaryWriter 2 3w r i t e r = SummaryWriter ( l o g d i r=path ) 4 5f o r epoch in range ( epochs ) : 6... 7w r i t e r . a d d s c a l a r ( ’Perdida ’ , perdida , epoch ) 8... 9w r i t e r . c l o s e ( ) Listing 3.4: Ejemplo de la funcionalidad b´asica de Tensorboard Como vemos en el Listing 3.4 en cada iteraci´on del bucle de aprendizaje podemos introducir una l´ınea en la que enviamos las estad´ısticas necesarias a Tensorboard, en este caso la p´erdida acumulada hasta el momento, de modo que la variable perdida contendr´a los valores de la variable dependiente y la variable epoch los de la variable independiente. 22 CAP´ ITULO 3. CONTEXTO TECNOL ´ OGICO Una peculiaridad a tener en cuenta es que cada vez que trasladamos alg´un tipo de dato a Tensorboard debemos pasarlo en forma de Tensor que es el tipo b´asico con el que trabaja PyTorch. Por tanto no se puede introducir una imagen, incluso un video o audio que no hayan sido convertidos a tensores previamente. 23 4.1. CONCEPTOS B ´ ASICOS DE APRENDIZAJE AUTOM ´ ATICO Conjunto de prueba: Estos son los datos sobre los que se va a probar el funcionamiento del modelo que ha sido entrenado con los datos del conjunto de entrenamiento. Los datos del conjunto de prueba nunca deben haber sido usados en el entrenamiento ya que el objetivo de este conjunto de datos es ver como se va a comportar el modelo antes ejemplos que no ha visto hasta ahora, dicho de otra manera, se va a probar como de bien generaliza el modelo. Conjunto de validaci´on: Este conjunto de datos pertenece a una categor´ıa intermedia entre el conjunto de prueba y el de entrenamiento. Las razones por las que se cre´o este conjunto de datos tendr´an m´as sentido m´as adelante pero de forma simplificada este conjunto de datos se usa para evaluar de forma imparcial el ´exito del modelo y poder de esta forma modificar los hiperpar´ametros del modelo sin usar el conjunto de prueba. Es una forma de evitar usar el conjunto de datos de prueba para modificar los hiperpar´ametros y en cierto sentido enga˜nar al modelo. En este punto se han explicado las principales caracter´ısticas que buscamos en los conjuntos de datos y cual es la forma habitual de trabajar con ellos. Volvamos a los principales tipos de aprendizaje autom´atico. Aprendizaje supervisado: En este tipo de aprendizaje el modelo va a recibir un conjunto de datos junto con la etiqueta que le corresponde a ese dato. Lo que aprender´a el modelo de esta forma es la relaci´on que existe entre los datos y sus etiquetas para despu´es poder generalizar y aplicarlo a datos nuevos donde no va a existir una etiqueta para ese dato ya que va a ser el modelo el que la proporcione. La tarea de clasificar im´agenes se encuentra en este campo ya que las im´agenes del conjunto de datos est´an etiquetadas y el modelo aprende a predecir (en caso de que pueda generalizar de forma adecuada) la etiqueta de nuevas im´agenes. Aprendizaje no supervisado: En este caso los datos que se proporcionan al modelo no est´an etiquetados y el objetivo es conseguir que el modelo identifique relaciones entre los datos pero sin que tengamos la ayuda que suponen las etiquetas de los datos. El agrupamiento (en ingl´es, clustering) es un problema t´ıpico que se encuentra en el campo del aprendizaje no supervisado. En este tipo de problemas el modelo debe agrupar los datos con caracter´ısticas similares en grupos y separar los que tengan caracter´ısticas contrarias. Esto puede hacer dif´ıcil evaluar el rendimiento del modelo ya que el clustering suele ser subjetivo por naturaleza. Aprendizaje por refuerzo: En este caso el aprendizaje se basa en las acciones que debe tomar un agente. Se introduce aqu´ı este nuevo concepto que no se ha mencionado antes. Como indican Russell y Norvig [23] : “un agente es algo que razona y un agente racional es aquel que act´ua con la intenci´on de alcanzar un mejor resultado”. El aprendizaje por refuerzo se diferencia de los otros paradigmas mencionados en el uso de un agente al que se le aplica una funci´on que devuelve un valor num´erico que representa la recompensa que obtiene el agente por realizar una acci´on. El objetivo del agente es maximizar esta funci´on. Una caracter´ıstica relevante de este tipo de aprendizaje es que existe un enfrentamiento entre tomar decisiones ya probadas que han funcionado anteriormente y tomar decisiones novedosas que pueden conllevar una mayor recompensa pero tambi´en pueden suponer una penalizaci´on. 30 CAP´ ITULO 4. INTRODUCCI ´ ON A LAS REDES NEURONALES Una vez descritos los principales paradigmas podemos empezar introduciendo algunos de los conceptos propios del aprendizaje autom´atico y empezaremos por el modelo computacional que revolucion´o este campo: las redes neuronales artificiales. 4.1.2. Redes neuronales artificiales Las redes neuronales artificiales surgieron en los a˜nos 60, momento en el que se consolid´o el campo de la Inteligencia Artificial. De manera similar a la Visi´on Artificial, las primeros desarrollos en redes neuronales artificiales surgieron con la intenci´on de desarrollar un modelo computacional del aprendizaje biol´ogico. Para lograr este objetivo se intent´o reconstruir el cerebro humano partiendo de sus componente m´as b´asicos, las neuronas y las sinapsis que las conectan. Al igual que en la Visi´on Artificial no se consigui´o el objetivo por completo pero result´o en grandes avances para la IA. Las neuronas biol´ogicas son muy complejas pero su funcionamiento b´asico es relativamente sencillo. Estas c´elulas se encargan de transmitir los impulsos nerviosos cuando reciben alg´un tipo de est´ımulo. Una vez estimulada una neurona esta se activa, lo que produce una corriente el´ectrica que viaja a trav´es de las sinapsis. Las primeras neuronas artificiales fueron desarrolladas por Frank Rosenbatt en 1957 y se llamaron perceptrones. Este tipo de neuronas act´uan como una funci´on con un numero variable de entradas y una salida binaria. La salida binaria nos indica si la neurona ha sido activada o no. Figura 4.2: Diagrama de un perceptr´on. Fuente:[24] En la Figura 2.2 podemos ver las entradas del perceptr´on x1, x2, ..., xn. Para calcular la salida se realiza la suma ponderada usando los pesos correspondientes y esta suma ser´a evaluada mediante una funci´on de activaci´on la cual indica si la neurona ha sido activada o no.La primera entrada es una constante con valor 1 y por lo tanto el peso w0nunca ser´a cancelado, algo que puede ocurrir con los dem´as pesos. A este peso se le suele denominar sesgo (en ingl´es, bias). Este comportamiento se expresa mejor mediante la siguiente funci´on definida a trozos. salida =(0 si Pn n=1 wnxn+bias ≤0 1 si Pn n=1 wnxn+bias > 0(4.1) 31 4.1. CONCEPTOS B ´ ASICOS DE APRENDIZAJE AUTOM ´ ATICO Un ejemplo muy simple del uso del perceptr´on podr´ıa ser decidir si deber´ıamos quedarnos en casa o no en funci´on del tiempo que vemos por la ventana. Podremos observar distintos fen´omenos, est´a nublado, hay viento, hay lluvia, etc. Cada uno de estos fen´omenos ser´a una entrada para el perceptr´on. En caso de que est´e nublado la entrada correspondiente tendr´a el valor 1. Los pesos indicar´an la importancia que le damos a cada fen´omeno,si no nos importa el viento pero odiamos mojarnos entonces el peso de la lluvia ser´a mayor que el del viento. Por otro lado el bias corresponde a las ganas que tenemos de quedarnos en casa. Si el bias tiene un valor muy alto entonces ser´a f´acil que al sumarlo a la suma ponderada de los dem´as pesos obtengamos un valor mayor que 0 y se active el perceptr´on, indicando que deber´ıamos quedarnos en casa. Con un valor negativo del bias se podr´ıa obtener un valor negativo en la suma y que el perceptr´on devuelva un 0. Con este ejemplo podemos ver que el perceptr´on tiene ciertas similitudes a como tomamos decisiones los humanos. Pero en este concepto hay un problema. Observando la ecuaci´on 2.1 podemos ver que en casos en los que la suma ponderada tenga valores muy cercanos a 0 una peque˜na variaci´on en el valor de los pesos o las entradas puede suponer un cambio en la activaci´on del perceptr´on. Este cambio tan brusco al hacer una peque˜na modificaci´on puede resultar problem´atico a la hora de modificar los pesos del perceptr´on. Pero ¿qu´e motivo habr´ıa para que cambiasen los pesos del perceptr´on? Los perceptrones no fueron creados para ser usados de forma independiente, si no para ser los bloques con los que se construyen las redes neuronales artificiales. Cada una de las salidas de un perceptr´on puede ser una de las entradas de un perceptr´on de la capa siguiente. Una capa de una red neuronal esta formada por m´ultiples neuronas artificiales que no se encuentran conectadas entre s´ı pero en cambio s´ı que est´an conectadas con las neuronas de la siguiente capa. Las salidas de las neuronas de una capa son las entradas de la capa siguiente. Figura 4.3: Diagrama de una red neuronal. Fuente: [25] Existen dos capas especiales que son las de color azul en la figura 2.3. Estas son la capa de entrada y la capa de salida. Las neuronas de la capa de entrada no tienen a su vez entradas.Si 32 CAP´ ITULO 4. INTRODUCCI ´ ON A LAS REDES NEURONALES no hay entradas en la ecuaci´on 2.1 obtendremos w0+bias ya que el resto de t´erminos se anular´an. Se comprobar´a si este valor es mayor o menor que 0 y el perceptr´on tendr´a una salida en funci´on a ello. Esto significa que al perceptr´on se le crear´a con el peso w0ybias adecuado para que su salida sea 1 o 0 en dependiendo de la entrada que se quiera definir para la red neuronal.A efectos pr´acticos podemos pensar que simplemente estamos introduciendo un 0 o un 1 a las entradas de la segunda capa de la red. Las capas de salida no tienen salida ya que representan el resultado que obtiene la red. Estos perceptrones en realidad s´ı que tienen salida pero normalmente no se representa en los diagramas ya que no es la entrada de otra capa. Volvamos a la pregunta que hab´ıamos planteado sobre la modificaci´on de los pesos del perceptr´on. Estos pueden cambiar ya que esta es la manera en la que va a ocurrir el aprendizaje. En la capa de entrada se van a introducir los valores a partir de los cuales se va a calcular la salida. Pero para obtener la salida que esperamos los pesos y bias deben ser los adecuados. Por ello si no devuelven la salida correcta hay que modificarlos. Esta modificaci´on puede resultar problem´atica ya que un peque˜no cambio puede modificar la salida de forma que el perceptr´on pase de activado a desactivado o viceversa. Pero muchas veces se requiere que este paso sea progresivo en lugar de instant´aneo. Este es el punto donde se introducen las neuronas sigmoidales. Lo que queremos obtener de estas neuronas es que una peque˜na modificaci´on en los pesos y bias se traduzca en una peque˜na modificaci´on en la salida. De esta manera se pueden ajustar los valores para evitar que haya cambios tan dr´asticos. La neuronas sigmoidales se comportan de la misma forma que los perceptrones con la ´unica diferencia encontr´andose en la evaluaci´on de la suma ponderada. salida =1 1 + e−Pn n=1 xnwn+bias (4.2) De esta forma no se compara la salida de la suma ponderada con otro valor sino que se introduce el resultado de la suma en la funci´on sigmoide. Se puede ver de forma mas simplificada en la ecuaci´on 2.3 donde zes el resultado de la suma ponderada: σ(z) = 1 1 + e−z(4.3) La funci´on sigmoide y la funci´on escal´on unitario, este es el nombre de la funci´on 2.1, no son las ´unicas que se usan para determinar como se comporta la salida de una neurona artificial. Lo que cambia en esencia son las funciones de activaci´on, la estructura de los pesos, entradas y bias se mantiene. 33 4.1. CONCEPTOS B ´ ASICOS DE APRENDIZAJE AUTOM ´ ATICO Gr´afica de la funci´on Funci´on de activaci´on H(x) = (0 si x≤0 1 si x > 0 σ(x) = 1 1+e−x R(x) = (0 si x≤0 xsi x > 0 34 CAP´ ITULO 4. INTRODUCCI ´ ON A LAS REDES NEURONALES R(x) = (αx si x≤0 xsi x > 0 *En este caso α= 0,3 tanh(x) = ex−e−x ex+e−x Cuadro 4.1: Principales funciones de activaci´on usadas en Machine Learning. En el cuadro 2.1 se introducen algunas funciones de activaci´on que no se han mencionado hasta ahora. ReLU : El nombre completo es (en ingl´es, Rectified Linear Unit). Esta funci´on es la recomendada para usar en redes neuronales actuales [19]. La raz´on por la que se da el paso de usar la funci´on sigmoide a la ReLU es por el problema del desvanecimiento del gradiente. En este punto no se han introducido todav´ıa los conceptos necesarios para explicar el problema, por lo tanto se profundizar´a en ello m´as adelante. Leaky ReLU : Modificaci´on de la funci´on de activaci´on ReLU. La Leaky ReLU evita que las salida sea 0 en caso de que la entrada sea negativa. Resuelve el problema presente en la ReLU donde el gradiente es 0 en los casos en los que la entrada de la neurona es negativa. Al existir un gradiente con valor 0 esto anula el aprendizaje que ocurre en las pr´oximas capas de la red. Esto se ver´a de forma mas clara cuando se introduzca el 35 4.1. CONCEPTOS B ´ ASICOS DE APRENDIZAJE AUTOM ´ ATICO algoritmo de propagaci´on hacia atr´as. No hay consenso sobre si siempre es mejor usar Leaky ReLU en vez de ReLU pero se ha demostrado que en muchas situaciones puede obtener resultados mejores [26]. Tangente Hiperb´olica : Variante basada en la funci´on sigmoide. La principal ventaja que tiene esta funci´on es que debido a que tiene un Rango(tanh(x)) = (−1,1) la pendiente en los puntos cercanos a 0 produce derivadas con valores mayores. Esto hace que aplicando el algoritmo de propagaci´on hacia atr´as se converja de forma m´as r´apida a una soluci´on [27]. Tambi´en tiene la ventaja de que las entradas cercanas a 0 producen salidas cercanas a 0 a diferencia de la sigmoide donde σ(x) = 0,5. Existen otras funciones de activaci´on con diferentes prop´ositos pero estas son las que se usar´an principalmente en el desarrollo de este trabajo. 4.1.3. Descenso de gradiente En esta secci´on vamos a introducir algunos conceptos que constituyen la base del funcionamiento de las redes neuronales artificiales. Esta secci´on en conjunto con la siguiente, que describe el funcionamiento del algoritmo de propagaci´on hacia atr´as, se centra en c´omo ocurre el aprendizaje. Para comprobar si una red neuronal est´a aprendiendo en primer lugar necesitamos una forma de evaluar su salida. Como se explic´o al principio del cap´ıtulo, los resultados obtenidos mejoran a trav´es de la experiencia a la que se somete al algoritmo. De modo que para saber en que medida est´a mejorando, o por el contrario empeorando, la red neuronal hay que poder cuantificar como de correcta es la salida de la red. En este punto se introducen las funciones de coste. Este tipo de funciones nos van a indicar el error que est´a cometiendo la red neuronal dada una entrada y la salida que deber´ıa obtener. Si usamos el ejemplo de la clasificaci´on de im´agenes en este caso se comparar´ıa el resultado de la imagen que se quiere clasificar y la categor´ıa a la que pertenece realmente esta imagen. La funci´on m´as usada es el error cuadr´atico medio (en ingl´es, mean squared error). ECM =1 nX x kf(x,w)−yk2(4.4) La ecuaci´on 2.4 nos indica c´omo calculamos este error. El valor de nse corresponde con el n´umero de entradas que vamos a utilizar. Este debe ser equivalente al n´umero de elementos que hay en el dataset de entrenamiento. De esta forma haremos la media entre del coste entre todos los elementos que se van a introducir en la red. La funci´on ftiene como entradas el vector que describe un elemento del dataset. Es importante indicar que x∈Rnya que este vector puede tener una dimensi´on, en este caso lo denominaremos escalar, y ser usado en un problema de regresi´on lineal o puede representar 36 CAP´ ITULO 4. INTRODUCCI ´ ON A LAS REDES NEURONALES una imagen, como es el caso en este proyecto, donde tendr´a las dimensiones necesarias para contener la informaci´on. Se puede denominar a la salida de la funci´on como ˆy=f(x,w). A partir de este momento nos referiremos a la salida obtenida de la red de esta forma. Como vemos en esencia al calcular la norma de la diferencia de vectores obtenemos la distancia euclidiana entre ambos. Podemos visualizar geom´etricamente c´omo en caso de obtener vectores similares esta distancia se acorta y al obtener vectores dispares aumenta. En la clasificaci´on de im´agenes ˆypuede ser un vector donde el elemento ˆyi∈Rrepresente la “confianza” de la red neuronal de que la entrada pertenezca a esta categor´ıa. El elemento yi∈Rrepresenta la categor´ıa a la que realmente pertenece la imagen. Como debemos saber la categor´ıa a la que pertenece realmente la imagen en realidad solo uno de los elementos de yva a tener el valor m´aximo y el resto tendr´an el valor m´ınimo ya que estaremos seguros de la categor´ıa de la imagen. Como indicamos en la secci´on anterior los elementos del dataset deben estar etiquetados. De esta manera al computar la diferencia entre los valores obtenidos como salida de la red y los valores reales se obtiene un valor num´erico que indica cuanto se acerca el resultado a los valores que quer´ıamos obtener. En el caso de que ˆyi=yiobtendremos un valor de 0 en la ecuaci´on 2.4. De esta forma sabemos que cuando ambos vectores son iguales y el resultado es 0 hemos obtenido el resultado perfecto y cuanto mayor sea este n´umero peor se ha comportado la red. Por tanto lo que trataremos de hacer es minimizar el valor de la funci´on de coste. El error cuadr´atico medio no es la ´unica funci´on de coste. Mas adelante introduciremos la entrop´ıa cruzada ya que la usaremos durante el desarrollo del trabajo. Existen otras muchas funciones pero solo mencionaremos la divergencia de Kullback-Leibler [28] ya que deriva de la entrop´ıa cruzada. Para minimizar la funci´on de coste usaremos la t´ecnica de descenso de gradiente. ∇f(x1, x2, . . . , xn) =           ∂f ∂x1 (x1, x2, . . . , xn) ∂f ∂x2 (x1, x2, . . . , xn) . . . ∂f ∂xn (x1, x2, . . . , xn)           (4.5) En la ecuaci´on 2.5 se define el gradiente de una funci´on multivariable. Para obtener el vector gradiente de una funci´on debemos obtener las derivadas parciales respecto a cada una de las variables de la misma. Cada una de estas derivadas parciales va a indicarnos si la funci´on que estamos evaluando tiene una pendiente positiva o negativa si modificamos la variable respecto a la que estamos calculando la derivada y mantenemos el resto de variables fijas. 37 4.1. CONCEPTOS B ´ ASICOS DE APRENDIZAJE AUTOM ´ ATICO De esta manera si se eval´ua ∂f ∂x1en los puntos de la entrada de la funci´on x1, x2, ..., xn, derivada parcial respecto de la variable x1, podemos obtener la pendiente del hiperplano tangente a fen el punto determinado por los valores usados respecto de x1. Si realizamos este calculo para cada una de las dimensiones de entrada, en este caso n, obtendremos la pendiente del hiperplano tangente. En caso de haber tenido solo una variable, es decir f(x), habr´ıamos obtenido la pendiente de la l´ınea tangente. De esta manera vemos como el gradiente es en realidad la generalizaci´on del concepto de la derivada para funciones multivariables. Pero, ¿cual es la utilidad de calcular el gradiente de nuestra funci´on de coste? Ya hemos mencionado que el objetivo es minimizar esta funci´on ya que de esta manera la red neuronal devolver´a valores mas cercanos a los deseados. En primer lugar vamos a comprobar que evaluar el gradiente de la funci´on en los puntos de entrada, recordar que estos valores van a ser los valores que forman el vector wque contiene los pesos, nos va a devolver la direcci´on en la que la funci´on nos va a proporcionar el valor mas alto si nos dirigimos a esta nueva direcci´on. Esto no es exactamente lo que queremos ya que no queremos maximizar la funci´on para obtener valores mas altos, si no minimizarla. Usando la direcci´on en la que obtendr´ıan el m´aximo incremento de la funci´on, si nos dirigimos en la direcci´on opuesta vamos a obtener la direcci´on en la que se obtiene el m´aximo decremento. Esto ´ultimo es lo que nos interesa principalmente para minimizar la funci´on de coste. Vamos a usar una funci´on de dos variables para ver que el gradiente corresponde a la direcci´on en la que se obtiene el m´aximo incremento. Para ellos haremos uso de las derivadas direccionales. Para una funci´on f(x, y) queremos saber cual es la direcci´on del vector vque va a suponer un mayor incremento en el resultado de la funci´on. En este caso supondremos que es un vector con longitud 1, y por lo tanto kvk= 1. Supongamos que nos encontramos en el punto con coordenadas (x0, y0). Si calculamos la derivada direccional Dvf(x0, y0) obtendremos el cambio que se produce en la funci´on fsi movi´esemos los puntos en los que evaluamos fen esa direcci´on. D~vf(x) = ∇f(x)·~v (4.6) La ecuaci´on 2.6 es la forma general de la derivada direccional.En este caso el vector se ha representado de la forma ~v aunque durante este texto se ha usado vpara referirnos a vectores. Una vez que sabemos lo que nos indica la derivada direccional vamos a maximizar este valor ya que queremos saber como obtener el m´aximo incremento en la funci´on. m´ax v∇f(x, y)·v(4.7) En las ecuaciones 2.6 y 2.7 vemos que para calcular la derivada direccional hacemos un producto escalar entre el gradiente de la funci´on y el vector v. Como el producto escalar entre dos vectores, recordemos que el gradiente es un vector tambi´en, se define como 38 CAP´ ITULO 4. INTRODUCCI ´ ON A LAS REDES NEURONALES a·b=kakkbkcos θ(4.8) entonces el valor de la derivada direccional es : Dvf(x0, y0) = ∇f(x0, y0)·v=k∇f(x0, y0)kcos θ(4.9) En la ecuaci´on 2.9 podemos ver que el vector vdesaparece ya que como se indic´o este tiene longitud 1 y por lo tanto kvk= 1. Recordemos que estamos maximizando el valor de la ecuaci´on 2.9. En este caso el valor m´aximo se obtendr´a cuando cos θ= 1, ya que Rango(cos(x)) = [−1,1], por lo tanto θ= 0. De esta forma obtenemos que el valor de la derivada direccional que est´abamos calculando, Dvf(x0, y0) = k∇f(x0, y0)k(4.10) corresponde a la longitud del vector gradiente. Pero lo que se trataba de obtener no era el valor del cambio que se produce en la funci´on fsi no la direcci´on en la que tendr´ıamos que “mover” los puntos x0ey0para obtener este valor. En esencia la direcci´on en la que apunta el vector v. Volvamos a la ecuaci´on 2.9. Como hemos indicado el valor de θque hace m´aximo el valor de Dvf(x0, y0) es θ= 0. Esto nos indica que el ´angulo entre el vector ∇f(x0, y0) es 0 y por tanto ambos vectores son paralelos. De esta manera vemos que la forma de obtener el mayor incremento en el resultado de la funci´on es modificar los valores de entrada en la misma direcci´on que el gradiente de la funci´on. Por lo tanto el vector vdebe ser : v=∇f(x0, y0) kf(x0, y0)k(4.11) De esta forma el vector vmantiene la direcci´on del vector gradiente. La ´unica diferencia es que se encuentra normalizado, es decir, se divide el vector gradiente entre la longitud del mismo. Esto es debido a que ya indicamos que este vector es un vector unitario, por lo tanto se necesita de esta normalizaci´on para cumplir la condici´on impuesta. Pero hasta este punto averiguado la direcci´on de un vector vque no indica la direcci´on hacia la que obtendr´ıamos el mayor cambio en la salida de la funci´on f. Pero en este caso se trata de minimizar la salida de la funci´on de coste. Por lo tanto si regresamos a la ecuaci´on 2.9 vemos que el valor m´ınimo se obtendr´ıa si cos θ=−1 y para ello es necesario que θ=π. Esto significa que la direcci´on del vector vser´a opuesta a la direcci´on del vector gradiente. Mas en concreto: v=−∇f(x0, y0) kf(x0, y0)k(4.12) 39 4.1. CONCEPTOS B ´ ASICOS DE APRENDIZAJE AUTOM ´ ATICO ∂C ∂wl ji =∂C ∂al j ∂al j ∂zl j ∂zl j ∂wl ji (4.16) En la ecuaci´on 4.16 vemos la dependencia entre el coste total y uno de los pesos conectados desde la neurona ien la capa l−1 a la neurona jde la capa l. Una alternativa ampliamente usada para obtener una notaci´on mas compacta es introducir el “error en la neurona”. De este modo solo se evaluar´a c´omo depende el coste total de la salida de la neurona y c´omo depende esta salida de la entrada. En la ecuaci´on 4.16 ya usamos este error aunque lo relacionamos tambi´en con el peso entrante. Por lo tanto este error se define por la siguiente ecuaci´on: δl j=∂C ∂al j ∂al j ∂zl j (4.17) Usando la ecuaci´on 4.17 podemos volver a 4.16 y realizar la sustituci´on. En este punto es recomendable prestar atenci´on al ´ultimo elemento de la ecuaci´on 4.16. Vemos que relaciona la entrada de la neurona con uno de los pesos. Pero esta misma ecuaci´on ser´ıa v´alida para los bias, solo que se debe tener cuidado con algunos aspectos. Como vimos en la ecuaci´on 4.1 cada peso se multiplica por un valor xque en la primera capa es obtenido de la entrada de la red y en cada capa posterior les obtenido de las salidas de las neuronas en la capa l−1, a cuyo valor hemos designado la variable a. Por lo tanto ahora la entrada de cada neurona tendr´a la siguiente forma: zl j=X i al−1 iwl ji +biasl(4.18) Si ahora realizamos la derivada de la ecuaci´on 4.18 respecto de w,∂zl j ∂wji obtendremos la activaci´on de la neurona correspondiente en la capa l−1, al−1 i. Pero si realizamos la derivada respecto del bias obtenemos 1. Mediante un poco de manipulaci´on algebraica podemos ver como calcular la derivada parcial del coste respecto de los pesos y bias en funci´on del error de la neurona, δ. ∂C ∂wl ji =δl∂zl j ∂wl ji =δlal−1 j(4.19) ∂C ∂bl=δl∂zl j ∂bl=δl(4.20) Mediante las ecuaciones 4.19 y 4.20 podemos calcular el efecto que est´a teniendo un peso o bias de una neurona en el coste total si conocemos el error en esa neurona. Mediante 46 CAP´ ITULO 4. INTRODUCCI ´ ON A LAS REDES NEURONALES la ecuaci´on 4.17 podemos calcular el error de la neurona que necesitamos para aplicar la ecuaciones 4.19 y 4.20. Pero hay una cuesti´on sin resolver. Tal y como hemos definido el coste en la neurona vemos que se aplica la regla de la cadena y que la primera derivada parcial relaciona el coste total con la activaci´on, por lo tanto esta ecuaci´on solo ser´a v´alida para la ´ultima capa de la red. El coste total solo depende directamente de la activaci´on de las neuronas en la ´ultima capa pero depende indirectamente de todas las activaciones en las capas anteriores. Por lo tanto si podemos obtener el error en una neurona en funci´on del error de la neurona correspondiente de la siguiente capa tendremos todas las herramientas necesarias para realizar la propagaci´on hacia atr´as. De nuevo podemos hacer uso de la regla de la cadena. Introduzcamos otra capa l+ 1 a continuaci´on de la capa final l. Este cambio afectar´ıa a la forma de calcular el error en una neurona de la capa l. Veamos como deber´ıa ser reformulada la ecuaci´on 4.17 si se produjese este cambio. δl j=X i ∂C ∂zl+1 i ∂zl+1 i ∂zl j (4.21) El cambio de la capa adicional queda reflejado en la ecuaci´on 4.21. Como queremos ver c´omo afecta la entrada de una neurona al coste total, debemos tener en cuenta que la neurona de la capa lest´a conectada con todas las neuronas de la capa l+ 1.Por lo tanto el coste total depende de las entradas de todas las neuronas de la capa l+ 1 ya que todas ellas dependen de la entrada de la neurona en la capa l. Si ahora modificamos la ecuaci´on 4.18 para representar la entrada de la capa l+ 1 (es la misma ecuaci´on, solo se deben ajustar los ´ındices) y realizamos la derivada respecto de la entrada de la neurona jen la capa l,∂zl+1 i ∂zl j obtendremos la tasa de cambio de la neurona j si modificamos la entrada de la neurona i. Podemos hacer esta derivada porque la activaci´on depende de la entrada de esa capa como vimos en 4.3. Al modificar la ecuaci´on 4.18 para representar las entradas de la capa l+ 1 vemos que ahora la activaci´on que multiplicar´a a los pesos deber´a ser la de la capa l. De esta forma sustituyendo esta derivada, ∂zl+1 i ∂zl j , en la ecuaci´on 4.21 obtenemos: δl j=X i ∂C ∂zl+1 i wl+1 ji ∂al j ∂zl j (4.22) En esta ecuaci´on 4.22 podemos ver que la primera derivada parcial en realidad corresponde con lo que hemos llamado el error en la neurona. La ´unica diferencia es que la neurona se encuentra en la capa l+ 1. Por lo tanto se podr´ıa sustituir esta derivada por δl+1 i. 47 4.1. CONCEPTOS B ´ ASICOS DE APRENDIZAJE AUTOM ´ ATICO Si nos fijamos en la ecuaci´on 4.22, lo que nos indica en realidad es bastante intuitivo. El error en una neurona de la capa lviene determinado por la suma de errores de la capa l+ 1 multiplicados por los pesos que unen cada neurona de la capa l+ 1 con la neurona correspondiente de la capa l, de la misma forma que al realizar la propagaci´on hacia delante est´abamos multiplicando las activaciones de las neuronas por los pesos para moverlos a la siguiente capa.A su vez este valor es multiplicado por la derivada de la activaci´on de la capa lcon respecto de la entrada zde esa misma capa y mediante la regla de la cadena nos indica la forma en la que esta entrada modifica la activaci´on. Por lo tanto podemos ver un flujo muy natural, el coste total es relacionado con el error de la neurona de la capa l+ 1, este error es propagado hacia atr´as mediante los pesos que unen la capa con la anterior,la capa l, y este valor es relacionado con la entrada de la neurona de la capa l. Esta es la ecuaci´on que mejor expresa la noci´on de “propagaci´on hacia atr´as” de los errores que da el nombre al algoritmo. De este modo hemos obtenido todas las ecuaciones necesarias para modificar todos los pesos y bias de la red neuronal. Veamos como ser´ıa este proceso. Mediante la ecuaci´on 4.17 calculamos el error en la neurona para cada una de las neuronas de la capa final. Una vez obtenidos estos errores usaremos las ecuaciones 4.19 y 4.20 para calcular las derivadas del coste total respecto a los pesos y bias de la capa l. Estos valores ser´an sustituidos en la ecuaci´on 4.14 de forma que el peso ser´a actualizado a uno que reducir´a en una peque˜na cantidad el coste total. Lo mismo ocurrir´a con los bias. Una vez actualizados los valores usaremos la ecuaci´on 4.22 para calcular los errores de las neuronas de la pen´ultima capa. Para ello usaremos el error en las neuronas de la capa lque ahora pasar´a a llamarse capa l+ 1 y la pen´ultima capa es la que ahora consideraremos como capa l, la capa en la que nos estamos situando. Obtenidos los errores de la capa l, ahora la pen´ultima capa, podemos volver a calcular las derivadas de los pesos y bias mediante 4.19 y 4.20 y actualizar estos valores mediante 4.14. Repitiendo este bucle iremos actualizando los valores en cada capa hasta llegar a la primera. Cuando lleguemos a este punto todos los pesos y bias de la red habr´an sido ya actualizados y habremos terminado el proceso. Como vemos es un algoritmo simple que puede volverse complicado por la notaci´on al introducir distintas capas pero donde cada ecuaci´on es bastante intuitiva. 4.1.5. Overfitting y underfitting Una vez que se ha realizado el entrenamiento, aplicando descenso de gradiente y realizando propagaci´on hacia atr´as, y se ha conseguido una p´erdida que se considera aceptable sobre el conjunto de entrenamiento es el momento de comprobar como se comporta el modelo frente al conjunto de validaci´on. Este es el punto cr´ıtico donde se determina si funciona adecuadamente ya que de nada sirve obtener un coste muy bajo en el entrenamiento si cuando exponemos al modelo a nuevas entradas este no es capaz de clasificarlas correctamente. A esta capacidad de obtener buenos resultados sobre entradas que el modelo no ha “visto” 48 CAP´ ITULO 4. INTRODUCCI ´ ON A LAS REDES NEURONALES (no ha modificado sus pesos y bias para esta entrada en particular) se llama generalizaci´on. Ya se ha mencionado este concepto y en esta secci´on se profundizar´a en los motivos por los que es tan importante. El sobreaprendizaje (en ingl´es, overfitting) se produce cuando al entrenar el modelo sobre el conjunto de entrenamiento se modifican los pesos y bias de tal manera que permiten clasificar casi a la perfecci´on cualquier elemento de este conjunto pero a su vez obtiene resultados peores cuando una vez entrenado se enfrenta al conjunto de validaci´on. Imaginemos un ejemplo simple. Queremos crear un modelo que clasifique correctamente im´agenes que contienen un gato o un perro. Es posible que despu´es de entrenar un modelo as´ı y probarlo con im´agenes del conjunto de validaci´on obtengamos resultados donde un gato con ojos verdes sea incorrectamente clasificado. Esto puede resultar extra˜no ya que probablemente al ver la imagen un humano reconozca enseguida que se trata de un gato. Lo que ocurre en este caso es que se ha producido overfitting. El modelo se ha ajustado tanto a las im´agenes del conjunto de entrenamiento que una peque˜na variaci´on como el color de los ojos puede producir este error aunque la anatom´ıa del gato sea claramente reconocible. Figura 4.6: Ejemplos de underfitting (izda), ajuste correcto y overfitting (dcha). Fuente: [36] En el ejemplo presentado en la Figura 4.6 se est´a resolviendo un problema de regresi´on. En este tipo de problemas se desea predecir un valor num´erico dado un valor de entrada. El sobreajuste se representa en la figura de la derecha donde el modelo est´a usando un polinomio de orden quince. Las predicciones sobre los datos existentes ser´an correctas, como vemos el polinomio se ajusta a todos los puntos pero si se obtiene la predicci´on del modelo para un valor de xmuy bajo obtendremos un valor de ytambi´en muy bajo que no sigue la tendencia y no se ajusta a la funci´on real que siguen estos valores. En el caso del ajuste correcto, la imagen central de la Figura 4.6, hay puntos para los que el modelo no devuelve el resultado correcto, pero devuelve un valor lo suficientemente cercano. Este comportamiento es exactamente el que queremos emular. Los valores que predice el modelo siguen claramente la tendencia de los puntos y por tanto se ajustan a la funci´on real. Por ´ultimo podemos tener el caso contrario al overfitting, el underfitting. En este caso la red neuronal no se ha entrenado lo suficiente y por tanto el modelo no ha tenido las iteraciones necesarias para modificar los pesos y bias para hacer un buen ajuste. En el ejemplo de la Figura 4.6, en la imagen de la izquierda, vemos como el modelo est´a 49 4.1. CONCEPTOS B ´ ASICOS DE APRENDIZAJE AUTOM ´ ATICO usando una recta para predecir los resultados. En este caso el modelo es demasiado simple y no sigue la tendencia que marcan los puntos representados. En este caso podemos decir que se est´a generalizando en exceso. Como vemos la recta tiene cierta pendiente, no es un modelo totalmente il´ogico y probablemente sea la recta que mejores predicciones pueda dar pero para ajustarse realmente a la funci´on el modelo debe comportase como un polinomio de orden superior. Para detectar si se est´an produciendo estos efectos al entrenar el modelo debemos prestar atenci´on a la tasa de error sobre el conjunto de entrenamiento y sobre el conjunto de validaci´on. Se pueden dar varias situaciones: Si ambas m´etricas est´an bajando es que el modelo est´a aprendiendo y si paramos el entrenamiento en este punto podemos obtener un modelo que sufra de underfitting. Si la tasa de error en el conjunto de entrenamiento est´a bajando pero la tasa de error sobre el conjunto de validaci´on est´a subiendo es que se est´a produciendo overfitting, se est´an clasificando mejor las entradas con las que se realiza el aprendizaje pero la generalizaci´on ser´a peor. Si ambas m´etricas se mantienen o aumentan es que el modelo no est´a aprendiendo o directamente tiene un comportamiento peor que si no se hubiese entrenado. Esta situaci´on suele ser indicativo de un error en el modelo. 4.1.6. Regularizaci´on En la secci´on anterior se ha visto en qu´e consisten el overfitting y el underfitting y c´omo detectar estos problemas. La soluci´on al problema del overfitting es clara, se debe continuar el entrenamiento de la red. Pero la soluci´on al overfitting no es tan sencilla. Existen estrategias que nos permiten reducir el error que obtenemos en el conjunto de validaci´on pero con la intenci´on de no aumentar el error en el conjunto de entrenamiento (con la intenci´on debido a que no siempre es posible). A estas t´ecnicas se las denomina regularizaci´on y son la respuesta al problema del sobreaprendizaje. Estas t´ecnicas se dividen en distintas categor´ıas ya que existen distintas formas de atacar el problema. La categor´ıa m´as habitualmente usada es la regularizaci´on mediante modificaci´on de la funci´on de coste. Existen m´ultiples formas de modificar la funci´on de coste para reducir el overfitting pero casi todas siguen la misma estrategia general. En este secci´on continuaremos usando Cpara referirnos a la funci´on de coste. C0(x,w,y) = C(x,w,y) + λR(w) (4.23) Como vemos en la ecuaci´on 4.23 la funci´on de coste regularizada, C0, proviene del coste sin regularizar, C, al que se le aplica una penalizaci´on λR(w). 50 CAP´ ITULO 4. INTRODUCCI ´ ON A LAS REDES NEURONALES En esta penalizaci´on el valor λindica la importancia que le estamos dando a la penalizaci´on, de una forma muy similar a c´omo funciona la tasa de aprendizaje en la ecuaci´on 4.13. Por ´ultimo se aplica una funci´on a los pesos de la red. Esta es la funci´on que suele cambiar para las distintas variantes de este tipo de penalizaciones. A continuaci´on veremos algunas de ellas. Regularizaci´on L2: Tambi´en conocida bajo el nombre de regresi´on de arista o decaimiento de pesos. En este caso la ecuaci´on de penalizaci´on tiene la siguiente forma: R(w) = 1 2kwk2 2(4.24) El nombre, L2, proviene de que se est´a aplicando la norma L2 sobre el vector de pesos. Si recordamos esta norma nos permite obtener la longitud del vector en el espacio eucl´ıdeo. El prop´osito de la constante 1 2es eliminar la constante 2 que obtendremos al realizar la derivada de la norma que ser´a necesario al calcular el gradiente de la funci´on de coste. Pero, ¿c´omo puede ayudarnos esta penalizaci´on a reducir el overfitting? La respuesta est´a en que la ecuaci´on 4.23 se sustituye en la ecuaci´on mediante la que se actualizan los pesos, 4.13. Al realizar esta sustituci´on vemos que el signo negativo de la ecuaci´on 4.13 hace que la penalizaci´on tambi´en sea negativa. Con cada nueva actualizaci´on del peso su valor tender´a a 0 ya que solo se est´a restando. La ´unica forma de que un peso no termine siendo 0 es que funci´on de coste dependa mucho de este peso, que averiguaremos al realizar el gradiente de la funci´on de coste. De esta forma solo los pesos que realmente deben tener valores elevados los mantienen y el resto de pesos terminan teniendo valores bajos debido a la penalizaci´on y esto permite “reducir la complejidad” de la soluci´on que est´a dando nuestro modelo. Si volvemos a la figura aplicando regularizaci´on estar´ıamos forzando al modelo a obtener resultados similares a los obtenidos por un polinomio de orden bajo. Regularizaci´on L1: En este caso de nuevo el nombre de la t´ecnica nos indica c´omo se va a calcular la penalizaci´on. Usando la norma L1 obtenemos la siguiente ecuaci´on: R(w) = kwk1(4.25) En este caso el c´alculo de la penalizaci´on es incluso m´as sencillo. Lo que debemos tener en cuenta es que cuando se realiza el c´alculo del gradiente y se deriva la penalizaci´on respecto de cada peso obtendremos λsigno(wk) ya que la norma L1 es la suma de todos los pesos. Por lo tanto en cada iteraci´on el peso va a tener una penalizaci´on fija |λ|que se sumar´a o restar´a en funci´on del signo del peso. La raz´on por la que este tipo de regularizaci´on ayuda con el problema del overfitting es similar a la regularizaci´on L2, con la diferencia de que la regularizaci´on L1 produce una soluci´on m´as dispersa, es decir, un mayor n´umero de pesos terminan valiendo cero mientras que en la L2 los pesos tienden a reducirse pero mantienen valores peque˜nos distintos de cero. 51 4.1. CONCEPTOS B ´ ASICOS DE APRENDIZAJE AUTOM ´ ATICO Este comportamiento se produce debido a que como la penalizaci´on en la regularizaci´on L1 es un valor constante el nuevo peso tender´a a cero m´as despacio si es un valor grande y m´as r´apido si es un valor menor. En estas t´ecnicas los cambios que se realizan son sobre la funci´on de coste y por tanto afectan directamente a los c´alculos del modelo. Existe otra categor´ıa de t´ecnicas de regularizaci´on que reduce el overfitting modificando la estructura o el tiempo de aprendizaje. Estas son las principales: Dropout: Esta t´ecnica asigna a cada neurona de la red una probabilidad pde mantenerse activada. Habitualmente se selecciona p= 0,5 y se recorre la red donde cada neurona queda activada con esa probabilidad y queda desactivada con una probabilidad de 1 −p. Si realizamos el proceso con estos valores aproximadamente la mitad de neuronas quedar´an desactivadas. Cuando una neurona quede desactivada los pesos de entrada y salida tambi´en quedar´an anulados. Las ´unicas capas que no pueden ser modificadas son la de entrada y la de salida. Una vez modificada la estructura de la red se realiza propagaci´on hacia delante y hacia atr´as. Despu´es de haber realizado la iteraci´on se vuelven a activar todas las neuronas y se vuelven a desactivar la mitad. Las que se han desactivado en esta nueva iteraci´on no tiene por que ser las mismas que en la anterior, de hecho lo mas habitual es que no lo sean. Este bucle se repita hasta completar el entrenamiento. De esta forma el overfitting se reduce ya que en cada iteraci´on se est´an entrenando neuronas distintas y por tanto pesos distintos. Al no entrenarlos de forma continua resulta m´as complicado para el modelo adaptarse excesivamente bien al conjunto de entrenamiento y que se produzca sobreaprendizaje. Early stopping: Esta t´ecnica se basa en detener el entrenamiento antes de que haya terminado. Como se indic´o en la secci´on anterior el overfitting se puede detectar si el error sobre el conjunto de entrenamiento continua bajando pero el error sobre el conjunto de validaci´on empieza a aumentar despu´es de haber bajado. Si detenemos el aprendizaje justo en el momento en el que se detecta que el error sobre el conjunto de validaci´on est´a aumentando obtendremos la versi´on del modelo que mejor se comporta. Pero esto no siempre es tan sencillo, muchas veces los valores tendr´an cambios err´aticos y el error del conjunto de validaci´on subir´a para luego volver a bajar. Es dif´ıcil prever si los valores seguir´an la tendencia que detectamos. Solo podremos estar seguros de ello cuando veamos los valores del error en los distintos conjuntos una vez haya terminado el entrenamiento y sepamos como se habr´ıa comportado el error de validaci´on. Pero si esperamos a que termine el entrenamiento se pierde el sentido de usar esta t´ecnica. 52 CAP´ ITULO 4. INTRODUCCI ´ ON A LAS REDES NEURONALES 4.2. Redes neuronales convolucionales Las redes neuronales convolucionales son un tipo especial de redes neuronales que funcionan particularmente bien con distintos tipos de se˜nales. En el campo del procesamiento de la se˜nal se define a esta como una funci´on que expresa cierta informaci´on sobre un fen´omeno. Esta definici´on es bastante general pero se aclarar´a con un ejemplo. Para este proyecto nos centraremos en un ejemplo en particular, las im´agenes. Pero ¿que tienen que ver la im´agenes con las se˜nales? Bastante en realidad. Una imagen puede ser interpretada como una funci´on f(x, y) donde los valores de xeyrepresentan las coordenadas de cada p´ıxel y la funci´on devuelve la intensidad del p´ıxel en estas coordenadas. La mayor´ıa de im´agenes que vemos a diario no son monocrom´aticas, es decir, no est´an compuestas por solo un tono. Por tanto cada p´ıxel de estas im´agenes con m´ultiples colores no puede estar definido por solo una intensidad o brillo. Existen diferentes modelos de representaci´on para los colores que nos permiten representarlos de forma num´erica. El m´as habitualmente usado es el modelo RGB donde cada p´ıxel tiene asociados tres valores num´ericos. Cada uno indica la intensidad del pixel para uno de los colores primarios, rojo (Red), verde (Green) y azul (Blue). De esta forma podemos pensar en cada color primario como una matriz A∈Rm×ndonde el elemento Aij representa la intensidad del p´ıxel. Figura 4.7: Composici´on de una imagen RGB mediante los tres colores primarios. Fuente: [37] Esta descripci´on se asemeja bastante a la descripci´on de se˜nal que hemos dado al principio de la secci´on. Cada una de las matrices representa la se˜nal de cada color primario de la imagen. En la Figura 4.7 podemos ver que la imagen final se forma mediante la composici´on de las tres se˜nales, tambi´en llamadas canales. Una forma en la que se puede incorporar toda esta informaci´on en una entidad algebraica es mediante los tensores [38]. Un tensor es la generalizaci´on de los vectores y las matrices. Esta es una definici´on muy simplificada pero es suficiente para este contexto. 53 4.2. REDES NEURONALES CONVOLUCIONALES El tensor generaliza el concepto de matriz de forma que podemos a˜nadir una tercera dimensi´on (o m´as). De esta forma un tensor de dimensi´on 3 estar´a formado por m´ultiples matrices de la misma forma que una matriz est´a formada por m´ultiples vectores y un vector por m´ultiples elementos individuales. Figura 4.8: Ejemplos de tensores con distintas dimensiones. Fuente: [39] En la Figura 4.8 se puede observar c´omo cada elemento se obtiene al expandir en una dimensi´on el el elemento anterior. De esta forma ahora cada imagen pasar´a a ser representada por un tensor de dimensi´on 3 donde un elemento individual, la intensidad de un p´ıxel en un canal concreto, ser´a referenciado por Ai,j,k. De esta forma el canal viene determinado por el elemento kmientras que i, j determinan las coordenadas sobre esa matriz en particular. Puede parecer que introduciendo todos estos elementos se est´a complicando m´as de lo necesario el tratamiento de las im´agenes. Pero debemos recordar que cada imagen ser´a una entrada en la red neuronal y debemos disponer de una forma adecuada para introducir la informaci´on presente en la imagen y poder computar el resultado. Una vez vista la forma en la que se van a tratar la im´agenes en una red convolucional veamos los cambios que introducen este tipo de redes respecto del tipo de red que hemos visto a lo largo de este cap´ıtulo. El nombre obviamente deriva de la operaci´on de convoluci´on. En la siguiente secci´on la describiremos m´as en detalle pero de momento veamos como es la arquitectura de estas redes. Figura 4.9: Arquitectura de una red neuronal convolucional. Fuente: [40] En la Figura 4.9 vemos un ejemplo de una red convolucional. La entrada es el tensor de la imagen con sus respectivos canales. La matriz de cada canal es introducida como una entrada 54 CAP´ ITULO 4. INTRODUCCI ´ ON A LAS REDES NEURONALES separada en la red donde sobre cada matriz se realizar´an convoluciones mediante las que se extraen features de la imagen. A medida que se avanza en estos niveles y se van aplicando m´as convoluciones y otras operaciones como el pooling que describiremos mas adelante se obtienen caracter´ısticas de m´as alto nivel.¿Que significa esto? Podemos pensar en las caracter´ıstica de bajo nivel como los elementos mas b´asicos de detecci´on como bordes o esquinas de objetos y a medida que se avanza en la red se obtienen caracter´ısticas m´as abstractas a partir de las cuales se hace la decisi´on sobre la categor´ıa a la que pertenece la imagen. Algunos ejemplos interesantes de las caracter´ısticas que detecta una red convolucional pueden ser encontrados en “Visualizing and Understanding Convolutional Networks” [41]. Una vez obtenidas unas caracter´ısticas lo suficientemente abstractas se realiza la operaci´on de flattening. De esta se reduce en una dimensi´on la matriz que ha resultado de las convoluciones y se obtiene un vector con toda la informaci´on de la matriz. Este vector es el que servir´a de entrada a la segunda parte de la red convolucional que es una red con las capas conectadas al igual que en la Figura 4.3. 4.2.1. Convoluciones En la secci´on anterior se ha mencionado que las convoluciones son usadas para extraer features o caracter´ısticas de una imagen. Este es un proceso que en este contexto se puede entender mejor de forma visual aunque las explicaciones se apoyar´an en sus respectivas ecuaciones. Las features son el resultado de las convoluciones por tanto veamos primero como funciona la operaci´on de convoluci´on. s(t) = Z+∞ −∞ f(a)w(t−a)da (4.26) En la ecuaci´on 4.26 se puede observar la formula para una variable continua. Debido a que habitualmente se usa la versi´on para variables discretas en este contexto nos centraremos en esta ´ultima. Veamos mediante un ejemplo lo que indica la ecuaci´on 4.26. Imaginemos que la funci´on f(x) nos devuelve la distancia en metros desde la salida en el instante xde un coche de carreras. Este resultado se obtiene mediante un l´aser pero al comprobar las mediciones vemos que hay cierto ruido en ellas, otra se˜nal est´a interfiriendo con el l´aser. Para minimizar el efecto de esta segunda se˜nal se aplica una convoluci´on a las mediciones. Mediante la convoluci´on se dar´a mas peso a las mediciones recientes que a las anteriores. De esta forma si queremos obtener la posici´on del coche en el instante tmediante la convoluci´on,s(t), se obtiene la posici´on en el momento a, donde aindica el tiempo transcurrido desde que se ha tomado la medici´on hasta el momento tyw(t−a) indica el peso de la medici´on. Si nos encontramos en el momento t= 3 y una medici´on se ha efectuado en el instante t= 0 (el tiempo transcurrido desde que se hizo la medici´on es 3) obtendremos un peso bajo w(3 −3) = w(0) para esta. 55 5.1. DATASET tes sean los datos, m´as probable es que se ajusten mejor al escenario donde va a ser desplegado el modelo. Etiquetado: Aunque se consigan los datos necesarios si estos no tienen asociada la categor´ıa a la que pertenecen no se puede realizar el entrenamiento. Estos ´ultimos son solo algunos de los problemas que pueden ocurrir al crear un dataset. Por suerte, para este proyecto, el tutor acad´emico ha proporcionado un dataset que no presenta estos problemas. De esta forma se ha evitado tener que pasar por el proceso de recopilaci´on de im´agenes y etiquetado a mano que podr´ıa suponer un coste temporal muy alto. La categor´ıa de “piezas industriales” es muy amplia. Desde piezas simples como tuercas o pernos hasta piezas m´as complejas como intercambiadores de calor. En este caso las im´agenes del dataset corresponden a soldaduras. Detectar soldaduras incorrectas permite descubrir riesgos estructurales que pueden darse en otras piezas m´as complejas ya que supone el punto de uni´on entre dos o m´as materiales. Veamos ahora las caracter´ısticas de los datos proporcionados. Tipos de soldaduras: Los datos est´an divididos en dos grandes categor´ıas.Al crear el dataset las categor´ıas a las que pertenec´ıan las soldaduras son “Tipo 2” y “Tipo 3”. Estos nombres en al pr´actica no aportan informaci´on relevante y pueden ser sustituidos por otros identificadores. De esta manera las soldaduras de “Tipo 2” pasar´a a ser el Dataset 1 y las soldaduras de “Tipo 3” de Dataset 2. Divisi´on: Para cada tipo de soldadura hay una subdivisi´on en soldaduras correctas e incorrectas. De esta forma las im´agenes ya se encuentran divididas en dos carpetas para cada tipo de soldadura. Tama˜no de las im´agenes: Cada una de las im´agenes tiene un tama˜no de 80 p´ıxeles de altura y 480 p´ıxeles de anchura. Esta resoluci´on puede parecer baja para la tarea en la que ser´an usadas. En realidad para las tareas de aprendizaje autom´atico no son necesarias resoluciones muy altas, debe ser una resoluci´on adecuada para permitir al modelo obtener las caracter´ısticas necesarias que determinar´an la clasificaci´on. Existen tambi´en casos en los que, parad´ojicamente, incrementar la resoluci´on de la imagen puede incrementar el error de validaci´on [47]. Color en las im´agenes: Todas las im´agenes est´an representadas mediante una escala de grises, denominadas com´unmente “en blanco y negro”. De esta forma cada p´ıxel toma un valor de 0 a 255 que indica su brillo. Si es un valor cercano a 0 se obtiene un p´ıxel oscuro y si es un valor cercano a 255, un p´ıxel casi blanco. En la Figura 5.1 se pueden ver algunos ejemplos de soldaduras correctas e incorrectas de ambos tipos. Si nos fijamos en las im´agenes (han sido seleccionadas de forma aleatoria) podemos ver que las soldaduras incorrectas en ambos casos tienen una secci´on en el centro de la misma donde el grosor es menor. Este tipo de anomal´ıas son las que un humano percibe de forma instant´anea y en las siguientes secciones veremos c´omo de bien pueden detectarlos los modelos implementados. 62 CAP´ ITULO 5. CLASIFICACI ´ ON MEDIANTE DEEP LEARNING Figura 5.1: Muestras de im´agenes de soldaduras del Dataset 1 (izda) y el Dataset 2 (dcha) . Ya se ha indicado que las soldaduras se dividen en correctas e incorrectas pero muchas veces el dataset no tiene una distribuci´on uniforme de elementos, en este caso im´agenes, en las distintas categor´ıas (suponiendo un problema de clasificaci´on). Cuando esta distribuci´on no es uniforme nos encontramos ante lo que se denomina un dataset desequilibrado. Un dataset de este tipo puede resultar problem´atico. Si decidimos realizar el entrenamiento del modelo sobre este dataset, al existir m´as datos de una categor´ıa que de otra, el modelo adaptar´a los pesos de tal forma que se clasifiquen la mayor´ıa de elementos del conjunto de validaci´on como pertenecientes a este categor´ıa mayoritaria. Figura 5.2: N´umero de soldaduras correctas e incorrectas de cada tipo de soldadura. De esta forma el modelo en realidad no est´a clasificando correctamente las im´agenes debido a las caracter´ısticas o features que detecta sino que los pesos se ajustan para clasificar los datos del conjunto de validaci´on en la categor´ıa mayoritaria. De esta forma el modelo 63 5.1. DATASET obtiene un coste muy bajo ya que casi con total seguridad el dato va a pertenecer a esta categor´ıa y el modelo no nos aporta informaci´on ´util. Como vemos en la figura 5.2 ambos dataset tienen m´as im´agenes que muestran una soldadura err´onea que im´agenes de soldaduras correctas. Este es en realidad un problema muy com´un. Como se ha indicado antes al encontrarnos en una ´epoca en la el Big Data tiene tanta importancia es muy sencillo obtener una gran cantidad de datos pero lo que nos se asegura es c´omo van a estar estructurados. Hay muchos sectores donde por la naturaleza del proceso del que se est´a recopilando informaci´on estos van a producir un dataset desequilibrado como del que disponemos. Pongamos un ejemplo de una situaci´on en la que puede surgir un dataset de este tipo. Se est´a desarrollando un estudio en un banco sobre las transacciones de los clientes. El objetivo es detectar autom´aticamente cuando se va a producir una transacci´on err´onea. Para detectarlas se ha construido un dataset con miles de transacciones que pueden ser analizadas. Pero los errores en transacciones bancarias no suelen ocurrir muy a menudo. Si suponemos que una de cada diez operaciones fracasa (una tasa mucho mas alta de lo que suele ocurrir en la realidad) tendremos solo un 10 % de datos en una de las categor´ıas y un 90 % en la otra. Si suponemos una tasa de error m´as realista (una de cada mil operaciones) la situaci´on empeora todav´ıa m´as. Para lidiar con este problema se van a proponer varias t´ecnicas, los cuales ambos tienes ventajas y desventajas. 1. Reducir la categor´ıa predominante: Tambi´en denominada undersampling, es la m´as sencilla de las t´ecnicas ya que solo es necesario eliminar el n´umero suficiente de im´agenes hasta conseguir un dataset equilibrado. Para reducir la posibilidad de que se eliminen todas las im´agenes que tienen presente cierta caracter´ıstica este proceso se realizar´a de forma aleatoria. Esto no elimina por completo esa posibilidad pero la reduce. El principal problema con este enfoque es que el modelo pierde la posibilidad de ser entrenado sobre estas im´agenes reduciendo de esta forma la eficacia del mismo. 2. Aumentar la categor´ıa minoritaria: Para al creaci´on de nuevas im´agenes usaremos las t´ecnicas de data augmentation vistas en el cap´ıtulo anterior. De esta forma solo se aplicar´an transformaciones a las soldaduras correctas y podremos incrementar artificialmente el dataset. Esta t´ecnica tambi´en denominada oversampling permite obtener un dataset equilibrado pero puede incrementar la posibilidad de obtener overfitting. Existen algunas t´ecnicas como SMOTE (Synthetic Minority Oversampling Technique) [48] para la creaci´on artificial de datos en conjuntos donde hay desequilibrio entre las clases. Esta t´ecnica en concreto se aplica casi exclusivamente a datos tabulares y por tanto no puede ser usada en este problema. 3. Usar herramientas de control de resultados: Cuando se realice el entrenamiento se usar´an distintas m´etricas para determinar el rendimiento del modelo. Estas m´etricas 64 CAP´ ITULO 5. CLASIFICACI ´ ON MEDIANTE DEEP LEARNING ser´an explicadas con m´as detalle en la secci´on siguiente pero una de las m´as habitualmente usadas es la exactitud (en ingl´es, accuracy) que indica el porcentaje de im´agenes del conjunto de validaci´on que han sido clasificadas correctamente. Esta m´etrica puede ser un buen indicador del rendimiento del modelo cuando se este realizando el entrenamiento sobre un dataset equilibrado, pero ante un dataset como el que disponemos puede inducir a error en la interpretaci´on de los resultados. Como se ha mencionado si hay un gran desequilibrio entre las categor´ıas el modelo termina clasificando casi todos los elementos en el conjunto de validaci´on como pertenecientes a la clase predominante. Esto producir´a un alto valor de accuracy pero no es un resultado verdadero de la capacidad del modelo. Es un producto del dataset. Para controlar este problema usaremos m´etricas como Precision yF1 y herramientas como las matrices de confusi´on que nos permitir´an saber si el accuracy obtenido es producto del modelo o derivado del dataset. Una vez aplicadas estas t´ecnicas se obtienen dos datasets con la siguiente distribuci´on de im´agenes. Figura 5.3: N´umero de soldaduras correctas e incorrectas en cada conjunto para el Dataset 1. En la Figura 5.3 podemos ver esta distribuci´on para el Dataset 1. Para crear el conjunto de validaci´on habitualmente se usa la regla “30-70”. Esta regla indica que el 30 % de las im´agenes iniciales con las que se dispone deben ser usadas en el conjunto de validaci´on. El resto de im´agenes son las usadas en el conjunto de entrenamiento. Para este Dataset 1 se ha usado esta regla de modo que en el conjunto de validaci´on las im´agenes suponen el 30 % del dataset original. Tanto para las im´agenes correctas como para incorrectas. Las im´agenes correctas en el conjunto de entrenamiento han sufrido augmentations y por tanto se ha incrementado el n´umero de im´agenes en esa categor´ıa. Las incorrectas han sido reducidas para poder equipararse a las correctas. 65 5.1. DATASET Figura 5.4: N´umero de soldaduras correctas e incorrectas en cada conjunto para el Dataset 1. En la Figura 5.4 se dispone de la distribuci´on del Dataset 2. En este caso el dataset ha sido creado de la misma forma que en el caso anterior con la excepci´on de que se ha calculado el 30 % sobre las im´agenes correctas y se ha usado esa cantidad para obtener las im´agenes de ambas categor´ıas en el conjunto de validaci´on. 5.1.1. Augmentations Como vimos en el cap´ıtulo anterior existen muchas formas de modificar las im´agenes del conjunto de entrenamiento para aumentar su n´umero. En este caso debido a las im´agenes usadas no es posible aplicar muchos de los tipos de modificaciones que se han descrito previamente. En primer lugar como ya se ha indicado las im´agenes son representadas mediante una escala de grises (en ingl´es, greyscale). Por ello todas las transformaciones en las que se modifica de alguna manera los distinto canales de la imagen no pueden ser aplicados en este contexto debido a que en estas im´agenes se dispone solo de un canal y estas transformaciones usan los tres canales presentes en las im´agenes RGB de forma simult´anea. Las transformaciones basadas en rotaciones de las im´agenes tampoco pueden ser usadas debido a que puede perjudicar m´as al modelo de lo que ayude en el entrenamiento. Una soldadura girada un cierto n´umero de grados puede provenir de una soldadura correcta. Pero las im´agenes que ser´an evaluadas son sensibles a los giros, de modo que una soldadura etiquetada como correcta dada la vuelta se considerar´ıa incorrecta. Esto ocurre en muchos otros casos como por ejemplo el famoso dataset MNIST que contiene im´agenes de d´ıgitos escritos a mano. En este caso si aplicamos rotaciones de 180 grados a las im´agenes que contienen el n´umero 6, estaremos introduciendo en el conjunto de 66 CAP´ ITULO 5. CLASIFICACI ´ ON MEDIANTE DEEP LEARNING entrenamiento una imagen que representa un 9 pero tiene como etiqueta un 6. Estas im´agenes junto con las del d´ıgito 9 har´an que se modifiquen de forma err´onea los pesos del modelo. Existen otros casos en los que no existe este problema. Si se est´a entrenando un clasificador de gatos y perros, un gato sigue siendo un gato por mucho que se rote la imagen. 1. Ruido Gaussiano: El nombre proviene de la distribuci´on Gaussiana o m´as habitualmente llamada distribuci´on normal. De esta forma cada valor para cada pixel del filtro proviene de esta distribuci´on. Modificando la media µy la desviaci´on est´andar σse puede obtener un tono mas oscuro del ruido o la distorsi´on que produce en la imagen respectivamente. El efecto obtenido es similar al ruido “blanco” presente en las televisiones.El ruido gaussiano habitualmente usado debido a que es muy com´un de encontrar en situaciones reales y adem´as es un modelo matem´aticamente simple con el que trabajar. Figura 5.5: Ejemplo de ruido Gaussiano aplicado a un elemento del dataset.Imagen original (izda) e imagen transformada (dcha). 2. Cambio de tama˜no: Modificar el tama˜no de la imagen es una forma de reducir el procesamiento necesario por la m´aquina que realiza el c´omputo. Un dataset con im´agenes de alta resoluci´on implica un mayor n´umero de c´alculos para entrenar el modelo. Debido a que la tarjeta gr´afica usada para este proceso no es un modelo con grandes capacidades esta transformaci´on ayudar´a al tiempo de entrenamiento. Figura 5.6: Ejemplo de cambio de tama˜no aplicado a un elemento del dataset.Imagen original (izda) e imagen transformada (dcha). En la Figura 5.6 debemos fijarnos en la escala de las im´agenes. La imagen de la derecha tiene un tama˜no de 200 ×40 pixeles frente los 480 ×80 de la imagen original a la izquierda. 3. Correci´on Gamma: Esta modificaci´on de la imagen act´ua sobre la luminiscencia de la misma. La luminiscencia en im´agenes RGB es calculada en base a las intensidades de los tres canales y en im´agenes basadas en escalas de grises en base al ´unico canal. 67 5.2. TRANSFER LEARNING Mediante la f´ormula Vsalida =Vγ entrada se modifica cada p´ıxel para obtener la imagen resultante. Figura 5.7: Ejemplo de correcci´on gamma con valor γ= 0,2 aplicada a un elemento del dataset.Imagen original (izda) e imagen transformada (dcha). 5.2. Transfer Learning Una vez determinados los datos con los que se va a trabajar es el momento de realizar los primeros experimentos. Para estos se usar´a aprendizaje de transferencia donde se aplicar´an las t´ecnicas y conceptos adquiridos en el Cap´ıtulo 4. Para realizar estos experimentos y obtener resultados mediante los que se puede llegar a una conclusi´on l´ogica se debe seguir una metodolog´ıa. En primer lugar se har´a una descripci´on de las m´etricas usadas para la evaluaci´on de cada experimento. A continuaci´on se realizar´a un experimento base mediante el que determinaremos cuales son los resultados que se obtienen usando una configuraci´on tradicional en los problemas de clasificaci´on de im´agenes. Una vez se disponga de esta l´ınea base se realizar´an modificaciones sobre ciertos elementos como la arquitectura del modelo, el optimizador, las funciones de activaci´on, etc. En cada uno de estos experimentos nuevos que se realizan se realizar´a la modificaci´on exclusivamente de un elemento del clasificador, es decir, en los experimentos en los que se usan arquitecturas diferentes ´unicamente se modificar´a la arquitectura y el resto de par´ametros se mantendr´an. Usando esta metodolog´ıa podremos ver c´omo afecta cada cambio a los resultados y sabremos que es debido a la modificaci´on introducida. De no seguir este procedimiento y modificar varios par´ametros a la vez se podr´ıan obtener conclusiones err´oneas sobre la causa del cambio en los resultados. 5.2.1. Dise˜no de experimentos Una vez descrito el procedimiento a seguir podemos describir la m´etricas que se usar´an en cada experimento y los motivos por los que han sido seleccionadas. 1. Coste de entrenamiento: Este es el coste con el que se ha trabajado durante todo el Cap´ıtulo 4. Por ello su funcionamiento ya ha sido descrito y sabemos que nos da un 68 CAP´ ITULO 5. CLASIFICACI ´ ON MEDIANTE DEEP LEARNING valor num´erico mediante el que interpretar lo que est´a ocurriendo cuando se modifican los pesos y bias de la red neuronal. En estos experimentos se va a usar la entrop´ıa cruzada, ya mencionada en el Cap´ıtulo 4, como funci´on de coste en vez de el error cuadr´atico medio. C=−1 nX x [yln a+ (1 −y) ln(1 −a)] (5.1) En la Figura 5.1 yes el vector de valores que se desean obtener, nes el n´umero de elementos sobre los que se calcula la funci´on, xes el numero de elementos del vector de entrada y aes la salida que produce la red, el valor en el coste cuadr´atico medio se hab´ıa definido como ˆy. La raz´on por la que se usar´a esta funci´on de coste es porque actualmente supone el est´andar para las funciones de coste. El error cuadr´atico medio tiene una f´ormula donde el c´alculo es mas intuitivo y por tanto supone una mejor opci´on a la hora de realizar la explicaci´on. 2. Coste de validaci´on: Al igual que en el caso anterior se usar´a la entrop´ıa cruzada. Como su nombre indica mediante esta m´etrica se comprobar´a el coste al evaluar el modelo sobre el conjunto de validaci´on, lo que indicar´a c´omo se comportan los pesos y bias antes im´agenes que no han pasado por el modelo. 3. Accuracy: Como se indic´o en la secci´on anterior, indica el porcentaje de im´agenes que se clasifican correctamente. Es una m´etrica que permite ver de forma muy clara la eficacia del modelo pero por las razones que mencionamos anteriormente debe ir acompa˜nado de las dos siguiente m´etricas. 4. Precision: Debido a que se estar´a usando un dataset desequilibrado esta m´etrica servir´a para controlar si el valor que se est´a obteniendo en accuracy es producido por el clasificador y no es un valor artificialmente aumentado por este desequilibrio. Precision =V erdaderos P ositivos (V erdaderos P ositvos +Falsos P ositivos)(5.2) En la ecuaci´on 5.2 podemos ver la forma en la que se calcula esta m´etrica. De esta forma se determina la habilidad del clasificador de no clasificar un elemento de una categor´ıa como perteneciente a otra. El mejor valor es 1 y el peor es 0. 5. F1 Score: De una manera similar a Precision la m´etrica F1 combina la exhaustividad (en ingl´es,Recall) y Precision en un solo valor. El Recall definido en la ecuaci´on 5.3 indica la proporci´on de verdaderos positivos que se han identificado correctamente. Recall =V erdaderosPositivos V erdaderosPositivos +F alsosNegativos (5.3) F1=2·P recision ·Recall Precision +Recall (5.4) En la ecuaci´on 5.4 podemos observar la forma de calcular el valor F1. Al igual que en el caso de Precision el mejor valor es 1 y el peor 0. 69 5.2. TRANSFER LEARNING 6. Tiempo: Uno de los problemas m´as comunes que suelen aparecer al entrenar modelos mediante Deep Learning es que este aprendizaje puede tardar mucho tiempo. Es importante tener en cuenta que no solo se requiere un modelo que obtenga buenos resultados sino que este debe poder entrenarse en un tiempo aceptable. Es posible que usando descenso de gradiente estoc´astico y una tasa de aprendizaje lo suficientemente baja se obtenga un clasificador con un Accuracy muy alto pero de nada sirve si se debe estar entrenando muchos meses. Cabe destacar que muchos modelos muy profundos en efecto deben entrenarse en ocasiones durante meses pero estos son habitualmente modelos del estado del arte o modelos complejos entrenados en centros de procesamiento de datos. Acompa˜nando estas m´etricas se usar´an matrices de confusi´on. Estas matrices nos aportar´an una mejor visualizaci´on de los resultados obtenidos. Cada columna de esta matriz representa el n´umero de predicciones de cada clase del modelo mientras que las filas representan el n´umero de elementos reales en cada categor´ıa. Figura 5.8: Ejemplo de matriz de confusi´on normalizada. Fuente:[36] Como se puede ver en la Figura 5.8 en las posiciones (0,0) y (2,2)) de la matriz se ha conseguido una clasificaci´on perfecta ya que el 100 % de im´agenes clasificadas coinciden con la categor´ıa a la que realmente pertenecen. Por otro lado en la posici´on (1,1) vemos que se obtiene un 62 % de ´exito al clasificar la categor´ıa “versicolor”. Por otro lado lo que nos indica la casilla (1,2) es que un 38 % de los elementos que realmente pertenecen a la categor´ıa “versicolor” fueron clasificados como “virginica”. Esta informaci´on nos ayuda a entender mejor como se esta comportando el modelo en las distintas categor´ıas ya que como vemos aqu´ı hay solo una que realmente est´a resultando problem´atica. Por ´ultimo se debe destacar que matriz de confusi´on ideal es la que tiene los elementos de la diagonal en su valor m´aximo y el resto de casillas con el valor 0. 70 CAP´ ITULO 5. CLASIFICACI ´ ON MEDIANTE DEEP LEARNING 5.2.2. Experimento base Para el experimento principal como se ha indicado se usar´a una configuraci´on que se puede considerar “est´andar” en la clasificaci´on de im´agenes. La configuraci´on usada es la siguiente: Caracter´ıstica Selecci´on Arquitectura del modelo ResNet-34 Modelo entrenado de antemano Si Normalizaci´on Si Tasa de aprendizaje Determinada en ejecuci´on. Funci´on de activaci´on Rectified Linear Unit Funci´on de coste Determinada en ejecuci´on. Optimizador Entrop´ıa cruzada Cuadro 5.1: Resultado del entrenamiento sobre el Dataset 2 mediante Transfer Learning de una arquitectura ResNet-34 De este modo en cada uno de los experimentos a continuaci´on se realizar´a un solo cambio sobre esta configuraci´on. En primer lugar se ha elegido una arquitectura ResNet-34 ya que no es demasiado profunda, como su nombre indica est´a formada por 34 capas, y por lo tanto no se necesita un tiempo demasiado elevado para entrenarla. La normalizaci´on de los datos es una tarea importante a realizar sobre el conjunto de datos antes de poder entrenar el modelo. Cuando los datos est´an normalizados estos tienen una media de 0 y una desviaci´on est´andar de 1. Como indicamos antes, los valores de cada p´ıxel en una imagen estar´an en el intervalo [0,255] para im´agenes RGB o [0,1] para im´agenes basadas en escalas de grises. En fastai cuando se usa un modelo entrenado de antemano se puede realizar una normalizaci´on a cada batch en base a las estad´ısticas de estos modelos. De esta forma, al haber sido entrenados mediante datasets como ImageNet, se usan estos valores para realizar la normalizaci´on sobre los datos introducidos por el programador para realizar Transfer Learning. Epochs Coste Entren. Coste Valid. Accuracy Precision F1 Tiempo 0 0.366318 0.295735 0.905755 0.866667 0.613569 00:20 1 0.271967 0.125145 0.958993 0.797794 0.883910 00:20 2 0.148291 0.130217 0.963309 0.830709 0.892178 00:20 3 0.111168 0.042447 0.982014 0.980198 0.940618 00:20 4 0.063857 0.073505 0.984892 0.938053 0.952809 00:20 Cuadro 5.2: Resultado del entrenamiento sobre el Dataset 1 mediante Transfer Learning de una arquitectura ResNet-34 71 5.2. TRANSFER LEARNING Figura 5.16: Matriz de confusi´on para el Dataset 1 (izda.) y Dataset 2 (dcha) en la arquitectura Alexnet. En la figura 5.15 se puede ver el ligero incremento en el coste de validaci´on al entrenar el Dataset 2 aunque este decrece a continuaci´on y no resulta indicio suficiente de overfitting. En la Figura 5.16 se puede observar que en efecto el clasificador clasifica una cantidad elevada de im´agenes de forma incorrecta, sobre todo indicando que las im´agenes son correctas cuando en realidad no lo son. 5.2.3.2. Squeezenet Derivada de la aquitectura Alexnet, Squeezenet fue creada en 2016 con el prop´osito de obtener una red con menos par´ametros que entrenar, por tanto reduciendo el espacio que ocupa, pero manteniendo un rendimiento similar la de Alexnet. Para conseguir esto Squeezenet usa tres estrategias. Reduce los kernels de las convoluciones de 3 ×3a1×1, es decir, kernels que eval´uan cada p´ıxel de uno en uno para reducir de esta forma los par´ametros. Reduce el n´umero de entradas en las capas convolucionales y usa strides mayores a 1 para mover el kernel un mayor n´umero de unidades en la matriz.Estas t´ecnicas si se aplican sin cuidado reducir´an reducir´an dr´asticamente el rendimiento de la red. 78 CAP´ ITULO 5. CLASIFICACI ´ ON MEDIANTE DEEP LEARNING Epochs Coste Entren. Coste Valid. Accuracy Precision F1 Tiempo 0 0.292407 0.256671 0.874101 0.978261 0.339623 00:10 1 0.155679 0.157326 0.943885 0.768061 0.838174 00:10 2 0.099644 0.157917 0.943885 0.747368 0.845238 00:10 3 0.062119 0.058490 0.982734 0.957746 0.944444 00:10 4 0.049992 0.038943 0.990647 0.963964 0.970522 00:10 Cuadro 5.6: Resultado del entrenamiento sobre el Dataset 1 mediante Transfer Learning de una arquitectura SqueezeNet Epochs Coste Entren. Coste Valid. Accuracy Precision F1 Tiempo 0 0.234516 0.532940 0.759286 0.989218 0.685341 00:19 1 0.151767 0.385971 0.808571 0.988688 0.765324 00:19 2 0.105862 0.235683 0.865000 0.982987 0.846216 00:19 3 0.101148 0.117174 0.964286 0.962963 0.964337 00:19 Cuadro 5.7: Resultado del entrenamiento sobre el Dataset 2 mediante Transfer Learning de una arquitectura SqueezeNet Como se puede observar en la tabla 5.6 se ha conseguido un valor bastante alto de accuracy para el Dataset 1. Figura 5.17: Gr´aficas de coste frente a n´umero de batches evaluados para el Dataset 1 (izda.) y Dataset 2 (dcha) para la arquitectura SqueezeNet. 79 5.2. TRANSFER LEARNING Figura 5.18: Matriz de confusi´on para el Dataset 1 (izda.) y Dataset 2 (dcha) en la arquitectura SqueezeNet. 5.2.3.3. Densenet Epochs Coste Entren. Coste Valid. Accuracy Precision F1 Tiempo 0 0.148052 0.023313 0.991367 1.000000 0.971831 00:44 1 0.075187 0.037015 0.989928 0.939914 0.969027 00:42 2 0.020780 0.004736 0.997842 0.986486 0.993197 00:43 Cuadro 5.8: Resultado del entrenamiento sobre el Dataset 1 mediante Transfer Learning de una arquitectura Densenet Epochs Coste Entren. Coste Valid. Accuracy Precision F1 Tiempo 0 0.156233 0.100949 0.965000 0.985097 0.964260 01:20 1 0.038815 0.040692 0.987143 0.991354 0.987088 01:20 2 0.026688 0.024610 0.992143 0.988652 0.992171 01:20 Cuadro 5.9: Resultado del entrenamiento sobre el Dataset 2 mediante Transfer Learning de una arquitectura Densenet 80 CAP´ ITULO 5. CLASIFICACI ´ ON MEDIANTE DEEP LEARNING Figura 5.19: Gr´aficas de coste frente a n´umero de batches evaluados para el Dataset 1 (izda.) y Dataset 2 (dcha) para la arquitectura Densenet. Figura 5.20: Matriz de confusi´on para el Dataset 1 (izda.) y Dataset 2 (dcha) en la arquitectura Densenet. 81 5.2. TRANSFER LEARNING 5.2.4. Funciones de activaci´on Al inicio del Cap´ıtulo 4 se introdujeron varias funciones de activaci´on para las neuronas. Se vieron algunas ventajas y desventajas de cada funci´on y los problemas que llevaron a introducir nuevas funciones de activaci´on. En esta secci´on no se van a explorar todas las opciones posibles, al igual que en el caso anterior, debido a la gran cantidad de variantes que existen pero se usar´an las mas representativas. Como indicamos en el experimento base, la funci´on de activaci´on Rectified Linear Unit es la m´as habitual en los modelos de clasificaci´on de im´agenes. Algunas de las principales variantes son la Leaky ReLU y la tangente hiperb´olica como se indic´o en la tabla 4.1. 5.2.4.1. Leaky ReLU La Rectified Linear Unit modifica ligeramente la ReLU original. Para ello a˜nade una pendiente a la recta para los valores negativos. En este caso esta pendiente ser´a α= 0,3 al igual que en el ejemplo presentado en la tabla 4.1. Epochs Coste Entren. Coste Valid. Accuracy Precision F1 Tiempo 0 0.526406 0.286520 0.871942 0.691589 0.453988 00:19 1 0.413646 0.239462 0.911511 0.726415 0.714617 00:19 2 0.304298 0.198353 0.929496 0.776256 0.776256 00:20 3 0.349882 0.166995 0.933813 0.835979 0.774510 00:19 4 0.290800 0.142947 0.946043 0.875000 0.817518 00:19 5 0.207232 0.138282 0.951799 0.808943 0.855914 00:19 6 0.204663 0.119103 0.958273 0.877934 0.865741 00:19 7 0.190375 0.114922 0.961151 0.845188 0.882096 00:19 Cuadro 5.10: Resultado del entrenamiento sobre el Dataset 1 mediante Transfer Learning mediante la funci´on de activati´on Leaky ReLU Epochs Coste Entren. Coste Valid. Accuracy Precision F1 Tiempo 0 0.480763 0.476295 0.765000 0.892178 0.719523 00:35 1 0.430693 0.364718 0.835000 0.877617 0.825132 00:35 2 0.351411 0.309018 0.870000 0.832905 0.876861 00:36 3 0.369141 0.302007 0.870000 0.871060 0.869814 00:37 4 0.299343 0.308212 0.866429 0.907790 0.859293 00:36 5 0.302916 0.266288 0.887143 0.881690 0.887943 00:36 6 0.272487 0.258699 0.893571 0.884240 0.894848 00:36 7 0.304161 0.258005 0.881429 0.899701 0.878655 00:36 Cuadro 5.11: Resultado del entrenamiento sobre el Dataset 2 mediante Transfer Learning mediante la funci´on de activaci´on Leaky ReLU 82 CAP´ ITULO 5. CLASIFICACI ´ ON MEDIANTE DEEP LEARNING Figura 5.21: Gr´aficas de coste frente a n´umero de batches evaluados para el Dataset 1 (izda.) y Dataset 2 (dcha) para la funci´on de activaci´on Leaky ReLU. Figura 5.22: Matriz de confusi´on para el Dataset 1 (izda.) y Dataset 2 (dcha) para la funci´on de activaci´on Leaky ReLU. 83 5.2. TRANSFER LEARNING 5.2.5. Tangente Hiperb´olica La tangente hiperb´olica tiene un planteamiento similar a la funci´on sigmoidal pero con la modificaci´on de que el rango de la tangente hiperb´olica es Rango(tanh(x)) = (−1,1). Epochs Coste Entren. Coste Valid. Accuracy Precision F1 Tiempo 0 0.380454 0.336206 0.856115 0.524675 0.668874 00:19 1 0.334365 0.637376 0.702158 0.344992 0.511792 00:19 2 0.230722 0.128542 0.951079 0.810700 0.852814 00:19 3 0.217470 0.129883 0.939568 0.935484 0.775401 00:19 4 0.183844 0.088452 0.961870 0.915000 0.873508 00:19 Cuadro 5.12: Resultado del entrenamiento sobre el Dataset 1 mediante Transfer Learning mediante la funci´on de activati´on tangente hiperb´olica. Epochs Coste Entren. Coste Valid. Accuracy Precision F1 Tiempo 0 0.487487 0.733565 0.654286 0.925197 0.492662 00:34 1 0.400536 0.574124 0.754286 0.888646 0.702936 00:34 2 0.466444 0.538625 0.767143 0.930876 0.712522 00:34 3 0.414304 0.477895 0.789286 0.943107 0.745030 00:34 4 0.342137 0.390516 0.805714 0.889091 0.782400 00:34 5 0.296038 0.389545 0.815714 0.931641 0.787129 00:34 6 0.331221 0.406116 0.797857 0.937107 0.759558 00:49 7 0.302105 0.322748 0.845714 0.924561 0.829921 00:50 8 0.293008 0.660999 0.722143 0.972644 0.621963 00:50 9 0.307370 0.325813 0.855714 0.788194 0.870844 00:50 10 0.268099 0.362787 0.827857 0.965517 0.797988 00:50 11 0.249897 0.295717 0.860000 0.943662 0.845426 00:50 12 0.254041 0.268182 0.872143 0.934891 0.862202 00:50 Cuadro 5.13: Resultado del entrenamiento sobre el Dataset 2 mediante Transfer Learning mediante la funci´on de activati´on tangente hiperb´olica. Como se puede observar en la tabla 5.12 el Accuracy obtenido es aproximadamente equivalente al obtenido mediante la funci´on Leaky ReLU para el Dataset 1. Pero observando la tabla 5.13 se puede ver que fueron necesarias bastantes epochs m´as para conseguir el mismo resultado para el Dataset 2. Ninguno de estos resultados es excesivamente bueno y por tanto no hay raz´on aparente para sustituir la funci´on de activaci´on. 84 CAP´ ITULO 5. CLASIFICACI ´ ON MEDIANTE DEEP LEARNING Figura 5.23: Gr´aficas de coste frente a n´umero de batches evaluados para el Dataset 1 (izda.) y Dataset 2 (dcha) para la funci´on de activaci´on tangente hiperb´olica. Figura 5.24: Matriz de confusi´on para el Dataset 1 (izda.) y Dataset 2 (dcha) para la funci´on de activaci´on tangente hiperb´olica. 85 5.2. TRANSFER LEARNING 5.2.6. Optimizadores En el cap´ıtulo anterior se indic´o que el descenso de gradiente o su variante, el descenso de gradiente estoc´astico, no son las ´unicas funciones de optimizaci´on. Una de las principales variantes es el algoritmo Adam [12]. La principal diferencia con respecto del descenso de gradiente reside en la tasa de aprendizaje. Si recordamos la forma en la que se aplica el descenso de gradiente,ecuaci´on 4.14, se dispone de una tasa de aprendizaje ηque es aplicada en cada peso que se quiera actualizar y esta tasa no se modifica durante el entrenamiento.Estas son exactamente las caracter´ısticas que modifica Adam. Los pesos pasan a tener una tasa de aprendizaje propia que se adapta durante el entrenamiento.Las principales ventajas de Adam es que obtiene buenos resultados y los obtiene en un periodo de tiempo inferior a otros algoritmos. Por ello es el algoritmo m´as habitualmente usado frente a otras versiones de descenso de gradiente como AdaGrad o RMSProp. 5.2.7. Adam Epochs Coste Entren. Coste Valid. Accuracy Precision F1 Tiempo 0 0.269734 0.131270 0.961151 0.828685 0.885106 00:20 1 0.129166 0.087160 0.977698 0.931193 0.929062 00:20 2 0.150118 0.123427 0.976978 0.915556 0.927928 00:20 3 0.095234 0.084932 0.982734 0.941176 0.945455 00:20 4 0.111284 0.057855 0.982734 0.901235 0.948052 00:20 Cuadro 5.14: Resultado del entrenamiento sobre el Dataset 1 usando el optimizador Adam. Epochs Coste Entren. Coste Valid. Accuracy Precision F1 Tiempo 0 0.260515 0.300169 0.857857 0.921008 0.846332 00:38 1 0.184113 0.166343 0.937143 0.943478 0.936691 00:38 2 0.186013 0.188064 0.920000 0.985149 0.914242 00:39 3 0.075394 0.077928 0.970000 0.958217 0.970381 00:38 4 0.118693 0.056200 0.983571 0.976090 0.983700 00:40 5 0.133843 0.080815 0.980714 0.974612 0.980837 01:07 6 0.095562 0.066396 0.983571 0.968188 0.983837 01:07 7 0.030110 0.029938 0.991429 0.988636 0.991453 01:06 Cuadro 5.15: Resultado del entrenamiento sobre el Dataset 2 usando el optimizador Adam. En las tablas 5.14 y 5.15 se puede observar que el resultado final obtenido en Accuracy es bastante bueno en especial para el Dataset 2 donde se obtienen valores cercanos a 1 para las m´etricas Precision y F1. Al comprobar la matriz de confusi´on 5.26 para el Dataset 2 podemos ver que el modelo ha fallado en un total de 12 soldaduras de un total de 1400. 86 CAP´ ITULO 5. CLASIFICACI ´ ON MEDIANTE DEEP LEARNING Figura 5.25: Gr´aficas de coste frente a n´umero de batches evaluados para el Dataset 1 (izda.) y Dataset 2 (dcha) para el algoritmo de optimizaci´on Adam. Figura 5.26: Matriz de confusi´on para el Dataset 1 (izda.) y Dataset 2 (dcha) para para el algoritmo de optimizaci´on Adam. 5.2.8. Integraci´on con Pytorch Uno de los aspectos de fastai que se comentaron el Cap´ıtulo 3 es que al ser una librer´ıa basada en Pytorch es posible implementar el modelo en Pytorch y al mismo tiempo usar las funcionalidades de fastai como normalizaci´on, m´etricas, herramientas de visualizaci´on, etc. De esta forma cualquier modelo definido en Pytorch puede ser entrenado de forma muy sencilla mediante la clase Learner de la que hay un ejemplo en el Listing 3.1. Para ello se ha implementado en Pytorch un modelo muy sencillo pero con una gran relevancia hist´orica.La arquitectura LeNet fue creada 1989 por Yann LeCun y fue una de las primeras redes neuronales convolucionales. 87 5.3. ARQUITECTURA RESNET Figura 5.30: Gr´aficas de coste frente a n´umero de batches evaluados para el Dataset 1 (izda.) y Dataset 2 (dcha) usando la implementaci´on ResNet-34. Figura 5.31: Matriz de confusi´on para el Dataset 1 (izda.) y Dataset 2 (dcha) usando la implementaci´on de ResNet-34. 94 CAP´ ITULO 5. CLASIFICACI ´ ON MEDIANTE DEEP LEARNING Figura 5.32: Im´agenes transformadas mediante el primer nivel de la arquitectura ResNet-34. Figura 5.33: Im´agenes transformadas mediante el segundo nivel de la arquitectura ResNet-34 95 5.4. ARQUITECTURA XCEPTION 5.4. Arquitectura Xception Como ya se mencion´o el la ´ultima secci´on, existe una gran variedad de arquitecturas y no todas son entrenadas de antemano y pueden ser usadas para realizar Transfer Learning.En la secci´on anterior se ha implementado una arquitectura ya conocida y por tanto en esta secci´on se implementar´a una arquitectura relativamente reciente. La arquitecura Xception [56] fue dise˜nada en 2017 por Fran¸cois Chollet, creador de la librer´ıa de aprendizaje autom´atico Keras, y supone una modificaci´on de la arquitectura Inception. Las modificaciones intentan conseguir una disminuci´on de los par´ametros, con un objetivo similar a las arquitectura SqueezeNet, mediante las convoluciones separables en profundidad y los bloques Inception. Figura 5.34: Arquitectura Xception. Fuente: [56] En la Figura 5.34 se puede observar de izquierda a derecha las etapas por las que pasan los tensores de las im´agenes. Cada uno de los bloques en los que se usan las convoluciones separables en profundidad tiene una estructura residual, en algunos de estos bloques las conexiones residuales se forman usando convoluciones con kernels 1×1 y strides 2×2 que recordemos reducen el tama˜no del feature a la mitad. 5.4.1. Convoluciones separables en profundidad Hasta este momento se ha estado usando el modelo de convoluciones explicadas en el Capitulo 4 pero esta no es la ´unica forma de realizar esta operaci´on. La idea b´asica detr´as 96 CAP´ ITULO 5. CLASIFICACI ´ ON MEDIANTE DEEP LEARNING de las convoluciones separables es que un kernel puede ser separado en dos kernels de menor dimensi´on mediante la multiplicaci´on de matrices.   3 6 9 4 8 12 5 10 15  =  3 4 5 ×123(5.9) En la ecuaci´on 5.9 se puede observar como el kernel es descompuesto en dos kernels separados que son aplicados de forma independiente. De esta forma se ejecutan 6 multiplicaciones frente a las 9 que se requer´ıan antes para aplicar la convoluci´on. Esto funciona exclusivamente en los casos en los que el kernel puede ser separado de esta manera, ya que no siempre es as´ı. Las convoluciones separables en profundidad se separan en dos etapas. En la primera se realiza una convoluci´on en profundidad. Si recordamos cada imagen RGB est´a representada por un tensor de profundidad 3. De esta forma al realizar una convoluci´on sobre la imagen se aplica un kernel de profundidad 3, donde cada uno de los kernels de profundidad 1 es aplicado a un solo canal de la imagen. Figura 5.35: Convoluci´on en profundidad. Fuente: [57] En la Figura 5.35 vemos el procedimiento descrito en esta primera parte. Una vez se dispone de este tensor se aplican tantas convoluciones, n, como features se quiera obtener. El kernel en este caso es de tama˜no 1×1×3. En la Figura 5.36 se puede observar el procedimiento de esta segunda parte del proceso. Figura 5.36: Convoluci´on pointwise. Fuente: [57] Si usamos los tama˜nos proporcionados en las im´agenes y queremos obtener 256 features sobre una imagen RGB de tama˜no 12 ×12 se realizar´an 5 ×5×3×8×8 operaciones en la 97 5.4. ARQUITECTURA XCEPTION primera fase y 3 ×256 ×8×8 en la segunda sumando un total de 53,952 operaciones. Pese a que el tama˜no de la imagen es 12 en la primera fase supondremos que no hay padding y por tanto se realizan solo 8 movimientos. Si en cambio hubi´esemos aplicado la convoluci´on normal habr´ıamos necesitado 256 ×5×5×3×8×8 = 1,228,800 operaciones. 1class SeparableConvolution ( nn . Module ) : 2def i n i t ( s e l f , c an al es en tr ad a , c a n a l e s s a l i d a , t am k ernel = 3 , 3padding = 1 , bi as= False ) : 4super( SeparableConvolution , s e l f ) . i n i t ( ) 5s e l f . p r of = nn . Conv2d( c anal e s ent r ada , c anal es ent rada , 6k e r n e l s i z e=tam kernel , 7padding=padding , 8groups=can a les e n trad a , 9bias=bias) 10 11 s e l f . i nd iv = nn . Conv2d ( c an al es en tr ad a , c a n a l e s s a l i d a , 12 k e r n e l s i z e =1, 13 bias=bias) 14 15 def forward ( s e l f , x) : 16 s a l i d a = s e l f . p ro f (x ) 17 s a l i d a = s e l f . i ndi v ( s a l i d a ) 18 return salida Listing 5.3: Implementaci´on de la convoluci´on separable en profundidad. 5.4.2. Resultados Epochs Coste Entren. Coste Valid. Accuracy Precision F1 Tiempo 0 0.207981 0.278268 0.893004 0.929825 0.504762 02:21 1 0.293328 0.204756 0.922840 0.943182 0.688797 02:22 2 0.207463 0.276800 0.925926 0.795620 0.751724 02:22 3 0.126168 0.130882 0.961934 0.946154 0.869258 02:22 4 0.056194 0.082213 0.981481 0.919255 0.942675 02:23 5 0.027386 0.051235 0.990741 0.961538 0.970874 02:22 6 0.015694 0.001314 0.998971 0.993506 0.996743 02:22 7 0.001512 0.029305 0.993827 0.962264 0.980769 02:23 8 0.000049 0.004463 0.998971 0.993506 0.996743 02:23 9 0.000076 0.003380 0.997942 0.993464 0.993464 02:23 Cuadro 5.19: Resultado del entrenamiento sobre el Dataset 1 mediante una red Xception implementada y entrenada exclusivamente sobre el dataset. 98 CAP´ ITULO 5. CLASIFICACI ´ ON MEDIANTE DEEP LEARNING Epochs Coste Entren. Coste Valid. Accuracy Precision F1 Tiempo 0 0.404314 0.311186 0.832503 0.491018 0.233618 07:23 1 0.240169 0.292848 0.891345 0.841912 0.567534 07:22 2 0.167310 0.188567 0.926837 0.977707 0.723204 07:24 3 0.167255 0.153510 0.932752 0.907928 0.766739 07:24 4 0.054878 0.203926 0.882005 0.587054 0.735150 07:25 5 0.028047 0.188031 0.959838 0.809451 0.891688 07:25 6 0.032658 0.031891 0.991283 0.953488 0.974406 07:25 7 0.009228 0.011756 0.996264 0.981584 0.988868 07:25 8 0.001768 0.013319 0.995953 0.981550 0.987929 07:25 9 0.000897 0.014044 0.995641 0.976234 0.987061 07:26 Cuadro 5.20: Resultado del entrenamiento sobre el Dataset 2 mediante una red Xception implementada y entrenada exclusivamente sobre el dataset. Figura 5.37: Gr´aficas de coste frente a n´umero de batches evaluados para el Dataset 1 (izda.) y Dataset 2 (dcha) usando la implementaci´on Xception. Figura 5.39: Im´agenes transformadas mediante el Bloque 1. 99 5.5. AN ´ ALISIS COMPARATIVO Figura 5.38: Matriz de confusi´on para el Dataset 1 (izda.) y Dataset 2 (dcha) usando la implementaci´on de Xception. Figura 5.40: Im´agenes transformadas mediante bloques residuales con convoluciones separables. 5.5. An´alisis comparativo Por ´ultimo en esta secci´on se comparar´an los resultados obtenidos mediante los distintos m´etodos para comprobar cu´al ser´ıa la configuraci´on ´optima. En la tabla 5.21 se puede observar que para el Dataset 1 se han obtenido los mejores 100 CAP´ ITULO 5. CLASIFICACI ´ ON MEDIANTE DEEP LEARNING Experimento Coste Entren. Coste Valid. Accuracy Precision F1 TL-ResNet34 0.063857 0.073505 0.984892 0.938053 0.952809 TL-Alexnet 0.023718 0.066999 0.976259 0.915179 0.925508 TL-Squeezenet 0.049992 0.038943 0.990647 0.963964 0.970522 TL-Densenet 0.026688 0.024610 0.992143 0.988652 0.992171 FA-LeakyReLU 0.190375 0.114922 0.961151 0.845188 0.882096 FA-TanH 0.183844 0.088452 0.961870 0.915000 0.873508 OPT-Adam 0.111284 0.057855 0.982734 0.901235 0.948052 Resnet 0.018976 0.039797 0.986625 0.948718 0.957929 Xception 0.000076 0.003380 0.997942 0.993464 0.993464 Cuadro 5.21: Comparaci´on entre los resultados obtenidos en los distintos experimentos para el Dataset 1 donde TL(Transfer Learning), FA(Funciones de Activaci´on) y OP(Optimizador). valores mediante la arquitectura Xception entrenada por completo sobre el Dataset 1 sin realizar Transfer Learning aunque por un margen muy peque˜no ya que los modelos Squeezenet y sobre todo Densenet entrenados mediante Transfer Learning obtienen unos valores muy similares de Accuracy. Experimento Coste Entren. Coste Valid. Accuracy Precision F1 TL-ResNet34 0.191354 0.184898 0.927143 0.942308 0.925872 TL-Alexnet 0.103965 0.154422 0.943571 0.912351 0.945630 TL-Squeezenet 0.101148 0.117174 0.964286 0.962963 0.964337 TL-Densenet 0.026688 0.024610 0.992143 0.988652 0.992171 FA-LeakyReLU 0.304161 0.258005 0.881429 0.899701 0.878655 FA-TanH 0.254041 0.268182 0.872143 0.934891 0.862202 OPT-Adam 0.030110 0.029938 0.991429 0.988636 0.991453 Resnet 0.103361 0.119527 0.926837 0.765018 0.786558 Xception 0.000897 0.014044 0.995641 0.976234 0.987061 Cuadro 5.22: Comparaci´on entre los resultados obtenidos en los distintos experimentos para el Dataset 2 donde TL(Transfer Learning), FA(Funciones de Activaci´on) y OP(Optimizador). En la tabla 5.22 se puede observar que de nuevo la arquitectura Xception ha obtenido los mejores resultados en cuanto a Accuracy aunque en cuanto a Precision y F1 se han obtenido los mejores valores en la arquitectura Densenet, la cual tiene el segundo mejor valor en cuanto aAccuracy. Una vez vistos los resultados podemos se ha comprobado que para este dataset la mejor arquitectura en Xception. En cuanto a Transfer Learning frente a entrenar la red por completo no hay una decisi´on clara ya que mediante ambos m´etodos se pueden obtener resultados buenos.En este caso los resultados indican que es mejor entrenar el modelo por completo pero la diferencia con los mejores resultados de Transfer Learning es m´ınima. En cuanto a las funciones de activaci´on se ha visto como los resultados empeoran si 101 5.5. AN ´ ALISIS COMPARATIVO no se usa la funci´on de activaci´on ReLU y por tanto esta es la mejor opci´on.En cuanto al optimizador, hay ocasiones en las que hay grandes mejores con respecto al rendimiento y el tiempo necesario para entrenar el modelo. Por lo tanto es recomendable hacer uso de Adam en lugar de descenso de gradiente estoc´astico. 102 CAP´ ITULO 6. CONCLUSIONES Y LINEAS FUTURAS Cap´ıtulo 6 Conclusiones y lineas futuras Al comienzo de este Trabajo de Fin de Grado, en el Cap´ıtulo 1, se indicaron una serie de objetivos a cumplir a los largo de proyecto. A continuaci´on se comprobar´a si se ha cumplido cada uno de estos objetivos. 1. Aprendizaje te´orico de los conceptos b´asicos usados en Aprendizaje Autom´atico: Este TFG ha tenido un componente te´orico muy amplio. El Aprendizaje Autom´atico es uno de los componentes principales sobre los que se ha basado este proyecto y por tanto es de gran importancia. Casi todos lo elementos desarrollados en el Cap´ıtulo 5 usan en cierta medida estos conocimientos y por tanto el objetivo ha sido cumplido. 2. Aprendizaje te´orico de conceptos usados en Deep Learning: Al igual que en el caso anterior los conceptos sobre Deep Learning han supuesto el fundamento sobre el que construir los modelos convolucionales. De nuevo, este objetivo tambi´en ha sido cumplido. 3. Aprendizaje te´orico y pr´actico de la librer´ıa fast.ai: Una vez se dispuso de la base te´orica sobre la que construir estos modelos hac´ıa falta una librer´ıa mediante la que construirlos. Debido a que esta es usada en todos los modelos presentados se considera el objetivo como cumplido. 4. Puesta en pr´actica de los conocimientos adquiridos mediante un caso real: Por ´ultimo, una vez implementados los modelos y revisados los resultados se puede comprobar que los valores obtenidos son aceptables, superando el 99 % de ´exito de clasificaci´on de las im´agenes en algunos de los modelos. Pese a esto, es posible mejorar estos resultado debido a que en un proceso de control de calidad se debe procurar minimizar el n´umero de piezas defectuosas. Pese a que no se ha obtenido un 100 % de ´exito de clasificaci´on los resultados son lo suficientemente buenos como para considerar el objetivo como cumplido. 103 110 BIBLIOGRAF´ IA Bibliograf´ıa [1] Jeremy Howard et al. fastai. https://github.com/fastai/fastai, 2020. [2] Wikipedia. Python — wikipedia, la enciclopedia libre, 2021. [Internet; descargado 17mayo-2021]. [3] Wikipedia. Proyecto jupyter — wikipedia, la enciclopedia libre, 2021. [4] St´efan van der Walt, Johannes L. Sch¨onberger, Juan Nunez-Iglesias, Fran¸cois Boulogne, Joshua D. Warner, Neil Yager, Emmanuelle Gouillart, Tony Yu, and the scikit-image contributors. scikit-image: image processing in Python. PeerJ, 2:e453, 6 2014. [5] Frank Turley. Prince2. https://prince2.wiki/es/, n.d. [6] Wikipedia. M´etodo de an´alisis y dise˜no de sistemas estructurados — wikipedia, la enciclopedia libre. https://es.wikipedia.org/w/index.php?title=M%C3%A9todo_de_ an%C3%A1lisis_y_dise%C3%B1o_de_sistemas_estructurados&oldid=128308412, 2020. [7] Robert Hughes. The ‘step wise’ planning approach to software projects. 1996. [8] Marcos Sacrist´an Represa. Bolet´ın oficial de castilla y le´on. https://www.uva. es/export/sites/uva/2.docencia/2.01.grados/2.01.05.areaestudiantes/ _documentos/Normativa-trabajo-fin-de-grado.pdf, 2013. [9] Gu´ıa del alumno. https://www.inf.uva.es/wp-content/uploads/2013/01/ 00-GuiaAlumnoTFG_2017.pdf, 2012. [10] Wikipedia. Gu´ıa de los fundamentos para la direcci´on de proyectos — wikipedia, la enciclopedia libre. https://es.wikipedia.org/w/index.php?title=Gu%C3%ADa_de_ los_fundamentos_para_la_direcci%C3%B3n_de_proyectos&oldid=136233531, 2021. [11] James Vincent. An ai speed test shows clever coders can still beat tech giants like google and intel. https://www.theverge.com/2018/5/7/17316010/ fast-ai-speed-test-stanford-dawnbench-google-intel, May 2017. [12] Diederik P. Kingma and Jimmy Ba. Adam: A method for stochastic optimization, 2017. [13] Ning Qian. On the momentum term in gradient descent learning algorithms, 1999. 111 BIBLIOGRAF´ IA [14] Pan Zhou, Jiashi Feng, Chao Ma, Caiming Xiong, Steven HOI, and Weinan E. Towards theoretically understanding why sgd generalizes better than adam in deep learning, 2020. [15] J. Howard and S. Gugger. Deep Learning for Coders with Fastai and Pytorch: AI Applications Without a PhD. O’Reilly Media, Incorporated, 2020. [16] Sasank Chilamkurthy. Transfer learning for computer vision tutorial. https:// pytorch.org/tutorials/beginner/transfer_learning_tutorial.html, 2017. [17] Rina Dechter. Learning while searching in constraint-satisfaction-problems. pages 178– 185, 01 1986. [18] Thomas M Mitchell. Machine Learning. McGraw-Hill, 1997. [19] Ian Goodfellow, Yoshua Bengio, and Aaron Courville. Deep Learning. MIT Press, 2016. http://www.deeplearningbook.org. [20] Wikipedia. Maldici´on de la dimensi´on — wikipedia, la enciclopedia libre, 2021. [21] RE2 Robotics. AI fields. [22] Simon J.D Prince. Computer Vision. Cambridge University Press, 2012. [23] Stuart J Russell and Peter Norvig. Inteligencia Artificial: Un enfoque moderno. Pearson Prentice Hall, 2 edition, 2004. [24] Himanshu Singh and Yunis Ahmad Lone. Artificial Neural Networks, pages 157–198. Apress, Berkeley, CA, 2020. [25] IBM. What is artificial intelligence (ai)?, Jun 2020. [26] Bing Xu, Naiyan Wang, Tianqi Chen, and Mu Li. Empirical evaluation of rectified activations in convolutional network, 2015. [27] Yann Lecun, Leon Bottou, Genevieve Orr, and Klaus-Robert M¨uller. Efficient backprop. 08 2000. [28] Wikipedia. Divergencia de kullback-leibler — wikipedia, la enciclopedia libre, 2020. [29] Leslie N. Smith. Cyclical learning rates for training neural networks, 2017. [30] Mohit Deshpande. Complete guide to deep neural networks. https://pythonmachinelearning.pro/ complete-guide-to-deep-neural-networks-part-2/#Backpropagation, 2017. [31] SeHyoun Ahn. Speed test of using symbolic vs automatic differentiation. https:// sehyoun.com/EXAMPLE_test_symbolic.html, Apr 2017. [32] Wikipedia contributors. Chain rule — wikipedia, the free encyclopedia. https://en. wikipedia.org/wiki/Chain_rule, 2021. [33] Wikipedia. Grafo dirigido — wikipedia, la enciclopedia libre. https://es.wikipedia. org/w/index.php?title=Grafo_dirigido&oldid=136059346, 2021. 112 BIBLIOGRAF´ IA [34] Xavier Glorot and Yoshua Bengio. Understanding the difficulty of training deep feedforward neural networks. In Proceedings of the Thirteenth International Conference on Artificial Intelligence and Statistics, pages 249–256, 2010. [35] Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Delving deep into rectifiers: Surpassing human-level performance on imagenet classification, 2015. [36] F. Pedregosa, G. Varoquaux, A. Gramfort, V. Michel, B. Thirion, O. Grisel, M. Blondel, P. Prettenhofer, R. Weiss, V. Dubourg, J. Vanderplas, A. Passos, D. Cournapeau, M. Brucher, M. Perrot, and E. Duchesnay. Scikit-learn: Machine learning in Python. Journal of Machine Learning Research, 12:2825–2830, 2011. [37] Mathanraj Sharma. Composition of an RGB image. 2019. [38] Wikipedia. C´alculo tensorial — wikipedia, la enciclopedia libre. https://es. wikipedia.org/w/index.php?title=C%C3%A1lculo_tensorial&oldid=136258877, 2021. [39] Mable Wilderman. Tensor examples. 2020. [40] Sumit Saha. A Comprehensive Guide to Convolutional Neural Networks. 2018. [41] Matthew D Zeiler and Rob Fergus. Visualizing and understanding convolutional networks, 2013. [42] Vincent Dumoulin and Francesco Visin. A guide to convolution arithmetic for deep learning, 2018. [43] Computer Science Wiki. Max-pooling / pooling — computer science wiki,, 2018. [Online; accessed 11-July-2021]. [44] Jamil Ahmad, Khan Muhammad, and Sung Baik. Data augmentation-assisted deep learning of hand-drawn partially colored sketches for visual search. PLOS ONE, 12:e0183838, 08 2017. [45] Jia Deng, Wei Dong, Richard Socher, Li-Jia Li, Kai Li, and Li Fei-Fei. Imagenet: A large-scale hierarchical image database. In 2009 IEEE conference on computer vision and pattern recognition, pages 248–255. Ieee, 2009. [46] Andrea Mari, Thomas R. Bromley, Josh Izaac, Maria Schuld, and Nathan Killoran. Transfer learning in hybrid classical-quantum neural networks. Quantum, 4:340, Oct 2020. [47] Carl F. Sabottke and Bradley M. Spieler. The effect of image resolution on deep learning in radiography. Radiology: Artificial Intelligence, 2(1):e190015, 2020. [48] N. V. Chawla, K. W. Bowyer, L. O. Hall, and W. P. Kegelmeyer. Smote: Synthetic minority over-sampling technique. Journal of Artificial Intelligence Research, 16:321–357, Jun 2002. [49] Wikipedia contributors. Prewitt operator — Wikipedia, the free encyclopedia. https://en.wikipedia.org/w/index.php?title=Prewitt_operator&oldid= 1025793582, 2021. 113 BIBLIOGRAF´ IA [50] Wikipedia contributors. Sobel operator — Wikipedia, the free encyclopedia. https:// en.wikipedia.org/w/index.php?title=Sobel_operator&oldid=1031067706, 2021. [51] Wikipedia contributors. Discrete laplace operator — Wikipedia, the free encyclopedia. https://en.wikipedia.org/w/index.php?title=Discrete_Laplace_ operator&oldid=1019714497, 2021. [52] Bolei Zhou, Aditya Khosla, Agata Lapedriza, Aude Oliva, and Antonio Torralba. Learning deep features for discriminative localization, 2015. [53] Alex Krizhevsky, Ilya Sutskever, and Geoffrey E Hinton. Imagenet classification with deep convolutional neural networks. In F. Pereira, C. J. C. Burges, L. Bottou, and K. Q. Weinberger, editors, Advances in Neural Information Processing Systems, volume 25. Curran Associates, Inc., 2012. [54] Kaiming He, Xiangyu Zhang, Shaoqing Ren, and Jian Sun. Deep residual learning for image recognition, 2015. [55] Aston Zhang, Zachary C. Lipton, Mu Li, and Alexander J. Smola. Dive into deep learning. arXiv preprint arXiv:2106.11342, 2021. [56] Fran¸cois Chollet. Xception: Deep learning with depthwise separable convolutions, 2017. [57] Chi-Feng Wang. A basic introduction to separable convolutions, Aug 2018. 114