UNIVERSIDAD EUROPEA DE MADRID
ESCUELA DE ARQUITECTURA, INGENIERÍA Y DISEÑO
MÁSTER UNIVERSITARIO EN BIG DATA ANALYTICS - MBI
TRABAJO FIN DE MÁSTER
CLASIFICACIÓN DE LOGOTIPOS COMERCIALES CON REDES
CONVOLUCIONALES
NOMBRE:
JOSE LUIS FERNÁNDEZ MARTÍN
CURSO 2020-2021
2
3 TÍTULO: CLASIFICACIÓN DE LOGOTIPOS COMERCIALES CON REDES CONVOLUCIONALES
AUTOR: JOSÉ LUIS FERNÁNDEZ MARTÍN
TITULACIÓN: MÁSTER UNIVERSITARIO EN BIG DATA ANALYTICS - MBI
DIRECTOR DEL PROYECTO: LUIS FERNÁNDEZ ORTEGA
FECHA: Octubre de 2021
4
RESUMEN
Este trabajo trata acerca del reconocimiento y clasificación de imágenes (en concreto logotipos de marcas comerciales) a través del uso de las llamadas redes neuronales convolucionales, que son algoritmos que tienen como origen del planteamiento de su funcionamiento el mecanismo con el que funciona la parte del cerebro humano que se encarga del reconocimiento visual de objetos.
Para llegar al objetivo, se utilizan técnicas del denominado aprendizaje profundo y se evidencia el beneficio de la utilización de computación a través de los procesadores específicos para tratamiento de gráficos (GPU). La correcta configuración de un entorno de desarrollo propio que permita el aprovechamiento de estos recursos hardware, la investigación vinculada a los paquetes de software a utilizar en dicho desarrollo, el aprovechamiento del conocimiento generado en otras redes desarrolladas por grandes compañías como Google y la optimización de los parámetros de entrenamiento de la red, han sido los retos más importantes acometidos.
Pese a que se enmarca dentro del denominado “Reto IBM” planteado en el ámbito de estudio del Máster, los conocimientos adquiridos en el desarrollo del trabajo tienen aplicación directa en la resolución de problemas del ámbito laboral. En concreto y en mi caso personal como autor, en la utilización para reconocimiento de logotipos utilizado para la mejora de las campañas de marketing que lleva a cabo una compañía multinacional.
Palabras clave: Aprendizaje profundo, Redes neuronales convolucionales, Tensorflow, Keras, Clasificación de imágenes.
ABSTRACT
This work deals with the recognition and classification of images (specifically logos of commercial brands) through the use of the so-called convolutional neural networks, which are algorithms whose operational approach originates in the mechanism with which the part of the human brain responsible for the visual recognition of objects works.
In order to achieve the objective, deep learning techniques are used and the benefit of computing through graphics processing units (GPU) is demonstrated. The most important challenges have been: the correct configuration of a local development environment that allows the use of these hardware resources, the research linked to the software packages to be used in this development, the use of the knowledge generated in other networks developed by large companies such as Google and the optimisation of the training parameters of the network.
Although it is a part of the so-called "IBM Challenge" raised in the scope of study of the Master’s degree, the knowledge acquired in the development of the work has direct application in solving problems in the workplace. Specifically, and in my personal case as an author, in the use of logo recognition used to improve marketing campaigns carried out by a multinational company.
Keywords: Deep learning, Convolutional neural networks, Tensorflow, Keras, Images classification.
5 AGRADECIMIENTOS
Eternamente agradecido a mi madre y mi padre () por enseñarme los valores con los que afrontar cualquier reto que se me plantee en la vida.
A mi mujer e hijos, que me han apoyado en la difícil pero apasionante tarea que ha supuesto compaginar la rutina diaria con la dedicación necesaria para abordar el aprendizaje de un mundo fascinante como la analítica avanzada y el Big Data.
6
Índice
RESUMEN ... 4
ABSTRACT ... 4
1. INTRODUCCIÓN ... 12
1.1 Planteamiento del problema ... 12
1.1.1 Estado del Arte ... 12
1.2 Objetivos del trabajo ... 14
1.3 Estructura del trabajo... 15
2. MEMORIA TÉCNICA ... 16
2.1 Fundamentos téoricos ... 16
2.1.1 Tipos de aprendizaje ... 16
2.1.2 Regresión lineal ... 18
2.1.3 Regresión logístisca ... 20
2.1.4 Regresión SoftMax ... 22
2.1.5 Inteligencia artificial, Machine Learning y Deep Learning ... 23
2.1.6 Redes Neuronales artificiales ... 24
2.1.7 Modelo de neurona artificial ... 25
2.1.8 Funciones de activación ... 27
2.1.9 Modelo de una red neuronal multicapa ... 30
2.1.10 Entrenamiento: Algoritmo de retropropagación y descenso de gradiente ... 32
2.1.11 Overfitting y underfitting ... 38
2.1.12 Redes neuronales convolucionales ... 43
2.2 Implementación ... 52
2.2.1 Entorno hardware ... 52
2.2.2 Entorno software ... 53
2.2.3 Implementación del modelo ... 62
2.2.4 Resultados y conclusiones ... 101
BIBLIOGRAFÍA ... 102
7
Índice de Figuras
Figura 1: Evolución de arquitecturas de redes convolucionales ……… 12
Figura 2: Funcionamiento de aceleración por GPU ……….……… 13
Figura 3: Organización de tipos de algoritmos de aprendizaje ……… 16
Figura 4: Tipos de regresión ………. 17
Figura 5: Ejemplo de regresión lineal simple ………..……… 18
Figura 6: Ejemplo de regresión lineal múltiple ………..……… 19
Figura 7: Ejemplo de regresión lineal multivariante ………..… 19
Figura 8: Ejemplo de regresión lineal múltiple multivariante ……… 20
Figura 9: Función logística ……….……… 21
Figura 10: Hipótesis de regresión SoftMax ……….………..……… 22
Figura 11: Función de coste ……….……… 22
Figura 12: Algunas definiciones de inteligencia artificial ……….……… 23
Figura 13: Ámbito de actuación de la inteligencia artificial ……… 24
Figura 14: Partes de una neurona ……… 24
Figura 15: Estructura de una neurona McCulloch-Pitts ……… 25
Figura 16: Estructura de una neurona artificial ……… 26
Figura 17: Funciones de activación ………. 27
Figura 18: Función Sigmoide ……… 28
Figura 19: Función Softmax ………..……… 28
Figura 20: Función tanh ………..……… 29
Figura 21: Función ReLU ……….……… 29
Figura 22: Función ReLU y variantes ………..……… 30
Figura 23: Ejemplo esquema red neuronal feedforward .……… 30
Figura 24: Red neuronal simple ……..………..……… 31
Figura 25: Redes neuronales multicapa con una (izquierda) o varias (dcha) capas ocultas …… 31
8
Figura 26: Red neuronal competitiva ………..……… 31
Figura 27: Red neuronal recurrente ………..……… 32
Figura 28: Neurona con pesos y función de activación ……… 32
Figura 29: Descenso de gradiente. Origen ……..……… 33
Figura 30: Descenso de gradiente. Paso 1 ……..……… 34
Figura 31: Descenso de gradiente. Punto final .……… 34
Figura 32: Descenso de gradiente. Convergencia .……… 35
Figura 33: Descenso de gradiente. Pérdida ………..……… 35
Figura 34: Algoritmo de aprendizaje del descenso de gradiente ……… 36
Figura 35: Propagación hacia adelante ……… 37
Figura 36: Propagación hacia atrás ……….……… 37
Figura 37: Underfitting y Overfitting ……….……… 38
Figura 38: Underfitting vs Ajuste Correcto vs Overfitting ………..……… 39
Figura 39: Relación entre capacidad del modelo y la pérdida …..……… 40
Figura 40: Relación entre sesgo y varianza ………..……… 41
Figura 41: Contribución de sesgo y varianza al error total ………..……… 41
Figura 42: Cortex visual del cerebro humano ………..………..……… 42
Figura 43: Función de tiempo ….……….………..……… 43
Figura 44: Imagen bidimensional ………..………..……… 43
Figura 45: Etapas reconocimiento de imágenes ……….………..……… 43
Figura 46: Red neuronal fullyconnected ……….………….………..……… 43
Figura 47: Matriz de píxeles de entrada ………..……… 46
Figura 48: Campo receptivo local ……….………….………..……… 46
Figura 49: Campo receptivo local 1ª neurona …….………….………..……… 46
Figura 50: Campo receptivo local 2ª neurona …….………….………..……… 46
Figura 51: Ejemplo de mapas de características para una entrada …………..……… 47
Figura 52: Max-pooling ……….………..……… 48
Figura 53: Imagen entrada y kernel ……….………..……… 48
9
Figura 54: Primera operación de convolución ……….………..……… 49
Figura 55: Tercera operación de convolución ….……….………..……… 49
Figura 56: Convolución aplicando ReLU ………..………….………..……… 49
Figura 57: Arquitectura CNN ……….………..……… 51
Figura 58: Anaconda Navigator………….………..……… 53
Figura 59: Anaconda Prompt ……….………..……… 53
Figura 60: Anaconda environments ….………..……… 54
Figura 61: Anaconda. Búsqueda librería ……..……… 54
Figura 62: Anaconda librerías .………….………..……… 55
Figura 63: Anaconda dependencias ….………..……… 55
Figura 64: Anaconda tfa ……..……….………..……… 55
Figura 65: Arquitectura CUDA ………….………..……… 56
Figura 66: Instalación CUDA Toolkit ….………..……… 57
Figura 67: Versión CUDA …….……….………..……… 57
Figura 68: Descarga cuDNN ..……….………..……… 58
Figura 69: Versiones cuDNN ……….………..……… 58
Figura 70: PATH Windows para CUDA .………..……… 59
Figura 71: Variables de sistema Windows para CUDA ……….……… 59
Figura 72: Tensorflow CPU ……….………..……… 60
Figura 73: Versión de Python ……….………..……… 60
Figura 74: Verificación CUDA ……….………..……… 60
Figura 75: Upgrade Tensorflow ….…….………..……… 61
Figura 76: Tensorflow GPU …..………….………..……… 61
Figura 77: Instalación Tensorflow addons …..……… 61
Figura 78: Datos de entrada ….………….………..……… 62
Figura 79: Librerías ……….……….………..……… 63
Figura 80: Configuración de uso GPU …….…..……… 64
Figura 81: Dimensiones de imágenes de dataset. ………….……… 65
10
Figura 82: Carga de imágenes ………….………..……… 66
Figura 83: Formato de imágenes en dataset ..……… 67
Figura 84: Configuración de Rendimiento …..……… 68
Figura 85: Definición de modelo inicial con Keras ……… 69
Figura 86: Estructura de capas de modelo inicial con Keras ……… 70
Figura 87: Matríz de confusión ………….………..……… 72
Figura 88: Métricas de evaluación …….………..……… 73
Figura 89: Resultado entrenamiento con CPU ……… 74
Figura 90: Resultado entrenamiento con GPU ……… 75
Figura 91: Monitorización uso de GPU - CUDA ……… 75
Figura 92: Resultado ejecución 1 modelo …..……… 76
Figura 93: Early stopping ……….………..……… 77
Figura 94: Resultado ejecución 2 modelo …..……… 78
Figura 95: Capas del modelo inicial ….………..……… 78
Figura 96: Resultado ejecución 2 modelo. Classification_report ……… 79
Figura 97: Imágenes modificadas data augmentation ……… 80
Figura 98: Resultado ejecución 3 modelo. Data augmentation ……… 81
Figura 99: Capas del modelo con D.A. y Dropout ……… 82
Figura 100: Resultado ejecución 3 Modelo. D.A. y Dropout ……… 83
Figura 101: Resultado ejecución 3 modelo. Matriz de confusión ……… 84
Figura 102: Capas de Modelo con incremento de filtros. D.A. y Dropout ……… 85
Figura 103: Resultado ejecución 3 Modelo. Filtros, D.A. y Dropout ……… 85
Figura 104: Resultado ejecución 3 modelo. Modificaciones de batch size ……… 86
Figura 105: Learning rate – Step Decay .………..……… 87
Figura 106: Learning rate – Cyclical ……….……..……… 88
Figura 107: Learning rate – Cyclical WR ..………..……… 88
Figura 108: Modelo con Learning rate – Step Decay ….……..……… 89
Figura 109: Modelo con Learning rate – Step Decay ajustado …..……… 90
11
Figura 110: Modelos disponibles para Transfer learning ……….…..……… 92
Figura 111: LeNet ……….………..……… 93
Figura 112: AlexNet ………..………….………..……… 93
Figura 113: GoogleNet .………..……….………..……… 93
Figura 114: VGG16 ……….…..…….………..……… 94
Figura 115: ResNet ……….………..……… 94
Figura 116: DenseNet ………..………….………..………... 95
Figura 117: EfficientNet-B0 ….……….………..……… 95
Figura 118: Distribución datasets ……….………..………..… 96
Figura 119: Estructura VGG y VGG Transfer learning ……… 97
Figura 120: Resultado ejecución modelo 4. Transfer learning con Adam ………...…………..……… 97
Figura 121: Resultado ejecución modelo 4. Transfer learning con Adam y LR ……… 98
Figura 122: Resultado ejecución modelo 4. Transfer learning con Adam y LR ajustado …..….. 98
Figura 123: Resultado ejecución modelo 4. Transfer learning con LR Step Decay y SGD .…..… 99
Figura 124: Resultado ejecución modelo 4. Transfer learning con LR Cíclico y SGD ………. 100
12
1. INTRODUCCIÓN
1.1 Planteamiento del problema
El problema planteado en este trabajo es la utilización de redes convolucionales en el reconocimiento de imágenes y la demostración de forma empírica de cómo el uso de las capacidades de computación en paralelo de las GPU (unidades gráficas de procesamiento) es un importante beneficio respecto al, cada vez menos, tradicional uso de CPU. Se pretende dar una visión que ayude a comprender cómo funciona este tipo de procesamiento de información y, en concreto, profundizar en qué son y cómo funcionan cada uno de los componentes de una red convolucional, que es uno de los modelos computacionales más utilizados en este ámbito.
Estos aspectos no se pueden llegar a comprender bien sin haberlos puesto en contexto previamente, por ello se lleva a cabo una descripción de los diferentes tipos de aprendizaje, qué algoritmos se consideran en cada uno así como qué base matemática fundamenta los más enfocados al problema que se debe abordar.
Del mismo modo, y particularizando en los utilizados para el reconocimiento de imágenes, se explicará el origen “biológico” y fundamento de las redes neuronales artificiales.
1.1.1 Estado del Arte
El desarrollo de todas las técnicas vinculadas a la Inteligencia Artificial en los últimos años ha evolucionado enormemente, entre ellas, las relacionadas con la mejora de arquitecturas de las redes neuronales convolucionales (CNN) . Pero la concepción de las mismas tiene un amplio recorrido que podría decirse que surge en 1989, cuando Yann LeCun idea ConvNet [09], enfocándose en el objetivo de reconocimiento de letras manuscritas, que culmina en 1989 con LeNet, mejorando las técnicas de reconocimiento de objetos en general.
Figura 1. Evolución de arquitecturas de redes convolucionales. Fuente: [35]
13 A partir de entonces, pero sobre todo en la última década, han surgido numerosas arquitecturas que introducen modificaciones en los diseños de la red convolucional y en el tratamiento de los parámetros que impactan en el resultado de las mismas. Este avance fue debido en gran parte a la investigación de la universidad de Standford sobre un gran conjunto de datos de imágenes (Imagenet), que fue primordial para evolucionar en las técnicas de trabajo sobre datasets en las CNN, dando lugar a la red AlexNet como evolución de Lenet y sirviendo de base hasta la fecha para el resto de las principales arquitecturas de red conocidas.
Se abordará más adelante en este documento la explicación detallada de lo que es una red convolucional y cómo funciona, pero de lo que no cabe duda, es de que las aplicaciones de este tipo arquitecturas son múltiples y cada vez con más aporte a la sociedad, desde los numerosos ámbitos dentro del contexto de la medicina (clasificación de múltiples patologías y tipos de enfermedades), seguridad (identificación de personas a través del reconocimiento facial, de patrones en escritura manuscrita,etc. ), ayuda a los sistemas de conducción autónomos (con reconocimiento de imágenes o de órdenes de voz) hasta el mundo del ámbito empresarial en diferentes facetas, como la de marketing (detección de emociones en las caras de las personas, identificación de logotipos de marcas comerciales, etc.)
Parece evidente por tanto que un elemento fundamental para llevar a cabo el objetivo de cualquier arquitectura de este tipo es la capacidad de cómputo, dado el gran número de datos (en este caso imágenes) a procesar, y es en esta faceta en la que es necesario mencionar el avance que ha supuesto la utilización de las GPU.
Una unidad de procesamiento gráfico o GPU (Graphics Processing Unit) es un chip coprocesador dedicado al procesamiento de gráficos, de manera que aligera la carga de trabajo del procesador central (CPU) de un sistema informático. Las GPU podrían encontrarse integradas con las CPU en el mismo circuito, en una tarjeta gráfica dedicada o en la placa madre de un ordenador personal o un servidor.
Las GPU se caracterizan por el mejor rendimiento en la capacidad de tratamiento de información gráfica debido a su arquitectura de procesamiento en paralelo. Una sola CPU no tiene esta capacidad, pese a que los procesadores con múltiples núcleos pueden realizar cálculos en paralelo al combinar más de una CPU en el mismo chip. Las CPU tienen una velocidad de reloj más elevada, por lo tanto pueden realizar cálculos individuales más rápido que las GPU. Por ello, las CPU suelen estar mejor equipadas para manejar tareas básicas de computación.
Figura 2. Funcionamiento de aceleración por GPU. Fuente: [33]
14 La computación acelerada por GPU permite asignar al procesador gráfico los trabajos donde la computación es más intensiva, mientras que el resto del código se ejecuta en la CPU. Desde el punto de vista del usuario, las aplicaciones se ejecutan de forma mucho más rápida.
Pese a que el origen de la representación gráfica en los sistemas informáticos se remonta a comienzos de la década de los 80 del pasado siglo, la arquitectura de las GPU tal como la conocemos actualmente, se podría decir que comienza en 1999 con la aparición de la Geforce 256, desarrollada por la empresa NVIDIA. Desde entonces la evolución de la tecnología vinculada a este tipo de procesadores no ha dejado de crecer y ya es una realidad que no se trata simplemente de una tecnología de aceleración de gráficos, por lo que cada vez se considera más imprescindible su utilización en cualquier tarea que implique una gran labor de computación, como en nuestro caso es el trabajo con redes convolucionales.
Una demostración reciente de la aplicación de esta tecnología fue el hito alcanzado en 2017 por IBM y Stone Ride Technology en la aceleración de un programa de simulación de yacimientos de petróleo, gas y agua, en la se redujo la necesidad de utilización de procesadores de 700.000 (en un centro de computación que ocupaba un espacio equivalente a la mitad de un campo de fútbol) a solo 60, con arquitectura IBM Power, al incorporar en el proceso de cálculo 120 GPUs, obteniendo un rendimiento superior 10 veces al del sistema original.
Enlace a la noticia: https://newsroom.ibm.com/2017-04-25-IBM-NVIDIA-Stone-Ridge- Technology-Set-Record-in-High-Performance-Computing-in-Oil-Gas
1.2 Objetivos del trabajo
El objetivo fundamental del trabajo es disponer de un sistema que, dado un conjunto de imágenes correspondientes a logotipos de marcas comerciales que se le introduzcan como entrada al mismo, este sea capaz de clasificarlas con una eficacia razonable.
De manera más específica, se persigue en primer lugar adquirir el conocimiento necesario para ser capaz de configurar y utilizar un equipo local para abordar el desarrollo de algoritmos de tipo Deep learning, sin la dependencia de grandes sistemas de computación y aprovechando en este caso, la utilización de la potencia de la GPU del equipo local.
En segundo lugar, perseguimos aprender, dentro del amplio abanico de posibilidades de desarrollo que existen vinculadas a las redes neuronales, cómo configurar nuestra propia red, optimizando los diferentes parámetros que tienen impacto en su rendimiento y cómo utilizar o aprovechar el conocimiento que se adquiere con el uso de redes diseñadas por grandes empresas o grupos de desarrollo en el ámbito de la clasificación de imágenes.
Partiendo de una experiencia limitada al ámbito de la materia impartida en el temario del Máster en cuanto a conocimiento de implementación de redes convolucionales y de un nivel básico en relación a la configuración del entorno de trabajo para aprovechamiento de capacidades de una GPU, se ha conseguido implementar una red convolucional con una eficacia bastante aceptable (exactitud de aproximadamente un 87% en la clasificación de imágenes) pudiendo hacer uso además de las capacidades de computación de GPU de un equipo local, agilizando con ello la ejecución del proceso unas 20 veces; permitiendo de este modo, trasladar al ámbito laboral de un modo más asequible, el conocimiento adquirido durante el desarrollo de este trabajo.
15 1.3 Estructura del trabajo
Entendidos los objetivos que se persiguen con este trabajo y enmarcado el ámbito de desarrollo del mismo, el presente documento se estructura siguiendo el orden que se presenta a continuación:
➢ Planteamiento del problema y estado del arte
Se describe en qué consiste el trabajo y en qué ámbito tecnológico se ubica, describiendo brevemente los principales elementos o hitos de importancia del mismo.
➢ Objetivos del trabajo
Se explica qué se pretende conseguir con el desarrollo de este trabajo.
➢ Memoria Técnica
o Fundamentos teóricos
Se entra en el detalle del marco conceptual y teórico en el que se fundamenta el trabajo con redes convolucionales, explicando los conceptos más importantes a tener en cuenta de cara a un uso práctico o implementación de las mismas.
o Implementación
• Entorno hardware
Descripción del entorno de trabajo. Se ha optado por el “reto” de configurar un entorno en un equipo local, con la ambición de poder aplicar posteriormente el conocimiento en un entorno real de trabajo.
• Entorno software
Abarca la instalación de todo el software necesario para poder utilizar la capacidad de cómputo de la GPU como el utilizado para llevar a cabo la programación.
• Implementación del modelo
Explicación de la implementación del modelo de clasificación de imágenes, intercalando en el detalle del código argumentaciones respecto a las modificaciones en el mismo que fueron dando lugar a diferentes evoluciones hasta la obtención de la versión final.
• Resultados y conclusiones
Resumen del resultado obtenido y conclusión final.
16
2. MEMORIA TÉCNICA
2.1 Fundamentos téoricos
Tal y cómo se describió anteriormente, el objetivo fundamental del presente trabajo es utilizar un tipo especial de procesamiento y análisis computacional de información para poder realizar un reconocimiento de imágenes que tenga un grado elevado de fiabilidad.
2.1.1 Tipos de aprendizaje
Esta tarea se llevará a cabo a través de los llamados algoritmos de aprendizaje, los cuales se pueden clasificar, en base al objetivo del algoritmo, de acuerdo al siguiente esquema:
Figura 3. Organización de tipos de algoritmos de aprendizaje.
Los algoritmos de aprendizaje supervisado están orientados a predecir el valor de una variable objetivo, que dependerá del problema.
Los algoritmos de aprendizaje no supervisado persiguen organizar el conjunto de datos con el que trabajan en grupos, de manera que se pueda entender mejor dicho conjunto de datos.
Los algoritmos supervisados se pueden dividir a su vez en dos tipos en función de la variable que se vaya a predecir:
- Algoritmos de clasificación, utilizados cuando el tipo de la variable objetivo es categórica, ya sea nominal o escalar. Por ello, dado un conjunto de datos de entrada, como podría ser un grupo de imágenes clasificadas en distintos tipos de objeto, este tipo de algoritmos se utilizaría para predecir ante una nueva entrada de datos (p.ej. un nuevo conjunto de imágenes) a qué clase de objeto pertenece cada nueva imagen.
- Algoritmos de regresión, los cuales son capaces de predecir el valor de una variable objetivo cuando esta es de tipo numérico, ya sea real o continuo. El análisis de regresión suele fijar esa variable objetivo independiente y observar su comportamiento respecto a otra serie de variables (dependientes). Se puede usar p.ej. para predecir el precio de una vivienda en función de usa serie de factores, predecir el tiempo de permanencia de un cliente en una empresa, etc.
Algunos de estos algoritmos toman este nombre concreto, regresión, dado que este es un concepto estadístico de la aproximación numérica de una serie de puntos.
17 Por otro lado, en los algoritmos de aprendizaje no supervisado las clases no están predefinidas.
Estos se suelen dividir en dos grandes grupos.
- Agrupamiento de ejemplos: En los que se crean grupos de elementos (clusters) en función de la similitud o distancia entre ellos
- Agrupamientos de variables: En los que, pensando en la organización del conjunto de datos de entrada como una matriz o tabla con filas y columnas, se pretenden formar los grupos de variables a través de la búsqueda de similitud de características o relaciones estadísticas entre dichas filas o columnas.
Entraremos en algo más de detalle con respecto a los modelos de regresión, ya que como se verá más adelante, su entendimiento constituye una base importante en el desarrollo de los algoritmos con los que se pueden implementar las redes neuronales.
La regresión es una técnica que permite predecir un valor numérico basándonse en el conocimiento de otro diferente. El término regresión fue introducido por Francis Galton en su libro Natural inheritance (1889), partiendo de los análisis estadísticos del científico y matemático Karl Pearson.
Su trabajo se centró en la descripción de los rasgos físicos de los descendientes a partir de los de sus padres. Estudiando la altura de padres e hijos llegó a la conclusión de que los padres muy altos tenían una tendencia a tener hijos que heredaban parte de esta altura, pero los datos revelaban también una tendencia a regresar a la media.
Los tipos de regresión más comunes entre dos variables son las del tipo polinómico como la regresión lineal, cuadrática y cúbica.
La primera regresión genera una recta, las otras diferentes tipos de parábolas. Otros tipos de regresión que se pueden usar con dos variables son la logarítmica y la exponencial, la regresión logarítmica permite transformar una curva en una línea recta.
Cuando hay más de una variable independiente “x”, la regresión más utilizada es la regresión múltiple. A continuación se expresan matemáticamente los diferentes modelos comentados:
REGRESIÓN ECUACIÓN
Lineal 𝑦̂ = 𝛽0+ 𝛽1𝑋
Logarítmica 𝑦̂ = 𝛽0+ 𝛽1𝐿𝑛(𝑋) Exponencial 𝑦̂ = 𝛽0𝑒𝛽1𝑥
Cuadrática 𝑦̂ = 𝛽0+ 𝛽1𝑋 + 𝛽2𝑥2 Cúbica 𝑦̂ = 𝛽0+ 𝛽1𝑋 + 𝛽2𝑥2+ 𝛽3𝑥3 Lineal Múltiple 𝑦̂ = 𝛽𝑖 0+ 𝛽1𝑋𝑖1+ 𝛽2𝑋𝑖2+. . . + 𝛽𝑘𝑋𝑖𝑘
Figura 4. Tipos de regresión. Fuente:[12]
18 2.1.2 Regresión lineal
Una regresión lineal es un modelo que describe la relación entre una variable dependiente y (también conocida como la respuesta) como una función de una o varias variables independientes Xi (denominadas predictores). La ecuación general correspondiente a un modelo de regresión lineal es:
Y=β0+∑ βiXi+ϵi
donde β representa las estimaciones de parámetros lineales que se deben calcular y ϵ representa los términos de error.
Tipos de regresión lineal
Regresión lineal simple: modelos que utilizan un único predictor. La ecuación general es:
Y=β
0+β
iX+ϵ
iFigura 5. Ejemplo de regresión lineal simple. Fuente:[28]
Muestra cómo predecir el número de accidentes de tráfico mortales en un estado (variable de respuesta, Y) en
comparación con la población del estado (variable predictora, X)
Regresión lineal múltiple: modelos que utilizan múltiples predictores. Esta regresión tiene múltiples Xi para predecir la respuesta, Y. Este es un ejemplo de la ecuación:
Y=β
0+β
1X
1+β
2X
2+ϵ
19
Figura 6. Ejemplo de regresión lineal múltiple. Fuente:[28]
Predice las millas por galón (MPG) de diferentes coches (variable de respuesta, Y) en función del peso y la potencia (variables predictivas, Xj).
Regresión lineal multivariante: modelos para varias variables de respuesta. Esta regresión tiene múltiples Yi que derivan de los mismos datos Y. Se expresan con fórmulas diferentes. Este es un ejemplo del sistema con 2 ecuaciones:
Y
1=β
01+β
11X
1+ϵ
1Y
2=β
02+β
12X
1+ϵ
2Figura 7. Ejemplo de regresión lineal multivariante. Fuente:[28]
Muestra cómo predecir las estimaciones de gripe en 9 regiones de EE. UU.
(variables de respuesta, Yi), basadas en la semana del año (variable predictora, X).
20 Regresión lineal múltiple multivariante: modelos que utilizan varios predictores para múltiples variables de respuesta. Esta regresión tiene múltiples Xi para predecir varias respuestas Yi. Esta es una generalización de las ecuaciones
Figura 8. Ejemplo de regresión lineal múltiple multivariante. Fuente:[28]
Calcula las MPG en ciudad y autopista (como variables de respuesta, Y1 y Y2) a partir de tres variables: distancia entre ejes, peso en vacío y tipo de combustible (variables predictoras, X1, X2 y X3).
2.1.3 Regresión logístisca
Este tipo de análisis de regresión se utiliza para predecir el resultado de una variable categórica (una variable que puede adoptar un número limitado de categorías) en función de las variables independientes o predictoras.
Es útil para modelar la probabilidad de que un evento ocurra en función de otros factores. El análisis de regresión logística se enmarca en el conjunto de Modelos Lineales Generalizados (GLM) que usa como función de enlace la función logit. Las probabilidades que describen el posible resultado de un único ensayo se modelan como una función de variables explicativas, utilizando una función logística.
21 La regresión logística es usada extensamente en las ciencias médicas y sociales. Otros nombres para regresión logística usados en varias áreas de aplicación incluyen modelo logístico, modelo logit, y clasificador de máxima entropía.
La regresión logística unidimensional puede usarse para tratar de correlacionar la probabilidad de una variable cualitativa binaria (asumiremos que puede tomar los valores reales "0" y "1") con una variable escalar x.
La idea es que la regresión logística aproxime la probabilidad de obtener "0" (no ocurre cierto suceso) o "1" (ocurre el suceso) con el valor de la variable explicativa x.
En esas condiciones, la probabilidad aproximada del suceso se aproximará mediante una función logística del siguiente tipo:
que puede reducirse al cálculo de una regresión lineal para la función logit de la probabilidad:
o una regresión exponencial:
El gráfico de la función logística se muestra a continuación. La variable independiente es la combinación lineal y la variable dependiente es la probabilidad estimada .
Figura 9. Función logística.Fuente:[10]
22 2.1.4 Regresión SoftMax
La regresión Softmax (o regresión logística multinomial) es una generalización de la regresión logística cuando se quiere trabajar con múltiples clases o dimensiones .
En la regresión logística se asume que las etiquetas eran binarias: y( i )∈ { 0 , 1 }.
La regresión Softmax permite manejar y( i )∈ { 1 , … , K} donde K es el número de clases.
Lo que se pretende conseguir es que, dada una entrada de prueba X, se quiere que nuestra hipótesis estime la probabilidad 𝑃(𝒚=𝑘|𝒙)para cada valor de 𝑘 (𝑘=1,…,𝐾).
De esta forma, se obtiene como resultado un vector K-dimensional (cuyos elementos suman 1) dándonos las K probabilidades estimadas. Concretamente, la hipótesis ℎ𝜃(𝒙) toma la forma:
Figura 10. Hipótesis regresión SoftMax. Fuente:[42]
𝜽(1),𝜽(2), … ,𝜽(𝐾) ∈ ℜ𝑛 y son los parámetros del modelo.
El término normaliza la distribución de forma que la suma de sus términos sea 1.
Por conveniencia, se utiliza 𝜽 para denotar los parámetros de un modelo. Cuando se impementa la regression SoftMax, es conveniente representar 𝜽 como una matriz de n x K obtenida concatenando 𝜽(1),𝜽(2), … ,𝜽(𝐾) en columnas de esta forma:
La función de coste (se explicará más adelante en este documento su función) en este caso será:
Figura 11. Función de coste. Fuente:[42]
1{·} es el indicador de función, de forma que 1{expresión verdadera}=1 y 1{expresión falsa}=0 Por ejemplo: 1{3+3=6} será 1 mientras 1{2+2=4} será 0
Como no se puede resolver la obtención del mínimo coste analíticamente, se utiliza un algoritmo iterativo de optimización a través de derivadas para obtener el gradiente del coste:
23 2.1.5 Inteligencia artificial, Machine Learning y Deep Learning
El marco conceptual más amplio donde se engloba el conocimiento necesario para llevar a cabo un objetivo como el reconocimiento de imágenes es la inteligencia artificial.
Una descripción muy simple del concepto de inteligencia artificial (IA) podría ser la de intento de imitación de la inteligencia humana a través del uso de un software. Pero va mucho más allá y existen multitud de definiciones y ramificaciones de este término.
Dos de los científicos más reconocidos en este ámbito, Stuart Russell y Peter Norvig, diferenciaron cuatro tipos atendiendo a la referencia a dos tipos de procesos: el razonamiento y procesos mentales o la conducta.
“Las definiciones de la izquierda miden el éxito en términos de la fidelidad en la forma de actuar de los humanos y las de la derecha toman como referencia un concepto ideal de inteligencia que llamaremos racionalidad”.[38]
Figura 12. Algunas definiciones de inteligencia artificial. Fuente:[38]
Dentro de este amplio concepto de la IA ubicamos el denominado Aprendizaje automático o Machine Learning, que comprende una serie de técnicas o algoritmos de procesamiento de información que persiguen entre otros objetivos la mejora en la detección de patrones basándose en la experiencia (el objetivo es que los sistemas o máquinas “aprendan solos” sin necesidad de que se programen algoritmos explícitos).
Con esa detección de patrones mejorada, se podrán construir modelos de los que se pueda obtener conocimiento cada vez que se procesan nuevos datos. En esta metodología de trabajo se distinguen dos fases: una primera de aprendizaje, donde se construyen los modelos a partir de conjuntos de datos de entrenamiento y una segunda de inferencia, en la que se podrán obtener los resultados de dichos modelos para nuevos datos de entrada y confirmar la eficacia del estos.
Es en este momento donde entran en juego los tipos de aprendizaje descritos en el apartado 2.1.1
Pero dentro del ámbito del aprendizaje automático y como subcategoría que evoluciona una parte del mismo, ha surgido en los últimos años lo que se denomina el aprendizaje profundo o Deep Learning.
24 El Deep Learning utiliza lo que denominamos “redes neuronales artificiales” para mejorar tareas en las que ya comenzó a trabajar el Machine learning, como el reconocimiento de voz o de imágenes.
Estos algoritmos constituyen modelos que aprenden por sí mismos para poder descubrir relaciones entra las diferentes variables de entrada que procesan.
Figura 13. Ámbito de actuación de la inteligencia artificial.
Se explica a continuación el concepto y funcionamiento de las redes neuronales artificiales.
2.1.6 Redes Neuronales artificiales
El funcionamiento de las redes neuronales artificiales tiene su origen en sus homólogas naturales o biológicas.
El cerebro humano está compuesto de una gran cantidad de neuronas interconectadas entre sí, cuya estructura y funcionamiento básico se describe de forma ilustrativa en la siguiente figura:
Figura 14. Partes de una neurona. Fuente:[38]
25 Se trata por lo tanto de emular el funcionamiento de un sistema en el que se dispone de unos receptores de información (dendritas), unos nodos de cómputo o procesamiento de la información (soma / núcleo de la neurona) que entrarán en funcionamiento a través de lo que se llama una función de activación, una canal de comunicación de la salida de información generada/procesada (axón) y unos conectores (sinapsis) con más elementos del mismo tipo que forman una red de computación extremadamente eficiente. Este tipo de arquitectura funcional es la que se pretende construir con las redes neuronales artificiales.
2.1.7 Modelo de neurona artificial
El modelo de neurona artificial fue propuesto en su origen en 1943 por Warren McCulloch y Walter Pitts en su artículo "Un cálculo lógico de ideas inmanentes en la actividad nerviosa" [30].
En el mismo argumentaban que las neuronas que tenían una función de activación con un umbral binario, eran similares a la lógica de predicados de primer orden.
Aunque en el artículo no había ninguna representación gráfica del modelo de neurona artificial, se podría representar gráficamente de la siguiente manera:
Figura 15. Estructura de una neurona McCulloch-Pitts. Fuente:[49]
donde se apreciaría que la neurona tiene ciertas señales de entrada (X1..X4) y que las mismas pueden ser señales activadoras o inhibidoras, con valores binarios (0,1), de modo que si es una neurona inhibidora y recibe el valor 0, éste se ignora, y en caso contrario, si recibe el valor 1, la salida de la neurona sería cero.
La neurona tiene asociado un umbral (treshold) de activación 𝜽 y una señal de salida y El funcionamiento de la neurona sería el siguiente:
- Si alguna de las entradas es inhibidora, la salida será 0.
- Si no es así, la salida será la suma de las señales de entrada.
- El resultado de la suma se compararía con el umbral de activación, y si es superior al mismo, la salida de la neurona será 1, en caso contratrio la salida será 0.
Pero este tipo de implementación de neurona artificial tenía ciertas limitaciones, ya que solo contemplaba que las entradas y salidas fuesen binarias, solamente utilizaba una función de activación de escalón de umbral y no disponía de ponderación para las diferentes entradas.
En 1949, el psicólogo y neurocientífico Donald Hebb ayudó a cambiar la forma en la que se entendían las neuronas artificiales. En su libro La organización del comportamiento enunció lo que se conoce como la regla de Hebb: “Cuando un axón de la célula A está lo suficientemente cerca para excitar una célula B y participa repetida o persistentemente en su activación, se
26 produce algún proceso de crecimiento o cambio metabólico en una o ambas células, de modo que la eficiencia de A, como una de las células que disparan B, aumenta ". [8] Hebb proponía no solo que, cuando dos neuronas se activan juntas, se fortalece la conexión entre las neuronas, sino también que esta actividad es una de las operaciones fundamentales necesarias para el aprendizaje y la memoria.
Para la neurona artificial, esto significó que la neurona McCulloch-Pitts tuvo que ser alterada para al menos permitir esta nueva propuesta biológica. El método utilizado fue ponderar cada una de las entradas. Por tanto, a una entrada con un valor igual a 1 se le puede dar más o menos peso, en relación con la suma de umbral total.
El científico Frank Rosenblatt, utilizando la neurona McCulloch-Pitts y los hallazgos de Hebb, pasó a desarrollar el primer “perceptrón”. Este perceptrón, que podía aprender a través de la ponderación con “pesos” de las entradas (donde cada peso expresa la importancia de la respectiva entrada con la salida, que será binaria con valores 1 o 0 según si la suma de la multiplicación de pesos por entradas es mayor o menor a un determinado umbral), fue fundamental en la formación posterior de redes neuronales.
En la siguiente figura, basada en el concepto de perceptrón, se representa el modelo de neurona artificial, que será la base del estudio sobre las redes neuronales.
Figura 16. Estructura de una neurona artificial. Fuente:[7]
En esta figura se pueden identificar los siguientes elementos básicos:
- La sinapsis o conjunto de conectores antes mencionados, donde cada uno está caracterizado por un peso propio.
- La función de suma de las señales de entrada ponderadas por cada uno de sus pesos correspondientes, convirtiendo estas operaciones en una combinación lineal.
- La función de activación, que limita la amplitud de la salida de la neurona. Se denomina también función de aplastamiento (squashing function) porque limita el rango de la amplitud que se permite en la salida a algún valor finito.
- La salida que se obtiene de la neurona en base a la función de activación de la misma.
El rango de amplitud normalizada en la salida de una neurona suele identificarse con el intervalo unitario cerrado [0,1] o, de manera alternativa [-1,1]
- Un sesgo o bias como parámetro adicional a la neurona, que suele ser asumido como un peso adicional vinculado a una entrada fija con valor 1.
27 2.1.8 Funciones de activación
Como se avanzó anteriormente, las funciones de activación determinan las salidas que generarán las neuronas en función de las entradas. Se dividen en dos tipos: lineales y no lineales.
Las funciones lineales o de identidad hacen que la entrada sea igual a la salida, por lo que si tuviésemos una red neuronal de varias capas (no solo con una, tal como se ha descrito anteriormente) y aplicamos este tipo de función, la salida sería una regresión lineal. Se utilizaría cuando la red neuronal en la que se usa se requiere que dicha regresión lineal devuelva un valor único (ej.: predicción de un valor de nº de ventas)
Pero la función de activación tiene dos objetivos fundamentales:
- hacer que la neurona esté activa (valor próximo a +1) cuando se proporcionen las entradas “correctas”, e “inactiva” (cercana a 0) cuando tengamos entradas “erróneas”.
- que la activación sea no lineal.
Por lo general, la activación de una neurona artificial no reproduce sin más su entrada tal cual, sino que aplica algún tipo de transformación no lineal a dicha entrada. Es no lineal porque si se quisieran construir redes con múltiples capas, si las neuronas fueran siempre lineales, el resultado del cálculo llevado a cabo por la red seguiría siendo una función lineal de las entradas.
Es decir, cualquier red neuronal compuesta solamente por elementos lineales siempre se podría sustituir por una red formada por una única capa de neuronas lineales.
Como las neuronas lineales solo pueden representar funciones lineales, y dado que la gran mayoría de los problemas reales incorporan algún tipo de no linealidad, interesará que nuestras redes puedan representar esas no linealidades.
La función de activación utilizada por McCulloch y Pitts fue la función de paso de umbral. Sin embargo existen otras funciones de activación:
Figura 17. Funciones de activación. Fuente:[20]
28 Las más comúnmente utilizadas son: Sigmoide, ReLU, SoftMax y Tanh.
La función Sigmoide (también conocida como logística) tiene como valores de rango de salida el intervalo [0,1], por lo que dicha salida se puede interpretar como una probabilidad.
Con valores de entrada muy negativos la función valdrá cero, con valores cero, valdrá 0.5 y con valores de entrada mayores que cero tenderá a valer 1, con lo que, como se verá más adelante, este tipo de función se utilizaría en las capas finales de una red neuronal para clasificar los datos de entrada en dos categorías.
Figura 18. Función Sigmoide. Fuente:[6]
Desde un punto de vista más algorítmico, se puede introducir un parámetro (s) que controle la pendiente de la sigmoide:
Actualmente la sigmoide no es una función muy utilizada debido a que no está centrada y esto afecta en el aprendizaje y entrenamiento de la neurona por lo que influye con el problema de desaparición de gradiente (se explicará más adelante).
La función Softmax, descrita más en profundidad en el anterior apartado 2.1.4, se diferencia de la sigmoide en que la suma de las salidas en softmax es igual a 1. Se utiliza para clasificar las entradas de manera que si tenemos como entrada p.ej. una imagen de un tipo de marca, aplicando esta función nos dará la probabilidad de pertenencia a una marca en concreto dentro del conjunto de posibles marcas de clasificación. El resultado por tanto identificará la entrada con la que tenga mayor probabilidad, siendo la suma de probabilidades de las entradas 1.
Softmax por tanto se utiliza cuando tenemos múltiples clases y cuando se asignan probablilidades de pertenencia de las entradas a esas clases.
Figura 19. Función Softmax.
29 La función tanh, o tangente hiperbólica, tiene también una forma similar a la sigmoidal, siendo una versión bipolar de la misma con el mencionado parámetro s = 2
Figura 20. Función tanh. Fuente:[6]
Esta función tiene un rango de valores de salida entre -1 y 1. Aunque la función está centrada, tiene un problema similar a la sigmoide debido al problema de desaparición del gradiente, que aparece cuando en el entrenamiento se genera un error con el algoritmo de backpropagation (propagación hacia atrás, que se explicará más adelante) y debido a esto el error se va propagando entre las capas de la red, por lo que esta no consigue un buen aprendizaje.
La función ReLU (REctified Linear Units) o de Activación linear rectificada toma cero como valor umbral de activación, de manera que para entradas cuyo valor es menor o igual que cero devuelve 0.
Se podría definir así: f (z) = máximo (0, z)
Figura 21. Función ReLU. Fuente:[6]
Se ha demostrado que esta función de activación es extremadamente eficiente en comparación con las anteriores al implementarse estableciendo un umbral para las activaciones en cero, por lo que se ahorran operaciones más costosas como las exponenciales. Debido a su forma lineal, acelera la conversión del gradiente respecto a las funciones sigmoidea o tanh.
Pero también tiene desventajas, ya que si las entradas tienen valor menor que cero, las neuronas no se activan por lo que desaparece el gradiente en el pase hacia atrás y no hay aprendizaje.
Debido a esto ReLU tiene variantes (Leaky ReLU, Parametric ReLU- PReLU, Randomized Leaky ReLU) que previenen la “muerte” de esas neuronas cuando los valores de entrada son menores que cero (x<0).
30 Se transforman los valores de entrada introduciendo para los negativos un coeficiente rectificador. En el caso de Leaky ReLU-PReLU se ve el coeficiente α y para la Randomized Leaky ReLU se aprecia la zona en gris que comprendería el rango de valores aletorios que podría tomar dicho coeficiente durante el entrenamiento.
Figura 22. Función ReLU y variantes. Fuente:[52]
2.1.9 Modelo de una red neuronal multicapa
Basándonos en el modelo de neurona artificial explicado en el anterior apartado, podemos abordar a continuación el concepto de red neuronal.
Las redes neuronales son sistemas que intentan imitar el funcionamiento del cerebro humano a través del uso de neuronas artificiales. Estos sistemas organizan e interconectan las neuronas para que puedan trabajar entre ellas y producir una salida que de respuesta al problema que se pretende resolver a través de la red. Son capaces de aprender por sí mismas y pueden adaptarse a las modificaciones en los valores de entrada de dicha red.
Las redes neuronales, que a su vez organizan las neuronas que hay dentro de ellas en “capas”, se podrían englobar dentro de la siguiente clasificación:
- Redes Feed-Forward, donde las neuronas suelen ser independientes entre sí y trabajar en paralelo y en las que las distintas capas están conectadas entre ellas de manera que la salida de información de una capa i es la entrada de la capa i+1. Su nombre (feedfordward) les es dado por carecer de mecanismos de vuelta atrás o bucles (feedback), en contraposición al tipo de redes que sí lo poseen (recurrentes).
Si la red tiene varias capas, estas se organizan en dos tipos: visibles y ocultas. Las visibles serían la primera (capa de entrada) y la última (de salida) , accesibles desde el exterior de la red y las ocultas serían las intermedias, donde se realiza el procesamiento de la información.
Figura 23. Ejemplo esquema red neuronal feedforward. Fuente:[44]
31 Dentro de una red feed-forward, y según el número de capas ocultas que utilice, podemos tener los siguientes tipos:
Redes simples
Las neuronas de la capa de entrada se limitan a recibir las señales de entrada y distribuirlas a la capa de salida. Por ello, aunque veamos dos capas en la figura, se considera una única.
Los perceptrones son el modelo más conocido de redes neuronales unicapa.
Figura 24. Red neuronal simple. Fuente:[6]
Redes multicapa con una o varias capas oculta
Al tipo de red anterior se le añaden o varias capas ocultas intermedias formando así los MLP (MultiLayer Perceptron), donde el número de capas constituye lo que se denomina profundidad de la red.
Figura 25. Redes neuronales multicapa con una (izquierda) o varias (dcha)capas ocultas. Fuente:[6]
- Redes competitivas
Este tipo de redes las encontramos cuando tenemos conexiones inhibitorias entre las neuronas de una misma capa. Estas conexiones hacen que cuando una neurona se activa, pueda inhibir a las demás de la misma capa (en casos extremos podría solo una quedar activa)
Figura 26. Red neuronal competitiva. Fuente:[6]
32 - Redes recurrentes
Cuando añadimos conexiones inhibitorias entre las neuronas de una misma capa, hacemos que el funcionamiento de la red neuronal dependa del contexto. Si las conexiones de las neuronas de una misma capa se generalizan se obtienen redes neuronales con memoria, redes recurrentes (en contraposición a las feed-forward, sin memoria). La idea en estos modelos es tener neuronas que se activen durante un tiempo limitado, antes de volverse inactivas. Esa activación puede estimular otras neuronas, que pueden activarse un poco más tarde, también por una duración limitada. Esto hace que se activen aún más neuronas, y así, con el tiempo, obtendremos una cascada de neuronas que se activan. Los bucles no causan problemas en un modelo de este tipo, ya que la salida de una neurona solo afecta su entrada en algún momento posterior, no instantáneamente.
Figura 27. Red neuronal recurrente. Fuente:[6]
2.1.10 Entrenamiento: Algoritmo de retropropagación y descenso de gradiente
Una red neuronal tiene como objetivo aprender comportamientos que permitan destacar características de cada uno de los objetos que toma como entrada. Cada neurona de la red (salvo las de la capa de entrada) es en realidad un sumatorio de todas sus entradas, que son realmente las salidas de las capas anteriores multiplicadas por unos pesos. A esta suma le añadimos un componente adicional llamado sesgo (o bias) asociada a la variable x=1, mencionado anteriormente en la explicación del modelo de perceptrón.
La existencia de pérdidas en un modelo no es sinónimo de que éste sea incorrecto, ya que en caso de no tenerlas, es muy posible que esté sobreajustado (overfitting), es decir que el modelo sea incapaz de generalizar.
Todo este proceso se lleva a cabo aplicando, como se explicó anteriormente, una función no lineal (función de activación) y es lo que denominamos entrenamiento.
Figura 28. Neurona con pesos y función de activación. Fuente:[13]
33 El objetivo del entrenamiento es medir la pérdida para después ir realizando iteraciones hasta que el algoritmo descubra los valores de parámetros que hagan que modelo tenga una pérdida lo más baja posible. Una vez que esto suceda, se dice que el modelo ha convergido y podrá ser utilizado para realizar predicciones con nuevas muestras de datos.
Para poder reducir la pérdida es necesario modificar los parámetros (pesos) y volver a recalcular el modelo. Esta forma de calculo iterativa es conocida como algoritmo de retropropagación.
Uno de los métodos más efectivos para determinar los parámetros con los que se obtendría la menor pérdida o desviación en el resultado deseado, sería calcular ésta utilizando cada uno de los pesos posibles y luego determinando el punto en el que dicha pérdida es mínima. Como esto requiere gran cantidad de esfuerzo computacional se utiliza un algoritmo denominado de descenso de gradiente.
La metáfora que suele utilizarse para explicar este método es imaginar que estamos en medio de una montaña sin visibilidad y que el objetivo es alcanzar el punto más bajo de la misma. Si estamos ubicados en un punto aleatorio podremos ver que, según la dirección en que miremos, el terreno sube o baja (nuestro objetivo es bajar). De entre las opciones de bajada, escogeríamos la dirección en la que el descenso fuese más pronunciado con la idea de que nos lleve al punto de menor elevación de la forma más rápida posible. Así que avanzamos en dicha dirección y volvemos a plantearnos la situación: desde el nuevo punto en que estamos ubicados ¿en qué dirección el terreno baja más rápidamente? … Y repetimos el proceso hasta que lleguemos a un punto en el que no sea posible seguir bajando, es decir, cuando hayamos llegado a un mínimo.
Veamos este mismo proceso en un ejemplo de red neuronal con dos parámetros. Hemos escogido una pareja de valores a y b aleatorios (supongamos que son a = 15 e y = 20), calculamos el error en dicho punto y vemos la pendiente de la función de error a nuestro alrededor (se verá más adelante cómo se realiza este cálculo). Determinamos, por ejemplo, que hay una dirección que implica un sentido en el que el terreno sube con la mayor pendiente posible (flecha roja en la siguiente imagen) y el sentido opuesto en el que la pendiente es la menor posible (flecha verde):
Figura 29. Descenso de gradiente. Origen. Fuente:[23]
34 A continuación modificamos los valores iniciales a y b "en el sentido de la flecha verde". Esto puede significar que a pase de 15 a 16 (por ejemplo), y que b pase de 20 a 19. En el nuevo punto, volvemos a comprobar cuál es la pendiente a nuestro alrededor:
Figura 30. Descenso de gradiente. Paso 1. Fuente:[23]
Y se vuelve a repetir el proceso hasta encontrar un punto en que no sea posible modificar a y b disminuyendo el error:
Figura 31. Descenso de gradiente. Punto final. Fuente:[23]
Aproximándonos al cálculo de este descenso de una forma más algebraica para aplicarlo a las funciones que se utilizarán en la red neuronal, la primera derivada de una función indica la rapidez con que esta cambia, es decir su pendiente o cuánto crece. Se puede calcular esa pendiente para un punto específico, de forma que, estando en dicho punto, podemos saber para el mismo cuándo crece la función.
Si partiendo de un punto se busca el punto mínimo de la función, siguiendo la dirección contraria a la pendiente iremos bajando la misma pendiente hasta un punto mínimo global.
De manera formal, si comenzamos a bajar en un punto
x
0y nos movemos una distancia positivaα
en la dirección del gradiente negativo, entonces nuestro nuevo y mejoradox
1 será:x
1=x
0−α∇f(x
0)
de manera genérica:
x
n+1=x
n−α∇f(x
n)
35
Figura 32. Descenso de gradiente. Convergencia.
Después de la elección del punto inicial, se calcula el gradiente de la curva de pérdida en dicho punto y para poder escoger el siguiente punto, se multiplica la gradiente encontrada por un escalar llamado tasa de aprendizaje (Learning rate). Siguiendo con el ejemplo del descenso de la montaña, la tasa de aprendizaje sería la longitud del paso que se da cada vez que se cambia de posición. Si se dan pasos grandes, se podría llegar al punto de menor altitud y pasarlo de largo, lo que nos obligaría a escoger una dirección de vuelta hacia el punto objetivo y, de nuevo, podríamos saltarlo. Por el contrario, si se dan pasos muy pequeños es más complicado saltarse el punto mínimo buscado, pero se tardará mucho más en llegar a él; por ello en la práctica la tasa de aprendizaje suele ser un valor muy pequeño ( 0.01 o 0.001) de gran importancia puesto que controla la rapidez con la que el modelo se adapta al problema.
Figura 33. Descenso de gradiente. Pérdida. Fuente:[5]
La medida “clásica” del error que se produce en el conjunto de datos de entrenamiento, es la suma de los errores cuadrados, que usamos para una regresión lineal.
El error cuadrado para un único ejemplo de entrenamiento con entrada x y valor verdadero de la salida y es
donde hW(x) es la salida del perceptrón para el ejemplo e y es el valor real de la salida. Se usa el método del descenso del gradiente para reducir el error cuadrado calculando la derivada parcial de E con respecto a cada peso:
donde g’ es la derivada de la función de activación.
36 En el algoritmo del descenso del gradiente, para reducir E, se actualizan los pesos de la siguiente manera:
donde
α
es la tasa de aprendizaje.Si el error Err = y - hW(x) es positivo, la salida de la red es demasiado pequeña y por ello los pesos se incrementan para las entradas positivas y se decrementan para las entradas negativas.
Cuando el error es negativo, ocurre lo contrario.
El signo del error nos indica en qué sentido hay que modificar los pesos. Habitualmente, se recorre varias veces el conjunto de entrenamiento hasta que el algoritmo converja, la tasa de error baje por debajo de un umbral establecido previamente o no se aprecie una mejora significativa en la precisión del clasificador tras un recorrido completo. La versión más sencilla de este tipo de aprendizaje consistiría en recorrer el conjunto de datos de entrenamiento un número fijo de veces.
A cada recorrido del conjunto de datos durante el entrenamiento de una red neuronal se le suele denominar época (epoch).
Se explicaría de forma completa en la siguiente figura:
Figura 34. Algoritmo de aprendizaje del descenso de gradiente. Fuente:[38]
37 Existen varias versiones del algoritmo en función del número de muestras que se introduzcan en cada iteración:
- Descenso de gradiente en lotes (batch): Se introducen todos los datos de entrada una única vez. Esto provocará problemas de estancamiento ya que el gradiente se calculará usando todas las muestras y llegará un momento en que las variaciones entre estas sean mínimas.
- Descenso de gradiente estocástico: Se introduce una muestra aleatoria en cada iteración de forma que el gradiente se calcula para dicha muestra, introduciendo así el concepto de aleatoriedad y dificultando el estancamiento. Como inconveniente, este método suele resultar lento debido al mayor número de iteraciones necesarias para su ejecución.
- Descenso de gradiente estocástico en mini-lotes: Se introducen varias muestras aleatorias por cada iteración, manteniendo la ventaja de la aleatoriedad y paralelizando operaciones de forma que se acelere el entrenamiento.
El algoritmo basado en backpropagation y gradiente descendente consta, pues, de dos fases:
- Una fase de propagación hacia adelante (fordward pass), en la que se suministra a la red un patrón de entrada y se calcula la salida de la red para dicho patrón.
Figura 35. Propagación hacia adelante. Fuente:[44]
- Una fase de propagación hacia atrás (backpropagation o backward pass) en la que se evalúa la función de pérdida o error cometido por la red y se propaga dicho error hacia atrás, capa por capa, de forma que se puede calcular eficientemente el gradiente del error para las neuronas ocultas de la red ajustando los pesos (weight update pass).
Figura 36. Propagación hacia atrás. Fuente:[44]
38 Resumiendo los pasos del proceso de entrenamiento tendríamos:
1.- Se inicializan los parámetros (pesos y bias) con algunos valores, habitualmente valores aleatorios.
2.- Se pasan todas las muestras del conjunto de datos de entrenamiento por la red, obteniendo predicciones para cada una de ellas.
3.- Se obtiene, para cada una de las muestras, el gradiente parcial de la función de coste achacable a ella (será el conjunto de derivadas parciales con respecto a cada uno de los parámetros)
4.- Cuando se tienen todas las predicciones, se calcula el gradiente total de la función de coste, que será suma de los gradientes parciales.
5.- Modificamos cada parámetro de la red restando el producto de la derivada parcial de la función de coste que le corresponda y su tasa de aprendizaje.
De esta forma, la red está configurada de manera que el error global cometido es algo inferior al existente antes de comenzar este proceso.
2.1.11 Overfitting y underfitting
Las principales causas de obtener malos resultados en el aprendizaje automático y el modelado con redes neuronales artificiales son el overfitting o el underfitting de los datos. Cuando se entrena un modelo se intentan “encajar” (fit) los datos de entrada entre ellos y con respecto a la salida deseada. Overfitting se podría traducir como “sobreajuste” y underfitting como
“subajuste” y hacen referencia al fallo de un modelo al generalizar (encajar) el conocimiento que pretendemos que adquieran.
Este problema se entiende muy bien a través del siguiente ejemplo:
Figura 37. Underfitting y Overfitting. Fuente:[4]
39 Supongamos que vemos un perro de raza Pastor alemán por primera vez en nuestra vida y nos dicen “eso es un perro”. Luego nos enseñan un Caniche y nos preguntan: ¿eso es un perro?
Responderemos que “No”, puesto que no se parece en nada a lo que aprendimos anteriormente. Ahora imaginemos que nos muestran un libro con fotos muchas más razas de perros distintas. Después, cuando veamos una raza de perro que no conocíamos, seguramente seríamos capaces de reconocerlo al tiempo de poder discernir que otro animal, un gato (p.ej.) no es un perro, aunque sea peludo y tenga 4 patas.
Cuando se entrenan modelos computacionales con un conjunto de datos de entrada, se persigue que dichos modelos sean capaces de “generalizar” un concepto para que, cuando se disponga de un nuevo conjunto de datos de entrada a analizar, el modelo sea capaz de sintetizarlo, comprenderlo y devolver un resultado fiable.
Si disponemos de pocos datos de entrenamiento el algoritmo no será capaz de generalizar el conocimiento y se producirá el fenómeno de underfitting. Haciendo referencia al concepto de pérdida mencionado antes en este documento, el modelo no puede obtener una pérdida suficientemente baja con el conjunto de datos de entrenamiento, de modo que no aprende los patrones subyacentes en los datos del mismo.
Siguiendo el ejemplo con el reconocimiento de perros, si entrenamos nuestro modelo con 10 razas de perros solamente de color marrón y luego mostramos una fotografía de un perro de color blanco, el modelo no lo reconocerá como perro porque no cumpliría exactamente con las características que aprendió (el color obligatoriamente debería ser marrón). Aparece el problema del overfitting: el aprendizaje se ha ajustado tanto al patrón o características del modelo de datos de entrenamiento, que no es capaz de distinguir nuevos datos que no sigan ese patrón.
Figura 38. Underfitting vs Ajuste Correcto vs Overfitting. Fuente:[4]
Por lo tanto, el objetivo al entrenar un modelo de aprendizaje automático es:
1. Reducir la pérdida de entrenamiento tanto como sea posible.
2. Intentar garantizar que la brecha (gap) entre la pérdida que aparece con el conjunto de datos de entrenamiento y el de test sea razonablemente pequeña.