scieee AI-readable full text Open interactive document viewer

Redes Convolucionales

Bonilla Carrión, Carmelo

Abstract

El Aprendizaje Profundo (Deep Learning) está teniendo un gran desarrollo en la actualidad gracias a la evolución de los ordenadores y al uso de GPUs. Debido a este desarrollo, las redes de neuronas están apareciendo con más fuerza que nunca desde que surgieron por primera vez en los años 50. Dentro de estas redes de neuronas se encuentran las redes convolucionales, que serán el tema central de este Trabajo de Fin de Grado, las cuales se encargan de resolver problemas de clasificación, localización e identificación de objetos dentro de imágenes. Este trabajo comienza con un estudio general de las redes de neuronas artificiales así como de sus distintas arquitecturas. Seguidamente se estudiará con un mayor detalle las redes de neuronas convolucionales. En este aspecto, el trabajo se centra en conocer las características de este tipo de redes, su funcionamiento, sus distintas arquitecturas y cómo realizan la operación de convolución, que es lo que realmente caracteriza a estas redes. En la parte final del trabajo, se llevarán a cabo aplicaciones en lenguaje R para la clasificación de imágenes a partir de las redes de neuronas convolucionales, utilizando la librería Keras.

Full text

Doble Grado en Matemáticas y Estadística TRABAJO FIN DE GRADO REDES CONVOLUCIONALES Carmelo Bonilla Carrión Sevilla, Junio de 2020 Tutor: Rafael Pino Mejías Índice general Resumen....................................... iii Abstract....................................... iv ÍndicedeFiguras.................................. v ÍndicedeCuadros.................................. vii 1. Introducción 1 2. Redes de Neuronas 3 2.1. Redes de Neuronas Artificiales . . . . . . . . . . . . . . . . . . . . . . . . 4 2.2. Entrenamiento de una red neuronal . . . . . . . . . . . . . . . . . . . . . 10 2.2.1. Forward Propagation . . . . . . . . . . . . . . . . . . . . . . . . . 11 2.2.2. Backward Propagation . . . . . . . . . . . . . . . . . . . . . . . . 12 2.2.3. Actualización de los pesos . . . . . . . . . . . . . . . . . . . . . . 12 3. Redes de Neuronas Convolucionales (CNN) 15 3.1. Introducción.................................. 15 3.2. Visiónartificial ................................ 15 3.2.1. Convolución.............................. 16 3.2.1.1. Convolución entre volúmenes . . . . . . . . . . . . . . . 18 3.2.1.2. Aprendizaje de filtros de convolución . . . . . . . . . . . 19 3.3. Estructura y propiedades de las CNN . . . . . . . . . . . . . . . . . . . . 20 3.4. Componentes en la arquitectura de una CNN . . . . . . . . . . . . . . . 21 3.4.1. Capa convolucional (Convolutional layer).............. 21 3.4.2. Capa de agrupación (Pooling layer)................. 23 3.4.3. Capa de unidades lineales rectificadas ReLu (Rectified Linear Units Layer)................................. 25 3.4.4. Capa completamente conectada (Full connected layer) ...... 26 3.4.5. Capa de pérdida (Loss layer) .................... 26 3.5. Hiperparámetros ............................... 27 3.6. ArquitecturasdeCNN ............................ 28 3.7. Convoluciones 1×1.............................. 32 3.8. Regularización................................. 33 4. Aplicaciones de CNNs en R 35 4.1. LibreríaKeras................................. 35 4.1.1. Funciones ............................... 35 4.1.1.1. layer_conv_1d() . . . . . . . . . . . . . . . . . . . . . . 36 4.1.1.2. layer_conv_2d() . . . . . . . . . . . . . . . . . . . . . . 36 4.1.1.3. layer_embedding() . . . . . . . . . . . . . . . . . . . . . 36 i 4.1.1.4. layer_activation() . . . . . . . . . . . . . . . . . . . . . 37 4.1.1.5. layer_dropout() . . . . . . . . . . . . . . . . . . . . . . 37 4.1.1.6. layer_golbal_max_pooling_1d() . . . . . . . . . . . . . 37 4.1.1.7. layer_max_pooling_2d() . . . . . . . . . . . . . . . . . 37 4.1.1.8. layer_dense() . . . . . . . . . . . . . . . . . . . . . . . . 37 4.1.1.9. layer_flatten() . . . . . . . . . . . . . . . . . . . . . . . 38 4.2. EjemploprácticoI .............................. 38 4.3. EjemploprácticoII.............................. 41 Bibliografía 47 ii Resumen El Aprendizaje Profundo (Deep Learning) está teniendo un gran desarrollo en la actualidad gracias a la evolución de los ordenadores y al uso de GPUs. Debido a este desarrollo, las redes de neuronas están apareciendo con más fuerza que nunca desde que surgieron por primera vez en los años 50. Dentro de estas redes de neuronas se encuentran las redes convolucionales, que serán el tema central de este Trabajo de Fin de Grado, las cuales se encargan de resolver problemas de clasificación, localización e identificación de objetos dentro de imágenes. Este trabajo comienza con un estudio general de las redes de neuronas artificiales así como de sus distintas arquitecturas. Seguidamente se estudiará con un mayor detalle las redes de neuronas convolucionales. En este aspecto, el trabajo se centra en conocer las características de este tipo de redes, su funcionamiento, sus distintas arquitecturas y cómo realizan la operación de convolución, que es lo que realmente caracteriza a estas redes. En la parte final del trabajo, se llevarán a cabo aplicaciones en lenguaje R para la clasificación de imágenes a partir de las redes de neuronas convolucionales, utilizando la librería Keras. iii Abstract Currently, Deep Learning is witnessing a great development thanks to the evolution of computers and the use of GPUs. As a consequence, neural networks are gathering more stream than ever, since their first appearance during the 1950s. Among these, convolutional networks can be found, which will constitute the focus of this dissertation. Convolutional networks are in charge of solving classification, localisation and identification issues of objects within images. This dissertation starts with a general review of artificial neural networks and their architectures, followed by a more detailed study of convolutional neural networks. To this respect, this dissertation will focus on getting to know the characteristics of these types of networks, their operation, their different architectures, as well as how they perform the convolution operation, which is what characterises these networks. At the end of the document, theory will be put into practice in the R language for image classification, based on convolutional neural networks, by using Keras library. iv Índice de figuras 1.1. Machine Learning y Deep Learning como subconjuntos de la IA. . . . . . 1 2.1. Estructura de una neurona biológica. . . . . . . . . . . . . . . . . . . . . 3 2.2. Red neuronal artificial. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5 2.3. Elementos de una neurona artificial. . . . . . . . . . . . . . . . . . . . . . 5 2.4. Funciones de activación. . . . . . . . . . . . . . . . . . . . . . . . . . . . 6 2.5. Perceptrón. .................................. 7 2.6. Perceptrónmulticapa. ............................ 7 2.7. Red neuronal recurrente. . . . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.8. Red neuronal convolucional. . . . . . . . . . . . . . . . . . . . . . . . . . 8 2.9. Máquinas de Boltzmann. . . . . . . . . . . . . . . . . . . . . . . . . . . . 9 2.10. Redes de creencias profundas. . . . . . . . . . . . . . . . . . . . . . . . . 9 2.11. Red neuronal con 3 capas . . . . . . . . . . . . . . . . . . . . . . . . . . 11 3.1. Extracción del borde de una imagen mediante convolución. . . . . . . . . 18 3.2. Visualización de una CNN. . . . . . . . . . . . . . . . . . . . . . . . . . . 20 3.3. Arquitectura de una CNN. . . . . . . . . . . . . . . . . . . . . . . . . . . 21 3.4. Imagen ejemplo de un 1. . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.5. Ejemplo de un filtrado. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 22 3.6. Max-pooling: filtro 2×2yS=2........................ 24 3.7. Max-pooling. ................................. 24 3.8. Max-pooling con 3 mapas de características. . . . . . . . . . . . . . . . . 25 3.9. Arquitectura de LeNet. . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.10. Arquitectura LeNet5. . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 29 3.11. Arquitectura GoogLeNet . . . . . . . . . . . . . . . . . . . . . . . . . . . 30 3.12.ArquitecturaAlexNet............................. 31 3.13.ArquitecturaVGGNet ............................ 31 v Índice de cuadros 3.1. Hiperparámetros de la convolución entre volúmenes. . . . . . . . . . . . . 27 vii 2.1. REDES DE NEURONAS ARTIFICIALES En la figura anterior, podemos apreciar los elementos de la neurona. Según [11], en ella, la suma de las nentradas xj, ponderadas con los pesos sinápticos wij, genera la entrada ponderada total o “potencial postsináptico” de la neurona i . Posteriormente, se aplica una función de activación o transferencia a la diferencia entre el “potencial postsináptico” y el umbral θi , obteniéndose la salida de la neurona, yi , donde yi ( t ) = f ( Pn j=1 wijxj−θi ). La función de activación f () se suele considerar determinista y en la mayor parte de los modelos es monótona creciente y continua. La forma yi ( t ) = f ( x )de las funciones de activación más empleadas en las redes de neuronas artificiales se muestran en la siguiente figura, donde xrepresenta el potencial postsináptico e yel estado de activación. Figura 2.4: Funciones de activación. En las redes de neuronas convolucionales, la función de activación que se usa es la rectifier, utilizadas en las capas ReLu, en la cual profundizaremos en el siguiente capítulo. Esta función se define simplemente como f ( x ) = max (0 , x ), es decir, permiten el paso de todos los valores positivos sin cambiarlos, pero los valores negativos los asigna a cero. Según [11], las neuronas artificiales pueden estar estructuradas en capas interconectando neuronas con diferentes pesos asociados, con la posibilidad de que haya interacción entre neuronas de una misma capa o no. Cualquier red podría ser representada por una matriz de pesos que contiene todos los pesos de dicha red. Si wij es positivo indica que la relación entre las neuronas es excitadora, es decir, siempre que la neurona i esté activada la neurona j recibirá una señal que tenderá a activarla. Si wij es negativo la sinapsis será inhibidora, en este caso, si la neurona i está activada enviará una señal que desactivará la neurona j . Finalmente, si wij es 0, se supone que no hay conexión entre ambas. En función de cómo se realiza la interconexión entre neuronas, se pueden tener las siguientes arquitecturas [5]: 6CAPÍTULO 2. REDES DE NEURONAS 2.1. REDES DE NEURONAS ARTIFICIALES Perceptrón , es la forma más simple de red neuronal y la base de los modelos más avanzados que se han desarrollado en el aprendizaje profundo. Normalmente se utilizan en problemas de clasificación donde se necesita dar datos referentes a etiquetas de observaciones (binarias o multinomiales) basadas en los datos de entrada. Estos valores de entrada se envían directamente a la capa de salida después de que se multipliquen por pesos y un sesgo es añadido a la suma acumulada, la cual se pone en una función de activación, que no es más que una función que define la salida. Cuando esa salida se encuentra por encima o por debajo de un cierto umbral, se determina la salida final. Figura 2.5: Perceptrón. Perceptrón multicapa , es muy similar al perceptrón, presenta múltiples capas que se encuentran interconectadas de forma que constituyen una red neuronal de retroalimentación. Cada neurona en una capa tiene conexiones dirigidas a neuronas de otra capa. Figura 2.6: Perceptrón multicapa. Uno de los factores más importantes en este modelo y en el perceptrón, es el algoritmo de propagación hacia atrás (back-propagation), un método común para el entrenamiento de redes neuronales. La propagación hacia atrás pasa el error calculado en la capa de CAPÍTULO 2. REDES DE NEURONAS 7 2.1. REDES DE NEURONAS ARTIFICIALES salida hacia la capa de entrada, para poder apreciar la contribución de cada capa al error y alterar así la red en consecuencia. Aquí, se usa un algoritmo de descenso del gradiente para determinar el grado que los pesos deberían de cambiar en cada iteración. Se explicará con mayor detalle posteriormente. Redes recurrentes (RNN), son modelos de redes de neuronas artificiales donde las conexiones entre las unidades forman un ciclo dirigido. Un ciclo dirigido es una secuencia donde el camino a lo largo de los vértices y bordes está completamente determinado por el conjunto de aristas que se ha utilizado y, por tanto, tiene la apariencia de seguir un orden específico. Son generalmente utilizadas para el reconocimiento de voz y de escritura. Figura 2.7: Red neuronal recurrente. Redes convolucionales (CNN) , son modelos que se utilizan en mayor frecuencia para el procesamiento de imágenes y visión para ordenadores. Están diseñadas de tal manera que imitan la estructura de la corteza visual animal. Las redes de neuronas convolucionales tienen neuronas dispuestas en tres dimensiones: anchura, altura y profundidad. Aquí, las neuronas de una capa solamente están conectadas a una pequeña región de la capa anterior. Figura 2.8: Red neuronal convolucional. 8CAPÍTULO 2. REDES DE NEURONAS 2.1. REDES DE NEURONAS ARTIFICIALES Máquinas de Boltzmann restringidas (RBM) , son un tipo de modelo binario que tiene una arquitectura única, de modo que hay múltiples capas ocultas de variables aleatorias y una red de unidades binarias estocásticas acopladas simétricamente. Se componen de un conjunto de unidades visibles y de una serie de capas de unidades ocultas, aunque aquí no hay conexiones entre unidades de la misma capa. Las RBM pueden aprender representaciones internas, complejas y abstractas en tareas como el reconocimiento de objetos o de voz. Figura 2.9: Máquinas de Boltzmann. Redes de creencias profundas , son similares a las de Boltzmann, excepto que la capa oculta de cada subred es la capa visible para la siguiente subred. Son en general un modelo gráfico generativo de múltiples capas de variables no observables con conexiones entre las capas pero no entre las unidades de cada capa. Figura 2.10: Redes de creencias profundas. Un último elemento de las redes de neuronas artificiales es la regla de aprendizaje. El aprendizaje se define libremente como el significado de mejorar alguna tarea a través de la práctica. ¿Cómo sabe un ordenador si está mejorando y cómo mejorar? Hay diferentes respuestas posibles a estas preguntas, las cuales producen distintos tipos de aprendizaje automático. Se puede decir al algoritmo la respuesta correcta para un determinado problema de forma que se ejecute de manera satisfactoria la próxima vez. Se espera que sólo haya que decir algunas respuestas correctas y luego pueda averiguar cómo obtenerlas para otros problemas. Alternativamente, se puede decir si la respuesta es correcta o errónea, pero no cómo encontrarla, para que tenga que buscar la respuesta idónea. Una variante es dar CAPÍTULO 2. REDES DE NEURONAS 9 2.2. ENTRENAMIENTO DE UNA RED NEURONAL una puntuación a la respuesta de acuerdo con lo satisfactoria que sea, en lugar de dar solamente una respuesta correcta o incorrecta. Finalmente, es posible que no se tengan las respuestas deseadas, queriendo únicamente que el algoritmo encuentre entradas que tengan algo en común. Estas diferentes respuestas a las posibles preguntas proporcionan una forma útil de clasificar diferentes algoritmos: Aprendizaje supervisado : Se proporciona un conjunto de entrenamiento de ejemplos con los valores de la variable objetivo y en base a este conjunto de entrenamiento, el algoritmo se generaliza para responder de forma correcta a todas las entradas posibles. Esto también se llama aprender de los ejemplos. Aprendizaje no supervisado : No se conocen los valores de la variable objetivo, es el algoritmo el que intenta identificar similitudes entre las entradas para que las entradas que tienen algo en común se clasifiquen juntas. El enfoque estadístico para el aprendizaje no supervisado es conocido como estimación de densidad. Aprendizaje reforzado : Se encuentra entre el aprendizaje supervisado y el no supervisado. Al algoritmo se le informa si la respuesta es incorrecta pero no se le dice cómo corregirlo. Tiene que explorar y probar diferentes posibilidades hasta que descubra el modo de obtener la respuesta correcta. Al aprendizaje reforzado a veces se le llama aprender con un crítico, porque se le dicen las respuestas pero no la manera de mejorarlas. Aprendizaje evolutivo : La evolución biológica puede verse como un proceso de aprendizaje, organismos biológicos se adaptan para mejorar sus tasas de supervivencia y la posibilidad de tener descendencia en su ambiente. La idea es ver la forma de modelar esto en un ordenador, usando aptitudes, que corresponden a cuánto de buena es la solución actual. 2.2. Entrenamiento de una red neuronal Uno de los métodos más conocidos y efectivos para entrenar redes de neuronas artificiales es el algoritmo de retropropagación para el error, el cual modifica sistemáticamante los pesos de las conexiones entre las neuronas de modo que la respuesta se vaya acercando cada vez más a la respuesta deseada. El entrenamiento de una red de neuronas artificiales se lleva a cabo en dos etapas diferentes: propagación hacia delante (forward propagation) y la propagación hacia atrás (backward propagation). En la primera etapa se calculan todas las activaciones de las neuronas de la red, desde la primera hasta la última capa. Durante esta etapa, los valores de los pesos sinápticos son todos fijos, en la primera iteración se toman los valores por defecto. En la segunda etapa, la respuesta de la red se compara con la respuesta deseada, obteniendo así el error de la red. El error que se ha calculado, se propaga en dirección opuesta a la de las conexiones sinápticas. Al final de esta segunda etapa, los pesos se modifican según los errores calculados para minimizar la diferencia entre la salida actual y la deseada. Se estudiarán a continuación ambas etapas con un mayor detalle. 10 CAPÍTULO 2. REDES DE NEURONAS 2.2. ENTRENAMIENTO DE UNA RED NEURONAL 2.2.1. Forward Propagation Vamos a ver un ejemplo sobre la propagación hacia delante considerando la siguiente figura: Figura 2.11: Red neuronal con 3 capas Sea nl el número de capas de la red, que en este caso se tiene que nl = 3. Denotando Ll a cada capa donde l= 1, .., nl, de esta forma se tiene que L1es la capa de entrada y Lnl es la capa de salida. La red considerada tiene i parámetros ( W, b )=( W(1), b(1), W (2), b(2) ) donde: Wl ij es el peso asociado a la conexión entre la neurona j de la capa l y la neurona j de la capa l+ 1 para 1≤i≤3,1≤j≤3,1≤l≤3. W(l)representa la matriz de pesos entre las neuronas de la capa ly la capa l+ 1. al i constituye la salida, es decir, la activación de la neurona en la capa l , en nuestro caso al i=xipara 1≤i≤3,1≤l≤3. bl ies el sesgo asociado a la neurona ien la capa l+ 1, para 1≤i≤3,1≤l≤3. sl corresponde al número de neuronas en la capa l sin contar las neuronas de sesgo, para 1≤i≤3. En el ejemplo se tiene que W(1) ∈R3×3 y W(2) ∈R1×3 . La salida de la red ahora se puede expresar como se muestra en las siguientes ecuaciones donde la función f () indica la función de activación de las neuronas. a(2) 1=f(W(1) 11 x1+W(1) 12 x2+W(1) 13 x3+b(1) 1) a(2) 2=f(W(1) 21 x1+W(1) 22 x2+W(1) 23 x3+b(1) 2) a(2) 3=f(W(1) 31 x1+W(1) 32 x2+W(1) 33 x3+b(1) 3) hW,b(x) = a(3) 1=f(W(2) 11 a(2) 1+W(1) 22 a(2) 2+W(1) 23 a(2) 3+b(1) 1). Además, resulta que hW,b ( x ) = f ( WT−→ x ) = fP3 i=1 Wixi+b , o sea, una suma ponderada de las entradas incluyendo el sesgo para i. Este proceso es el conocido como propagación hacia delante. CAPÍTULO 2. REDES DE NEURONAS 11 2.2. ENTRENAMIENTO DE UNA RED NEURONAL 2.2.2. Backward Propagation De forma general, la propagación hacia atrás utiliza un algoritmo de aprendizaje supervisado, llamado algoritmo de retropropagación (“backpropagation algorithm”) . Permite cambiar el peso de las conexiones para así minimizar el valor de una determinada función de costo C . Considerando una sola muestra ( x(i), y(i) )del conjunto de entrenamiento, la función de costo puede escribirse como: C(W, b;x(i), y(i)) = 1 2||hW,b(x(i))−y(i)||2(2.1) donde hW,b ( x(i) )es la salida devuelta por la red, x(i) es la entrada e y(i) es la salida que se quiere y que es parte del conjunto de entrenamiento. En general, el conjunto de entrenamiento es un conjunto de m pares ( x(i), y(i) )con i = 1 , .., m . De esta forma, la función de costo total es: C(W, b) = "1 m m X i=1 C(W, b;x(i), y(i))#+λ 2 nl−1 X l=1 sl X i=1 sl+1 X j=1 (W(l) ji )2= ="1 m m X i=1 1 2||hW,b(x(i))−y(i)||2#+λ 2 nl−1 X l=1 sl X i=1 sl+1 X j=1 (W(l) ji )2(2.2) El primer término de la fórmula (2.2) es la media de la suma de los errores al cuadrado, queriéndo decir por error a la diferencia entre el valor real de la salida y la salida deseada. El segundo término es un término de regularización y se llama pérdida de peso, que tiende a disminuir la cantidad del peso asignado y ayuda a la reducción de situaciones en las que se produce un sobreajuste. Antes de comenzar a entrenar una red de neuronas artificiales, es bueno inicializar cada parámetro W(l) ij con un valor aleatorio cercano a cero y luego elegir un algoritmo para minimizar la función dada en (2.2). Usualmente se usa el algoritmo de descenso del gradiente. La propagación hacia atrás comienza desde la última capa de la red, que es la capa de salida y se propaga hacia atrás hasta la capa de entrada, calculando para cada neurona de cada capa el término de error utilizado para así medir la responsabilidad de cada neurona en un posible error en la salida de la red. La propagación hacia atrás se realiza después de una propagación hacia delante, donde se calculan todos los parámetros Wyb. 2.2.3. Actualización de los pesos Al utilizar los términos del error calculados en la propagación hacia atrás, se pueden calcular las derivadas parciales, es decir, los gradientes con respecto a W y a b de la función de costo C . A través de estas derivadas, se pueden actualizar el valor de los pesos. Una sola iteración del descenso del gradiente actualiza los parámetros W y b como se muestra en (2.3). 12 CAPÍTULO 2. REDES DE NEURONAS 2.2. ENTRENAMIENTO DE UNA RED NEURONAL Wl ij =Wl ij −α∂ ∂Wl ij C(W, b) b(l) i=b(l) i−α∂ ∂b(l) i C(W, b) (2.3) donde C ( W, b )viene dada en (2.2) siendo obvio que la función de costo debe de ser diferenciable, mientras que α es un parámetro conocido como tasa de aprendizaje, que se utiliza para especificar el grado de aprendizaje, o mejor dicho, la actualización respecto a los parámetros Wyb. Todo el proceso de la propagación hacia delante y la propagación hacia atrás con la correspondiente actualización de los pesos, mejora los parámetros W y b con el objetivo de minimizar la función de costo. CAPÍTULO 2. REDES DE NEURONAS 13 Capítulo 3 Redes de Neuronas Convolucionales (CNN) 3.1. Introducción Desde 2012, uno de los avances más importantes en el aprendizaje profundo es el uso de las redes de neuronas convolucionales para obtener mejores resultados en el reconocimiento de imágenes. Las redes de neuronas convolucionales (CNN) presentan múltiples capas para calcular la salida dado un conjunto de datos. El desarrollo de este modelo comenzó en la década de 1950, donde los investigadores Hubel y Wiesel modelaron la corteza visual animal. En un artículo en el año 1968, ambos debatieron sus hallazgos, los cuales identificaron tanto células simples como complejas dentro de los cerebros de monos y gatos que ellos estudiaron. Observaron que las células simples tuvieron un rendimiento maximizado. Por otro lado, se observó que el cuerpo receptivo en las células complejas era considerablemente más grande, y sus salidas no se veían afectadas por las posiciones de los bordes dentro del cuerpo receptivo. Además del reconocimiento de imágenes, para lo cual las redes de neuronas convolucionales fueron originalmente creadas, tienen otras aplicaciones considerables, como dentro de los campos del procesamiento natural del lenguaje y aprendizaje reforzado. 3.2. Visión artificial La visión artificial (CV : Computer Vision) es un campo que se ocupa de la adquisición, procesamiento y extracción de información de imágenes. La visión artificial es un campo muy diverso que utiliza técnicas e ideas de las más diversas disciplinas científicas. La parte de la elaboración de imágenes utiliza técnicas de procesamiento de señales para poder realizar mejoras y/o cambios en la imagen original con el fin de hacerla más adecuada para extraer información. La extracción de los datos se puede considerar como la parte final de la visión artificial y es tarea de la minería de datos. Una vez la información ha sido extraída de la imagen, es posible usarla en los campos más dispares: orientación de robots, exploración automática de áreas mediante sistemas inteligentes, conducción automática de automóviles.. . 15 3.4. COMPONENTES EN LA ARQUITECTURA DE UNA CNN Figura 3.4: Imagen ejemplo de un 1. El ordenador asociará los píxeles blancos al valor 1, y los píxeles negros al valor − 1. Cuando introducimos una imagen a la capa convolucional, el modelo extrae las características únicas de dicha imagen, que en general, son los colores, las formas y los bordes los que definen la imagen. Una vez que tengamos las características, se realiza lo que se conoce como filtrado sobre esta imagen. La filtración es el proceso de tomar una característica de la imagen, que en este caso podemos suponer que sea un píxel de 3 × 3 cuadrado y combinarlo con un parche de dicha imagen, que también será un píxel de 3 × 3 cuadrado. En la siguiente figura podemos observar como se ve este proceso de filtrado. Figura 3.5: Ejemplo de un filtrado. Luego, multiplicamos el número del píxel de la característica por el número correspondiente al píxel del parche de la imagen. En nuestro ejemplo, deberíamos de conseguir una salida de 1o − 1por cada operación. Cuando los píxeles coinciden exactamente, la salida debe ser 1, y cuando no lo hacen, debe ser − 1. Por último, se toma la media de los productos de los píxeles. Si una imagen coincide exactamente, esta media debe de ser 1, y si no es así, debe ser menor que 1. Supongamos que el parche de la imagen y la característica seleccionada no coinciden en absoluto. En este caso, cuando se toma la media, debe de salir -1. Colocamos este producto en el centro de la posición del parche de la imagen junto con una determinada característica, esto es lo que se conoce como un mapa de características. Esto será el resultado de la capa de convolución y es lo que se utilizará en la siguiente capa. La capa convolucional sobre distintas operaciones producirá múltiples mapas de características. El proceso de hacer coincidir una característica con el parche de una imagen sobre cada posición posible se conoce como la convolución de una imagen. El mapa de activación/características para una red de neuronas convolucional se denota como: hk i,j =tanh((wkx)i,j +bk) donde wk es el peso, bk es el sesgo, x es el valor del píxel específico y tanh es para la no linealidad de los datos. Los subíndices i, j se refieren a la entrada de la matriz que 22 CAPÍTULO 3. REDES DE NEURONAS CONVOLUCIONALES (CNN) 3.4. COMPONENTES EN LA ARQUITECTURA DE UNA CNN representa el mapa de activación/características. El peso wk es lo que conecta en último lugar los píxeles en el mapa de características de la capa anterior. La capa de convolución es en última instancia una pila de mapas de características que se han obtenido en la operación descrita anteriormente. Luego se pone el mapa de características en la capa de agrupación. Se calcula el tamaño espacial del volumen de salida como: SpatialSizeOutput =W−F+ 2P S+ 1 donde W es el tamaño del volumen de entrada, F es el tamaño del cuerpo receptivo en la capa de convolución, Pes el relleno cero y Ses el paso. 3.4.2. Capa de agrupación (Pooling layer) Entre sucesivas capas convolucionales, es usual colocar lo que se denomina como capa de agrupación en el medio de dichas capas. De forma concisa, la capa de agrupación toma los mapas de características producidos en la capa de convolución y los agrupa en una imagen. En esta capa, se produce la reducción de dimensionalidad reduciendo de esta forma, la complejidad que posee el modelo ayudando a evitar el sobreajuste del mismo. Es decir, lo que hacen las capas de agrupación es simplificar la información en la salida de la capa convolucional. El pooling es una operación que permite reducir la cantidad de parámetros de la red, por lo general, la operación describe la agrupación de manera operacional. Es posible imaginar la operación de agrupación con la de convolución entre volúmenes. Dado un volumen I = ( WI ; HI ; D )la operación de agrupación produce un volumen de salida O = ( WO ; HO ; D )deslizando un filtro 2 k× 2 k que no se aprende, sino que solamente se utiliza para definir el cuerpo receptivo de la operación. La operación de agrupación en un volumen genérico I = ( W, H, D ) = {I1, .., ID} se puede representar como la convolución de I con un volumen de D filtros Di idénticos. El filtro representa el muestreo de la respuesta impulsiva de la función f que se desea aplicar para reducir el número de parámetros. Sea FV el volumen del filtro, formado por Dfiltros idénticos a F. Ahora: On(i, j) = DI X d=1 k X u=−k k X v=−k F(u, v)Id(i−u, j −v) (3.11) Como en el caso de (3.7), se aplica para cada píxel del volumen de entrada deslizando el filtro con cierto paso S y rellenando el resultado con P ceros. El resultado de la operación de agrupación con f=max se muestra en la figura 3.6. CAPÍTULO 3. REDES DE NEURONAS CONVOLUCIONALES (CNN) 23 3.4. COMPONENTES EN LA ARQUITECTURA DE UNA CNN Figura 3.6: Max-pooling: filtro 2×2y S=2. Intuitivamente, la operación de agrupación consiste en extraer regiones 2 k× 2 k y aplicar una función f al mapa 2 k× 2 k seleccionando un solo valor, moviendo S píxeles y repitiendo la operación. Esto se hace para todos los niveles del volumen de entrada. La agrupación por tanto conserva la profundidad del volumen de entrada. Los valores de los parámetros que se usan con más frecuencia son: Filtro de dimensiones 2×2. Paso igual al lado del filtro, S= 2. Función f:R4→R,(x1, x2, x3, x4)→max(x1, x2, x3, x4). Al hacerlo, el volumen resultante tendrá unas dimensiones ( W0 = W 2, H0 = H 2, D ). Esto permite reducir en un 75 % el número de parámetros de entrada y así seguir entrenando las siguientes capas con muchos menos parámetros para realizar el aprendizaje. La agrupación con f = max se denomina max-pooling . Este tipo de agrupación ha demostrado dar los mejores resultados hasta la fecha en la práctica. Sin embargo, no hay impedimento en usar cualquier otra función y observar el comportamiento del modelo en sus diversas fases. Figura 3.7: Max-pooling. Nótese que en esta última imagen que se tenían 24 × 24 neuronas en la salida de la capa convolucional y después de la agrupación se tienen 12 ×12 neuronas. Como se mencionó anteriormente, la capa convolucional involucra a más de un mapa de características. Se aplica max-pooling a cada mapa de características por separado. Enton- 24 CAPÍTULO 3. REDES DE NEURONAS CONVOLUCIONALES (CNN) 3.4. COMPONENTES EN LA ARQUITECTURA DE UNA CNN ces, si hubiese tres mapas de características, la combinación de las capas convolucionales ymax-pooling se vería así: Figura 3.8: Max-pooling con 3 mapas de características. Se puede pensar que max-pooling es una manera de que la red pregunte si una determinada característica se encuentra en algún lugar de una región de la imagen. Lo que se intuye es que una vez se ha encontrado una característica, su ubicación exacta no es tan importante como su ubicación aproximada en relación con otras características. Una gran ventaja es que hay muchas menos características agrupadas, por lo que esto ayuda a reducir la cantidad de parámetros necesarios en las capas posteriores. Max-pooling no es la única técnica utilizada en la agrupación. Otra técnica es conocida como agrupación L2 (L2-pooling). En este caso, en lugar de tomar la activación máxima de una región específica de neuronas 2 × 2, se toma la raíz cuadrada de la suma de los cuadrados de las activaciones 2 × 2. Si bien los detalles son diferentes, la intuición es similar a max-pooling, la agrupación L2 es una forma de condensar la información de la capa convolucional. La función que determina el tamaño espacial de la salida viene dada por: SpatialSizeOutput =W2·H2·L2 donde W2=w1−F S+ 1 , H2=H1−F S+ 1 , L2=L1 3.4.3. Capa de unidades lineales rectificadas ReLu (Rectified Linear Units Layer) ReLu es la abreviatura de Rectified Linear Units, es decir, unidades lineales rectificadas. Este tipo de capas es muy común en una red de neuronas convolucional y se puede utilizar múltiples veces en una misma red de neuronas artificiales, frecuentemente después de cada capa convolucional. La función de esta capa es la de aumentar la propiedad de no linealidad de la función de activación, sin que se modifiquen los cuerpos receptivos de la capa convolucional. Una función muy utilizada en las capas ReLu es f ( x ) = max (0 , x ), aunque también es posible otras funciones como f ( x ) = tanh ( x ), f ( x ) = |tanh ( x ) | o la función sigmoide f ( x ) = 1 1+e−x . Además es posible utilizar en una capa una función cualquiera y en otra de ellas otra diferente. CAPÍTULO 3. REDES DE NEURONAS CONVOLUCIONALES (CNN) 25 3.4. COMPONENTES EN LA ARQUITECTURA DE UNA CNN En cuanto a la función f ( x ) = tanh ( x ), permiten entrenar con una mayor rapidez y con un rendimiento similar a las capas ReLu. En este tipo de capas no existe ningún parámetro a establecer, simplemente se utiliza una función fijada. Estas capas tampoco tienen parámetros entrenables, por lo que tienen una propagación hacia atrás simple: se propagan hacia atrás los errores calculados hasta ese momento que provienen de la capa posterior, pasándolos a la capa anteriormente considerada. 3.4.4. Capa completamente conectada (Full connected layer) Este tipo de capa es exactamente igual a cualquier capa de una red de neuronas artificial clásica, pero que tiene su arquitectura totalmente conectada. Todas las neuronas de esta capa se encuentran conectadas a todas las neuronas de la capa anterior y más específicamente, se encuentran conectadas a todos los mapas de características de la capa anterior. En este tipo de capa, a diferencia de lo que se ha visto hasta ahora en las redes de neuronas convolucionales, no utiliza la propiedad de conectividad local, ya que una capa completamente conectada se encuentra conectada a todo volumen de entrada, por lo que tiene un gran número de conexiones, mientras que las capas convolucionales se encuentran conectadas a una sola región local en la entrada y que muchas de las neuronas de la capa convolucional comparten parámetros. El único parámetro que se puede configurar en este tipo de capa es el número de neuronas que la componen. En estas capas se conectan sus K neuronas con todos los volúmenes de entrada de cada una de sus K neuronas. Su salida será un único vector 1 × 1 ×K , que contiene las activaciones calculadas. Este hecho, el pasar de un volumen de entrada en 3 dimensiones hasta un solo vector de salida con una sola dimensión, sugiere que después de esta capa, no haya ninguna capa de convolución. La función principal de las capas completamente conectadas es llevar a cabo una especie de agrupación de la información que se ha obtenido hasta ese momento, que servirá en cálculos posteriores para la clasificación final. En general, en las redes de neuronas convolucionales, se suele utilizar más de una capa completamente conectada en serie y la última de ellas tendrá el parámetro K que es el número de clases que se encuentran presentes en el conjunto de datos. Los valores finales de K serán alimentados a la capa de salida, que a través de una cierta función probabilística realizará la clasificación. Hay más parámetros que se pueden configurar, como los valores de los pesos y el sesgo, pero no es estrictamente necesario y se pueden utilizar valores predeterminados. 3.4.5. Capa de pérdida (Loss layer) En esta capa es donde se comparan las predicciones con los valores reales de las imágenes. Cuando se trata de clasificar y elegir entre K posibles niveles, se usaría un clasificador de pérdidas softmax. El uso de una función euclídea también es usual con el propósito de regresión contra las etiquetas de las imágenes. Sus funciones están dadas por: 26 CAPÍTULO 3. REDES DE NEURONAS CONVOLUCIONALES (CNN) 3.5. HIPERPARÁMETROS Función de pérdida softmax: σ(z)j=ezj PK k=1 ezk zj= d X k=0 Wikxk donde: 1. zjes un vector de probabilidades a posteriori. 2. j representa la i− ésima neurona de la capa de salida, es decir, de la capa de pérdida. 3. Krepresenta el número total de neuronas de la capa de pérdida. 4. Wki son los pesos. 5. xison los valores de entrada que recibe la capa de pérdida. 6. σ(z)jes la activación de las Kneuronas de la capa de pérdida. Función de pérdida euclídea: E=1 2K K X i=1 kˆyi−yik2 2 donde: 1. Krepresenta el número total de neuronas de la capa de pérdida. 2. ˆyirepresenta las predicciones de las imágenes. 3. yirepresenta los valores reales de las imágenes. 3.5. Hiperparámetros En las secciones anteriores, se han introducido los conceptos básicos relevantes en las redes neuronales convolucionales. Cada uno de estos conceptos está definido dependiendo de uno o más grados de libertad: los hiperparámetros. La elección del valor de los hiperparámetros sigue siendo una operación vinculada a la intuición, por lo que no tiene bases matemáticas sólidas. La tabla 3.1 muestra todos los hiperparámetros relacionados con la operación de convolución entre volúmenes. Nótese que la elección del algoritmo de optimización en sí también es un hiperparámetro. FdNúmero de filtros que forman la red convolucional 2k×2kÁrea del filtro de convolución/pooling SPaso de la operación de convolución/pooling PNúmero de ceros de relleno para la salida de la convolución/pooling Cuadro 3.1: Hiperparámetros de la convolución entre volúmenes. Además de los hiperparámetros que se muestran en la tabla 3.1, cada arquitectura tiene muchos otros grados de libertad, muchos de los cuales que a continuación se enumeran CAPÍTULO 3. REDES DE NEURONAS CONVOLUCIONALES (CNN) 27 3.6. ARQUITECTURAS DE CNN siguen siendo problemas abiertos y sus elecciones influyen en las presentaciones de las redes. Dimensiones de la entrada : las imágenes que se introducen en la red se deben de escalar antes de aplicar la primera convolución. Número de capas de convolución : al igual que es posible tener un número Fd de filtros arbitrarios en cada capa de convolución, es posible tener varias capas de convolución que combinan las Fd características extraídas de la capa anterior teniendo F0 dcaracterísticas. Posición de la operación de agrupación (pooling) : es posible elegir la cantidad de características mediante pooling después de cada capa, así como no introducir ninguna operación de pooling. La función de pooling : si se elige introducir una operación de pooling, la operación puede ser el máximo o cualquier otra función. En cada capa de agrupación se puede usar una función diferente. Tamaño del filtro : cada capa de convolución (y de agrupación) puede usar filtros con un cuerpo receptivo diferente en cada nivel de la red. Capa totalmente conectada : para combinar las características extraídas, la parte final de cada red consiste en capas completamente conectadas. Cuántas capas totalmente conectadas a usar y el número de neuronas que las forman es una elección totalmente arbitraria. Función de pérdida : la elección de la función de pérdida, es de lejos, lo que más afecta al comportamiento de la red en la prueba. Dependiendo de la función de pérdida elegida, las características que la red va aprendiendo van variando, al igual que las conexiones entre las neuronas de las capas completamente conectadas. No linealidad : se debe de elegir una función no lineal para la activación de las neuronas. Se puede elegir una función diferente para cada convolución o para cada capa completamente conectada. Topología : hasta ahora se ha asumido que las características extraídas de una capa de convolución necesariamente deben ser combinadas inmediatamante después de esta capa. Esto en realidad no es una elección requerida y es posible vincular las características extraídas de una capa con cualquier otra capa y/o mostrar las capas de convolución “centrales”. Se pueden combinar las características extraídas de las capas anteriores con las características que se pueden extraer de la imagen de entrada. 3.6. Arquitecturas de CNN Ahora se puede tener una idea general de cómo se estructuran las redes de neuronas convolucionales: a partir de imágenes como datos de entrada en una capa de entrada, habrá una o más capas convolucionales, intercalando con capas ReLu, y cuando sea necesario capas de agrupación y en última instancia un conjunto de capas completamente conectadas antes de la capa de salida. Se tienen distintas posibilidades a la hora de construir una red de neuronas convolucional. Destacan: 28 CAPÍTULO 3. REDES DE NEURONAS CONVOLUCIONALES (CNN) 3.6. ARQUITECTURAS DE CNN 1. LeNet : desarrollada en los años 1990 por el reconocido investigador de aprendizaje profundo Yann LeCun. LeNet posee una arquitectura con una simplicidad relativa. El objetivo de este modelo fue clasificar códigos, leer códigos postales y la clasificación general de imágenes simples. Es considerada como la primera aplicación práctica exitosa de una red de neuronas convolucional. En la siguiente figura se muestra un ejemplo de LeNet, donde las capas presentes se encuentran como sigue: entrada, capa convolucional, ReLu, capa de agrupación, capa convolucional y clasificador softmax. Figura 3.9: Arquitectura de LeNet. En la figura 3.10 se observa brevemente la arquitectura LeNet5 (la quinta versión de la arquitectura LeNet inicial) para mostrar la topología de la primera arquitectura de convolución utilizada con éxito para la clasificación de imágenes de figuras escritas a mano. Figura 3.10: Arquitectura LeNet5. Los hiperparámetros utilizados por el autor son: Dimensiones de la entrada: 32 ×32 en escala de grises. Número de capas de convolución: 2. Primera capa de convolución: aprende 6 filtros 5 × 5produciendo 6 mapas de características 28 ×28. Primera capa de max-pooling:2 × 2con paso S = 2 para reducir a la mitad la resolución espacial de la entrada de 28 ×28 a14 ×14. Segunda capa de convolución: aprende 16 filtros 5 × 5produciendo 16 mapas de características 10 ×10. Segunda capa de max-pooling:2 × 2con paso S = 2, para reducir a la mitad la resolución espacial de 10 ×10 a5×5. CAPÍTULO 3. REDES DE NEURONAS CONVOLUCIONALES (CNN) 29 3.6. ARQUITECTURAS DE CNN Número de capas totalmente conectadas: 3. Primera capa totalmente conectada: 120 neuronas, cuya entrada es la combinación de 16 mapas de características extraídas de los filtros (después de la disminución de la resolución realizada en el pooling) de la capa anterior. Segunda capa totalmente conectada: 84 neuronas conectadas totalmente con las 120 neuronas de la capa anterior. Tercera capa totalmente conectada: nivel de salida. 10 neuronas que representan 10 clases que la red puede clasificar. El autor eligió arbitrariamente el valor de los hiperparámetros y la topología adoptada. 2. GoogLeNet : esta arquitectura de red neuronal convolucional ganó el premio Image- Net Large-Scale Visual Recognition Challenge (ILSVRC) en 2014 en honor a la LeNet de Yann LeCun anteriormente descrita. Fue desarrollada por Christian Szegedy, Wei Liu, Yangqing Jia, Pierre Sermanet, Scott Reed, Dragomir Anguelov, Dumitru Ehran, Cinven Vanhoucke y Andrew Rabinovich. El nombre de GoogLeNet proviene del hecho de que un número considerable de los desarrolladores de esta arquitectura eran trabajadores de Google Inc. Sus desarrolladores describen a GoogLeNet como una arquitectura que permite “aumentar la profundidad y el ancho de la red manteniendo la restricción presupuestaria computacional”. Como se ilustra en la siguiente figura, la estructura propuesta es la siguiente: capa de entrada, capa convolucional, capa de agrupación máxima, capa convolucional (con función el máximo), comienzo (con dos capas), capa de agrupación máxima, comienzo, comienzo (con 5 capas), capa de agrupación máxima, comienzo (con 2 capas), capa de agrupación media, dropout , ReLu, clasificador softmax. Figura 3.11: Arquitectura GoogLeNet El enfoque de la arquitectura inicial es que a través de la orientación en las capas como se ha descrito anteriormente, la red de neuronas convolucional permite aumentar el número de unidades en cada etapa sin hacerlo hasta el punto en el que el modelo se vuelva demasiado complejo. En general, el modelo busca procesar información visual a varias escalas y luego agregar cálculos a la siguiente etapa, así que los niveles más altos de abstracción son analizados simultáneamente. 3. AlexNet : desarrollada por Alex Krizhevsky, Ilya Sutskever y Geoffrey Hinton, ganó el ILSVRC en 2012. Similar a la arquitectura LeNet, AlexNet utiliza “neuronas no saturadas” e implementa eficientemente la GPU (unidad de procesamiento gráfico) 30 CAPÍTULO 3. REDES DE NEURONAS CONVOLUCIONALES (CNN) 3.6. ARQUITECTURAS DE CNN para las capas de convolución. Las neuronas de las capas completamente conectadas, se encuentran conectadas a todas las neuronas de la capa anterior, las capas de respuesta/normalización siguen a la primera y a la segunda capa convolucional, y el núcleo de la segunda, cuarta y quinta capa son conectadas únicamente al núcleo de la capa anterior, que estaría en la misma GPU. La arquitectura se puede ver en la siguiente figura: cinco capas convolucionales, 3 capas completamente conectadas, la salida es un clasificador softmax de 1000 vías. Figura 3.12: Arquitectura AlexNet 4. VGGNet : desarrollada por Karen Simonyan yAndrew Zisserman de la Universidad de Oxford. Llevó a segundo lugar a AlexNet en el ILSVRC en el año 2014. El cuerpo receptivo es 3 × 3, con filtros de 1 × 1, el paso es 2 y el tamaño máximo de agrupación es 2 × 2. La arquitectura es tal que la entrada se alimenta a través de varias capas convolucionales a tres capas completamente conectadas (la primera y la segunda capa tienen 4096 canales y el final es una capa softmax que realiza una clasificación de 1000 vías). Figura 3.13: Arquitectura VGGNet 5. ResNet : ganador del primer premio del ISLVRC en el año 2015. ResNet cuenta con 152 capas, una cantidad muy superior a las capas de las redes anteriormente mencionadas. Fue desarrollada por Kaimin He, Xiangyu Zhang, Shaoqing Ren y Jian Sun, todos ellos investigadores de Microsoft. El objetivo de este tipo de red es formar una red que aprende funciones residuales con referencias en las entradas de CAPÍTULO 3. REDES DE NEURONAS CONVOLUCIONALES (CNN) 31 4.2. EJEMPLO PRÁCTICO I 4.1.1.9. layer_flatten() Sirve para acoplar una entrada dada, sin afectar al tamaño del lote. 4.2. Ejemplo práctico I En este ejemplo se tratará de aplicar las redes de neuronas convolucionales para realizar una clasificación. Se utilizará el conjunto de datos dataset_imbd , que contiene 25 . 000 críticas de películas desde IMBD etiquetadas según despierten un sentimiento positivo o negativo. Las críticas han sido preprocesadas y cada crítica está codificada como una secuencia de índices de palabras (enteros). Por conveniencia, las palabras se clasifican según la frecuencia general en el conjunto de datos, por ejemplo, el entero “3” codifica la tercera palabra más frecuente en los datos. Definimos parámetros. En primer lugar, procedemos a cargar la librería Keras y definir los siguientes parámetros: library(keras) max_features <- 5000 # Número máximo de características maxlen <- 400 # Longitud máxima batch_size <- 32 # Tamaño del batch embedding_dims <- 50 # Tamaño de embedding filters <- 250 # Número de filtros kernel_size <- 3# Tamaño del núcelo hidden_dims <- 250 #Dimensión capas ocultas epochs <- 2# Número de epochs batch_size es dividir el número de ejemplos que se cargan en memoria para que no tarde demasiado tiempo en actualizar los pesos. Si epochs toma el valor 2, es para que itere 2 veces sobre el conjunto de entrenamiento. Preparación de los datos. # Keras carga todos los datos en una lista con la siguiente estructura: # List of 2 # $ train:List of 2 # ..$ x:List of 25000 # .. .. [list output truncated] # .. ..- attr(*, "dim")= int 25000 # ..$ y: num [1:25000(1d)] 1 0 0 1 0 0 1 0 1 0 ... # $ test :List of 2 # ..$ x:List of 25000 # .. .. [list output truncated] 38 CAPÍTULO 4. APLICACIONES DE CNNS EN R 4.2. EJEMPLO PRÁCTICO I # .. ..- attr(*, "dim")= int 25000 # ..$ y: num [1:25000(1d)] 1 1 1 1 1 0 0 0 1 1 ... # # Los datos x incluyen secuencias enteras, cada entero es una palabra. # Los datos y incluyen un conjunto de etiquetas enteras (0 o 1) # El argumento num_words indica que solamente las palabras max_fetures más # frecuentes se convertirán a números enteros. imdb <- dataset_imdb(num_words = max_features) # Rellenar la secuencia para que tengan la misma longitud # Esto convierte al conjunto de datos en una matriz, cada línea es una # crítica y cada columna una palabra en la secuencia # Rellena las secuencias con 0 a la izquierda x_train <- imdb$train$x%>% pad_sequences(maxlen = maxlen) x_test <- imdb$test$x%>% pad_sequences(maxlen = maxlen) Definición del modelo. #Inicialización del modelo. model <- keras_model_sequential() model %>% # Se comienza con una capa de incrustación eficiente que busca los # índices de vocabulario en las dimensiones embedded_dims layer_embedding(max_features, embedding_dims, input_length = maxlen) %>% layer_dropout(0.2)%>% # Adición de una convolución unidimensional, la cual aprenderá filtros. # Filtros de grupo de palabras de tamaño filter_length layer_conv_1d( filters, kernel_size, padding = "valid",activation = "relu",strides = 1 )%>% # Aplicación de max-pooling layer_global_max_pooling_1d() %>% # Adición de una capa oculta layer_dense(hidden_dims) %>% # Aplicación de 20% en la capa dropout. layer_dropout(0.2)%>% layer_activation("relu")%>% # Proyectar en una sola unidad de la capa de salida y aplicar CAPÍTULO 4. APLICACIONES DE CNNS EN R 39 4.2. EJEMPLO PRÁCTICO I # la función sigmoide layer_dense(1)%>% layer_activation("sigmoid") # Compilación del modelo model %>% compile( loss = "binary_crossentropy", optimizer = "adam", metrics = "accuracy" ) Entrenamiento. Utilizamos la función fit() para entrenar el modelo durante 2etapas usando conjuntos de 32 datos, definidos anteriormente como epochs ybatch_size respectivamente. history <- model %>% fit( x_train, imdb$train$y, batch_size = batch_size, epochs = epochs, validation_data = list(x_test, imdb$test$y) ) El objeto history que devuelve fit() incluye las medidas de pérdida y de precisión, que además, se pueden representar gráficamente: plot(history) loss accuracy 1 2 0.25 0.30 0.35 0.40 0.800 0.825 0.850 0.875 0.900 epoch data training validation 40 CAPÍTULO 4. APLICACIONES DE CNNS EN R 4.3. EJEMPLO PRÁCTICO II 4.3. Ejemplo práctico II El conjunto de datos MNIST contiene pequeñas imágenes en escala de grises de 28 × 28 píxeles de dígitos escritos a mano que han sido clasificados por humanos. Dicho conjunto de datos se encuentra disponible dentro de la propia librería Keras para su uso. Importación de los datos mnist <- dataset_mnist() Preparación de los datos El conjunto de datos ya viene dividido en conjuntos de entrenamiento y test, cada uno de ellos con un conjunto de variables características (las imágenes) y una variable objetivo. x_train <- mnist$train$x y_train <- mnist$train$y x_test <- mnist$test$x y_test <- mnist$test$y Las dimensiones del conjunto de características (las imágenes) de entrenamiento se dan a continuación. dim(x_train) ## [1] 60000 28 28 Es decir, se tienen 60000 imágenes en escala de grises, cada una de ellas con un tamaño de 28 ×28 píxeles. Vamos a asignar estos valores a continuación. img_filas <- 28 img_columnas <- 28 Estas imágenes no tienen la forma correcta como tensores, ya que falta el número de canales. Esto se puede corregir tanto para los conjuntos de entrenamiento como para los conjuntos test mediante el uso de la función array_reshape() . También se va a crear la variable input_shape que contenga las correctas dimensiones de las imágenes. CAPÍTULO 4. APLICACIONES DE CNNS EN R 41 4.3. EJEMPLO PRÁCTICO II x_train <- array_reshape(x_train, c(nrow(x_train), img_filas, img_columnas, 1)) x_test <- array_reshape(x_test, c(nrow(x_test), img_filas, img_columnas, 1)) input_shape <- c(img_filas, img_columnas, 1) dim(x_train) ## [1] 60000 28 28 1 Como en todas las redes de neuronas artificiales, los datos deben de normalizarse. Dado que los valores de los píxeles representan la luminosidad en una escala de 0 (negro) hasta 255 (blanco), todos se pueden normalizar dividiendo cada uno de ellos por el valor máximo, es decir, dividir entre 255. x_train <- x_train /255 x_test <- x_test /255 El espacio muestral de la variable objetivo contiene 10 elementos, es decir, hay 10 clases en la variable objetivo. Estas pueden ser codificadas usando la función to_categorical() . num_classes = 10 y_train <- to_categorical(y_train, num_classes) y_test <- to_categorical(y_test, num_classes) Por ejemplo, la imagen 355 del conjunto de entrenamiento se corresponde al número 4. Nótese que se empieza a contar desde el cero. y_train[355,] ## [1] 0 0 0 0 1 0 0 0 0 0 El modelo Se construye la red convolucional cuya primera capa es una capa convolucional de 16 filtros cada uno de ellos de tamaño 3 × 3utilizando la función de activación ReLu y las dimensiones definidas anteriormente como input_shape. 42 CAPÍTULO 4. APLICACIONES DE CNNS EN R 4.3. EJEMPLO PRÁCTICO II A esta capa de convolución, le sigue una capa de agrupación máxima, cuyo tamaño de cuadrícula es 2 × 2que reducirá a la mitad la dimensión de la primera capa. Luego se tiene una capa de abandono en la cual internamente irá dejando el 25 % de las neuronas sin utilizar en el proceso de entrenamiento, lo que nos permite tener una red más robusta para el sobreajuste. Con layer_flatten() lo que se hace es obtener una capa plana con neuronas todas al mismo nivel, en una dimensión en lugar de en tres dimensiones distintas ya que las capas totalmente conectadas a diferencia de las capas convolucionales necesitan tener una capa plana donde no hay dimensiones. De esta forma, se crea una capa totalmente conectada de 10 neuronas. En este caso de nuevo utilizamos dropout=0 . 5para evitar de nuevo la posibilidad de sobreajuste y por último, una capa totalmente conectada con el número de clases indicadas, que serían 10, y con activación softmax para obtener una normalización en la última capa. Creando el modelo model <- keras_model_sequential() %>% layer_conv_2d(filters = 16, kernel_size = c(3,3), activation = 'relu', input_shape = input_shape) %>% layer_max_pooling_2d(pool_size = c(2,2)) %>% layer_dropout(rate = 0.25)%>% layer_flatten() %>% layer_dense(units = 10, activation = 'relu')%>% layer_dropout(rate = 0.5)%>% layer_dense(units = num_classes, activation = 'softmax') Un resumen del modelo muestra que hay 27320 parámetros en dicho modelo, todos ellos entrenables. La primera capa se reduce a 26 × 26, ya no es 28 × 28 pues los filtros son 3 × 3perdiéndose una fila y una columna. Además tenemos 160 parámetros, ya que al tener 16 filtros 3 × 3, se tendría 16 ·(9 + 1) = 160. Ese 1hace referencia a los sesgos. En la capa de agrupación máxima no hay ningún peso que aprender, al igual que en la capa de abandono y en flatten , por eso en dichas capas se tienen 0parámetros. En flatten se produce el cambio de dimensión con respecto a la capa anterior, obteniéndose 13 ·13 ·16 = 2704. Y por último las capas totalmente conectadas, en la primera de las cuales hay 2704 · 10 + 10 = 27050, donde el 10 que aparece sumado son los sesgos. De nuevo hay otra capa de abandono con 0parámetros y por último una capa totalmente conectada con 10 ·10 + 10 = 110 parámetros. CAPÍTULO 4. APLICACIONES DE CNNS EN R 43 4.3. EJEMPLO PRÁCTICO II model %>% summary() ## Model: "sequential_1" ## ___________________________________________________________________________ ## Layer (type) Output Shape Param # ## =========================================================================== ## conv2d (Conv2D) (None, 26, 26, 16) 160 ## ___________________________________________________________________________ ## max_pooling2d (MaxPooling2D) (None, 13, 13, 16) 0 ## ___________________________________________________________________________ ## dropout_2 (Dropout) (None, 13, 13, 16) 0 ## ___________________________________________________________________________ ## flatten (Flatten) (None, 2704) 0 ## ___________________________________________________________________________ ## dense_2 (Dense) (None, 10) 27050 ## ___________________________________________________________________________ ## dropout_3 (Dropout) (None, 10) 0 ## ___________________________________________________________________________ ## dense_3 (Dense) (None, 10) 110 ## =========================================================================== ## Total params: 27,320 ## Trainable params: 27,320 ## Non-trainable params: 0 ## ___________________________________________________________________________ Compilando La entropía cruzada categórica sirve como función de pérdida. Adadelta optimiza el descenso del gradiente y la precisión sirve como métrica. model %>% compile( loss = loss_categorical_crossentropy, optimizer = optimizer_adadelta(), metrics = c('accuracy') ) Entrenamiento Utilizamos la función fit() para entrenar el modelo durante 12 etapas usando conjuntos de 128 imágenes, que permitirá a los tensores ajustarse a la memoria de unidad de procesamiento de gráficos del ordenador con el que se esté trabajando. El modelo se ejecutará con una división de validación que se establece en 0.2. 44 CAPÍTULO 4. APLICACIONES DE CNNS EN R 4.3. EJEMPLO PRÁCTICO II batch_size <- 128 epochs <- 12 # Entrenar el modelo history <- model %>% fit( x_train, y_train, batch_size = batch_size, epochs = epochs, validation_split = 0.2 ) El objeto history que devuelve fit() incluye las medidas de pérdida y de precisión, que además, se pueden representar gráficamente: plot(history) loss accuracy 2 4 6 8 10 12 0.5 1.0 0.5 0.6 0.7 0.8 0.9 epoch data training validation A medida que el modelo entrena, se muestran las medidas de pérdida y precisión. Este modelo comienza con una precisión de un 50 % en el conjunto de entrenamiento, y al final de las 12 etapas termina con algo más de un 65% de precisión. Si miramos la precisión en el conjunto de validación, es mayor al 90 % en todas las etapas acabando con una precisión mayor al 95%. Es decir, en este gráfico tenemos mejores resultados con el conjunto de validación que sobre el conjunto de entrenamiento, lo cual descarta el sobreajuste. CAPÍTULO 4. APLICACIONES DE CNNS EN R 45 4.3. EJEMPLO PRÁCTICO II Evaluación de la precisión El modelo puede ser evaluado usando el conjunto test. score <- model %>% evaluate(x_test, y_test) cat('Test loss: ', score$loss, "\n") ## Test loss: 0.1932831 cat('Test accuracy: ', score$acc, "\n") ## Test accuracy: 0.9656 Se tiene una precisión del 96.5600014% en el conjunto test, la cual es bastante alta. Predicciones. Cuando el modelo ha sido entrenado, puede ser utilizado para predecir sobre un nuevo conjunto de datos. Se generan predicciones sobre nuevos datos: predicciones=model %>% predict_classes(x_test) De esta forma, el modelo ha predecido la clase para cada una de las imágenes en el conjunto de prueba. Las primeras 10 predicciones serían: predicciones[1:10] ## [1] 7 2 1 0 4 1 4 9 5 9 Las predicciones toman valores desde 0hasta 9, y devuelven aquel valor que el modelo considera más probable. Esto es, la primera predicción devuelve 7, por lo que el modelo considera que esa primera imagen hace referencia al número 7, el cual considera el más probable entre las 10 posibles clases de salida. La octava predicción devuelve el valor 9, es decir, el modelo considera que la octava imagen del conjunto se corresponde con un 9. 46 CAPÍTULO 4. APLICACIONES DE CNNS EN R Bibliografía [1] Allaire, J., Xie, Y., McPherson, J., Luraschi, J., Ushey, K., Atkins, A., Wickham, H., Cheng, J., Chang, W. and Iannone, R. 2019. Rmarkdown: Dynamic documents for r. [2] Anderson, D. and McNeill, G. 1992. Artificial neural networks technology. Kaman Sciences Corporation. 258, 6 (1992), 1–83. [3] Dahl, D.B., Scott, D., Roosen, C., Magnusson, A. and Swinton, J. 2019. Xtable: Export tables to latex or html. [4] DI STEFANO, L., TONIONI, A. and GALEONE, P. Rete neurale convoluzionale per classificazione di immagini e localizzazione di oggetti. [5] II, T. Beysolow 2017. Introduction to Deep Learning Using R. Apress. [6] J. J.Allaire, F.C. with Deep Learning with R. Manning. [7] Luque-Calvo, P.L. 2017. Escribir un Trabajo Fin de Estudios con R Markdown. Disponible en http://destio.us.es/calvo. [8] Maiani, F. 2016. Applicazioni e limiti della classificazione di immagini con reti neurali convoluzionali in dispositivi mobili. (2016). [9] Marsland, S. 2014. Machine Learning: An Algorithmic Perspective. Chapman; Hall/CRC. [10] Matich, D.J. 2001. Redes Neuronales: Conceptos básicos y aplicaciones. Universidad Tecnológica Nacional, México. (2001). [11] Nacelle, A. Redes Neuronales Artificiales. Universidad de la República, Uruguay. [12] Nielsen, M.A. 2015. Neural Networks and Deep Learning. Dtermination Press. [13] R Core Team 2016. R: A Language and Environment for Statistical computing. R Foundation for Statistical Computing. [14] RStudio Team 2015. RStudio: Integrated Development Environment for R. RStudio, Inc. [15] Wickham, H. 2019. Stringr: Simple, consistent wrappers for common string operations. [16] Wickham, H., Chang, W., Henry, L., Pedersen, T.L., Takahashi, K., Wilke, C., Woo, K. and Yutani, H. 2019. Ggplot2: Create elegant data visualisations using the grammar of graphics. [17] Wickham, H., François, R., Henry, L. and Müller, K. 2020. Dplyr: A grammar of data manipulation. [18] Xie, Y. 2019. Knitr: A general-purpose package for dynamic report generation in r. 47