• No se han encontrado resultados

Predicción de la radiación mediante el uso de una red neuronal recurrente

N/A
N/A
Protected

Academic year: 2020

Share "Predicción de la radiación mediante el uso de una red neuronal recurrente"

Copied!
109
0
0

Texto completo

(1)Universidad Politécnica de Madrid Escuela Técnica Superior de Ingenieros Informáticos Grado en Ingeniería Informática. Trabajo Fin de Grado Predicción de la Radiación mediante el Uso de una Red Neuronal Recurrente. Autor: Pablo Heras Aranzana Tutor(a): María Luisa Córdoba Cabeza. Madrid, Julio 2020.

(2) Este Trabajo Fin de Grado se ha depositado en la ETSI Informáticos de la Universidad Politécnica de Madrid para su defensa.. Trabajo Fin de Grado Grado en Ingeniería Informática Título: Predicción de la Radiación mediante el Uso de una Red Neuronal Recurrente Julio 2020. Autor: Pablo Heras Aranzana Tutor: María Luisa Córdoba Cabeza DATSI ETSI Informáticos Universidad Politécnica de Madrid.

(3) Gracias Marisa y Dopico, por ofrecerme este trabajo y resolver todas las dudas surgidas al realizarlo. Gracias también, Iker, por facilitarme los datos y toda la ayuda que he necesitado. Gracias a todos los compañeros con los que he compartido horas de clase, proyecto de inicio, trabajos, cafetería, liga interna o simplemente una cerveza. En especial a Espa, Pereda, Javi, Christian, Dani y Valentín. Gracias Carlos, Laynez y Paco porque sois mi segunda familia. Gracias a Pablo, Jorge y Miguel por formar parte de mi vida durante estos años. Gracias, tía, tío, Raúl, Jesús y Lucía por ser la mejor familia que podría desear. Y sobre todo gracias a mis padres, por seguir confiando en mi pase lo que pase.. Sin vosotros no habría llegado hasta aquí. Incluso a vosotros, Chus y Antolín, de alguna manera me habéis ayudado a madurar a pesar de todo. Gracias..

(4)

(5) RESUMEN. RESUMEN En la actualidad, el cambio climático es un hecho constatable que nos obliga a cambiar la manera de relacionarnos con el medio ambiente. En este proceso de transición ecológica en el que nos encontramos, las energías renovables juegan un papel fundamental. Sin embargo, este tipo de energías a menudo no se obtienen de manera constante, sino que fluctúan debido a causas meteorológicas y a los ciclos estacionales. Las tecnologías de almacenamiento de energía aún no están lo suficientemente desarrolladas para ser una solución a gran escala, por lo que las redes eléctricas deben adaptarse y estar preparadas para recibir cantidades variables de electricidad. En el caso particular de la energía solar, es fundamental poder predecir la cantidad de radiación que una placa fotovoltaica va a recibir para así calcular la cantidad de energía que será volcada a la red eléctrica. De esta forma, la red estará preparada para asumirla. En esta área, las redes neuronales han probado su capacidad de predicción dada una gran cantidad de datos. En concreto las redes recurrentes son de especial utilidad para casos en los que los datos tienen una relación temporal [1]. La tecnología IoT (Internet de las cosas) aplicado a los paneles solares nos permiten obtener una gran cantidad de datos de radiación para entrenar estas redes. Así el objetivo de este trabajo es explorar la capacidad de distintos tipos de redes neuronales recurrentes para predecir datos de radiación solar en un conjunto de placas fotovoltaicas para distintos horizontes de predicción.. i.

(6) ABSTRACT. ABSTRACT Nowadays, climate change is an observable fact which force us to change the way we interact with the environment. Renewable energy sources play a central role in the ecologic transition process we are in. However, in most cases these types of energy are not obtained in a constant way. They fluctuate due to meteorological causes and seasonal cycles. Electricity storing technologies are not yet fully developed to be a large-scale solution to the problem. Because of this, the energy grids must be adapted and prepared to receive variable amounts of electricity. In the case of photovoltaic panels, it is fundamental to be able to predict the amount of solar radiation the panel will receive, in order to calculate the amount of electricity that will be supplied to the grid. Thus, the grid would be ready to handle it. In this field, neural networks have proved their prediction power given huge sets of data. Recurrent neural networks (RNN) specially come in handy in cases where the data presents time correlations. Internet of Things (IoT) technology applied to solar panels now offers us huge amounts radiation data to train these networks. Therefore, the goal of this project is to explore the capacity of several types of recurrent neural networks to predict radiation measurements in a set of solar panels for different forecast horizons.. ii.

(7) TABLA DE CONTENIDOS. TABLA DE CONTENIDOS 1.. Introducción ......................................................................................... 1. 2.. Estado del arte ...................................................................................... 3. 2.1.. Redes neuronales ....................................................................................... 3. 2.1.1.. Historia de las redes neuronales .......................................................... 3. 2.1.2.. Funcionamiento de las redes neuronales ............................................. 4. 2.1.3.. Función de activación .......................................................................... 5. 2.1.3.1. Función de paso ............................................................................... 6 2.1.3.2. Función sigmoide ............................................................................. 6 2.1.3.3. Tanh ................................................................................................ 7 2.1.3.4. ReLU y Leaky ReLU........................................................................... 7 2.1.4.. Función de coste .................................................................................. 8. 2.1.5.. Optimizador ......................................................................................... 8. 2.1.5.1. Gradient Descent (GD) ....................................................................... 9 2.1.5.2. Gradient Descent con momentum ...................................................... 9 2.1.5.3. RMSprop ........................................................................................ 10 2.1.5.4. Adam.............................................................................................. 10 2.1.5.5. Adadelta ......................................................................................... 10 2.1.6.. Hiperparámetros ................................................................................ 11. 2.1.6.1. Learning rate .................................................................................. 11 2.1.6.2. Tamaño de mini-batch .................................................................... 11 2.1.6.3. Arquitectura de la red .................................................................... 12 2.1.6.4. Número de épocas .......................................................................... 12 2.1.7.. Tipos de redes neuronales ................................................................. 12. 2.1.7.1. Redes neuronales convolucionales.................................................. 13 2.1.7.2. Redes neuronales recurrentes ........................................................ 14 2.1.7.3. Redes neuronales híbridas ............................................................. 17 2.2.. Trabajos previos ....................................................................................... 17. 2.2.1.. Caso 1 ............................................................................................... 17. 2.2.2.. Caso 2 ............................................................................................... 18. 3.. Herramientas ...................................................................................... 19. 3.1.. Hardware ................................................................................................. 19. 3.2.. Software ................................................................................................... 19. 3.2.1.. Tensorflow ......................................................................................... 20. 3.2.2.. Keras ................................................................................................. 20. iii.

(8) TABLA DE CONTENIDOS. 3.2.3.. Numpy ............................................................................................... 20. 3.2.4.. Vitables ............................................................................................. 21. 4.. Desarrollo de las soluciones adoptadas ................................................ 23. 4.1.. Estudio de los datos de entrada ............................................................... 23. 4.2.. Preprocesamiento de los datos ................................................................. 26. 4.3.. Desarrollo y aplicación de las redes neuronales ....................................... 28. 4.3.1.. Horizonte de predicción de 1 hora ...................................................... 29. 4.3.2.. Horizonte de predicción de 3 horas .................................................... 59. 4.3.3.. Horizonte de predicción de 6 horas .................................................... 73. 4.4.. Comparación de resultados ...................................................................... 83. 5.. Conclusiones ....................................................................................... 89. 6.. Líneas futuras ..................................................................................... 91. 6.1.. Redes híbridas: LSTM/ConvoNet .............................................................. 91. 6.2.. Escalar a un gran número de sensores .................................................... 91. 6.3.. Transfer Learning ..................................................................................... 92. 6.4.. Paralelización y uso de sistemas HPC....................................................... 93. ANEXO: Índice de tablas y figuras ................................................................ 95 Bibliografía................................................................................................... 99. iv.

(9) CAPITULO 1: Introducción. CAPÍTULO 1 1. Introducción La energía solar fotovoltaica está teniendo una creciente importancia y se prevé que aumente sustancialmente en los próximos años. La energía solar fotovoltaica ronda el 4% del mix energético español, lo que equivale a 1003 GWh [2]. Este dato adquiere mayor relevancia teniendo en cuenta que la instalación de este tipo de energías ha aumentado un 500% entre 2016 y 2018 [3]. Es decir, el ritmo de crecimiento es cada vez mayor. Sin embargo, la producción de energía solar no es constante y presenta variaciones a lo largo del día y también variaciones estacionales. Así, las mediciones diarias tomadas en intervalos cortos de tiempo serán similares, pero la entrada de nubes puede producir bajadas repentinas en la cantidad de radiación recibida. La red eléctrica debe poder adaptarse a estas variaciones de energía y ajustarlas a la demanda, puesto que no puede almacenar la energía sobrante. El objetivo de este trabajo es el estudio y desarrollo de varios tipos de redes neuronales para medir su capacidad de predecir la radiación solar que recibirán una serie de sensores situados en la isla de Oahu, Hawái. Se analizará su rendimiento para predecir datos en distintos horizontes temporales: 1, 3 y 6 horas. Dadas las correlaciones temporales mencionadas anteriormente, centraremos el trabajo en el uso de redes neuronales recurrentes. Se experimentará con distintos hiperparámetros: ratios de aprendizaje, funciones de activación, número de épocas y tamaños de batch. Así como con distintas ventanas de datos. Posteriormente, compararemos los resultados en términos de evolución del coste de entrenamiento, velocidad de aprendizaje y precisión en la predicción. Para el desarrollo de las redes neuronales se empleará el framework de código abierto Keras, escrito en Python. Se trata de un entorno de alto nivel que permite abstraer al usuario de la implementación más técnica de las redes neuronales. De esta forma permite un desarrollo más rápido y centrado en la experimentación con gran cantidad de arquitecturas y diseños de red. Estudiaremos tres tipos de redes neuronales: 1. Red neuronal Fully-Connected: comenzaremos con redes neuronales simples donde cada nodo de una capa está conectado con todos los nodos de capas contiguas. Se experimentará con distintos números de capas ocultas, así como con el número de neuronas de dichas capas. 2. Red neuronal recurrente (RNN): posteriormente probaremos con una RNN con el fin de aprovechar las correlaciones temporales de los datos para producir mejores predicciones. A diferencia de las anteriores, estas redes tienen en cuenta las mediciones previas a la hora de realizar la predicción. Sin embargo, este tipo de redes no es capaz de tener en cuenta las correlaciones temporales amplias como, por ejemplo, las que se producen entre mediciones de varias semanas o meses.. 1.

(10) CAPITULO 1: Introducción. 3. Red Long Short-Term Memory (LSTM): este tipo de redes son un subconjunto de las RNN. Tienen la particularidad de que en sus nodos son capaces de mantener en su estado interno resultados de predicciones anteriores que pueden mantener relación con las actuales. De esta forma, las redes LSTM han demostrado una mayor capacidad de predicción cuando los datos presentan patrones temporales amplios. Es por ello por lo que su análisis resulta muy interesante en este caso de estudio y se espera que ofrezca buenos resultados.. 2.

(11) CAPITULO 2: Estado del arte. CAPÍTULO 2 2. Estado del arte 2.1. Redes neuronales Las redes neuronales son un paradigma computacional inspirado en el cerebro humano y basado en el aprendizaje supervisado. En este apartado se hace un repaso de la historia e importancia de las redes neuronales. Se introducen también los tipos de redes más utilizados y su funcionamiento.. 2.1.1.. Historia de las redes neuronales. Los primeros modelos teóricos que buscan replicar de alguna manera el funcionamiento neuronal del cerebro se remontan a la década de 1940 [4] con los trabajos de Warren S. McCulloch y Walter H. Pitts. En un ensayo de 1943 [5], ya introdujeron algunos de los conceptos básicos que aún se aplican hoy en día en inteligencia artificial y los adaptaron al campo del cálculo y la lógica. Así definieron la neurona como un interruptor que, recibiendo unos valores de entrada, se dispara si alcanza un valor umbral de activación. Demostraron que una red simple de estas neuronas puede calcular prácticamente cualquier función lógica o aritmética. Mencionaron también un uso práctico, aplicando la red a un problema de reconocimiento de patrones espaciales. Durante los años 50 el desarrollo de este campo se aceleró con la construcción de los primeros supercomputadores que implementan las redes neuronales. Entre ellas destacó en “Mark I perceptron” desarrollado por Frank Rosenblatt, Charles Wightman y su equipo en el MIT. Este sistema era capaz de reconocer caracteres numéricos mediante un sensor de imágenes de 20 x 20 píxeles [4]. En 1960 se desarrolló la primera red neuronal implementada a gran escala. Se trataba de una red de una sola capa y gozó de gran éxito comercial. Se encontraba en la mayoría de los teléfonos analógicos de la época actuando como filtro adaptativo de ruido. En 1969 Marvin Minsky and Seymour Papert [6] descubrieron serias limitaciones en las redes neuronales para resolver algunos problemas importantes. Así demostraron que las redes existentes no podían predecir correctamente la salida de una puerta lógica XOR. Esta publicación causó un cierto desánimo en las capacidades de las redes neuronales, lo que provocó a su vez una caída en la financiación de este tipo de tecnologías. Durante la década de 1970 y primera mitad de 1980, debido a la falta de recursos mencionada antes, la investigación y uso de las redes neuronales decayó. En 1986 [7] se descubrió que el problema del XOR podía resolverse mediante redes neuronales con varias capas ocultas. Sin embargo, no se encontró una manera eficiente de actualizar los parámetros de las neuronas en estas redes profundas, pues suponía un problema NP-completo [8]. Pero esto cambió con los estudios sobre el “backpropagation method” que produjeron un renacimiento de este campo. En las décadas posteriores, se produjo un crecimiento exponencial en las investigaciones y aplicaciones de las redes neuronales. Destacan la aparición de las. 3.

(12) CAPITULO 2: Estado del arte. redes neuronales convolucionales y redes recurrentes. Con el desarrollo del hardware y en concreto las GPUs (“Graphics Processing Unit”) a principios del siglo XXI se han reducido considerablemente los tiempos necesarios para entrenar las redes, facilitando así su eficiencia y ampliando su ámbito de aplicación. Actualmente pueden encontrarse en trabajos de predicción de series temporales, clasificación de imágenes, reconocimiento de lenguaje natural y algoritmos de recomendación en todo tipo de aplicaciones.. 2.1.2.. Funcionamiento de las redes neuronales. Las redes neuronales se componen de nodos o neuronas conectadas que disgregan el problema a tratar en partes más pequeñas que interactúan entre sí para inferir un resultado. A diferencia de otros modelos computacionales, en los cuales un algoritmo indica a la máquina cómo resolver el problema, las redes neuronales solo necesitan un conjunto de datos de prueba para entrenar al sistema y unos datos de testeo para comprobar la eficiencia en el cálculo de las soluciones. Este paradigma se conoce como “aprendizaje supervisado”. Así, tras una serie de iteraciones de entrenamiento, las redes neuronales son capaces de ofrecer una gran eficacia en la resolución de problemas con respecto a los modelos estadísticos empleados en tiempos anteriores. Las redes neuronales han demostrado ser muy potentes en problemas tales como: x x x. Clasificación de imágenes. Reconocimiento de voz y lenguaje natural. Predicción de secuencias temporales de datos.. El funcionamiento de las redes neuronales se basa en una serie de capas de neuronas. Cada neurona recibe una serie de n datos de entrada, xn, procedente de capas anteriores (excepto en la primera capa donde se reciben los datos de entrada). Cada uno de esos valores tiene asociado un peso wn. Tras ponderar los datos de entrada con los pesos, la neurona suma un sesgo b (bias) y aplica a ese resultado una función de activación f que da el valor de salida de la neurona. El cálculo de la salida de la neurona corresponde con la siguiente fórmula: output =. ∑. +. Existen distintos tipos de neuronas en función de la función de activación que emplean para calcular el valor de salida. Estas funciones se detallarán más adelante. Una vez se calculados los valores de salida de las neuronas de la última capa, se calcula cuánto difiere este valor con respecto al resultado esperado o valor de test. Para ello se aplica una función de coste. Este valor de coste es la variable que se quiere reducir al máximo durante las sucesivas iteraciones de entrenamiento. Este proceso de cálculo del valor de salida y la función de coste se conoce como “propagación hacia adelante” (forward propagation). Ilustración 1. Esquema básico de una neurona. 4.

(13) CAPITULO 2: Estado del arte. Una vez obtenida la salida, es necesario modificar los parámetros de las neuronas (pesos y sesgos) para reducir al máximo la función de coste. Para ello se realiza el cálculo de las derivadas de la función de coste, también llamados gradientes, en función de estos parámetros desde la capa final hacia la primera. Con ese dato de la derivada se modifican los parámetros de sesgo y pesos de la neurona en función de un “tasa de aprendizaje”. La tasa de aprendizaje es un valor asignado por el usuario que indica cuánta influencia tendrá esta modificación en los pesos. Este proceso se conoce como “propagación hacia atrás” (backward propagation) y existen distintos algoritmos de optimización que lo implementan, como por ejemplo Gradient Descent, Adadelta, RMSprop o Adam. Para alimentar a la red normalmente elegidas aleatoriamente en conjuntos realiza el proceso de entrenamiento disponibles. Cuando esto ocurre se entrenamiento o epoch.. se agrupan m muestras de datos de entrada llamados batches. Con cada uno de ellos se de la red hasta agotar todas las entradas dice que se ha completado una época de. Una vez se ha completado el número de épocas deseado concluye el proceso de entrenamiento. Los parámetros internos de la red, pesos y sesgos ya están actualizados y la red puede comenzar a predecir datos. Este es el funcionamiento de las redes más sencillas Fully-Connected en los que cada neurona de una capa está relacionada con todas las neuronas de capas contiguas, como se muestra en la figura 2. Esta en concreto cuenta con dos capas ocultas además de las capas de entrada y salida. Con esta breve explicación Ilustración 2. Esquema de una red neuronal FullyConnected entendemos en esencia cómo se entrena una red neuronal para que sea capaz de realizar predicciones de series temporales o clasificaciones de imágenes. En los siguientes apartados se detallan los principales conceptos y parámetros mencionados.. 2.1.3.. Función de activación. Como hemos visto en el apartado anterior, la función de activación es aquella que recibe el sumatorio de las entradas ponderadas de la neurona y produce un valor de salida. Es la característica principal de las neuronas, tanto es así que a menudo damos a la neurona el nombre de su función de activación. Cada función tiene ventajas y desventajas dependiendo del escenario del problema y no existe una teoría sólida que nos diga cuál debemos usar. Es por eso por lo que durante el diseño y entrenamiento de una red neuronal es importante adaptar la elección de la función de activación al tipo de problema y a la naturaleza de los datos. A continuación, se explican algunas de las más importantes:. 5.

(14) CAPITULO 2: Estado del arte. 2.1.3.1. Función de paso Como hemos visto en el apartado 2.1.1, el primer modelo de neurona propuesto fue el “perceptrón”. Este modelo empleó como función de activación la llamada “función de paso” o “step function”. Se trata de una función de salida binaria. Evalúa si la suma ponderada de las entradas supera o no un valor umbral. Si esto ocurre devolverá 1 como valor de salida, en caso contrario devolverá 0: output =. Ilustración 3. Gráfica de la función de paso. 0 1. ∑ ∑. ≤ umbral > umbral. La función permite clasificar los datos de entrada en dos grupos: deseado o no deseado, sí o no. Esta característica trae consigo importantes limitaciones. Así, esta función no permite la clasificación multigrupo y está desaconsejada para la mayor parte de escenarios y en especial para las series temporales.. 2.1.3.2. Función sigmoide Como solución a las limitaciones que presentaba el perceptrón y su función de paso surge la sigmoide. Este tipo de neurona permite dar como salida números reales entre 0 y 1, con una transición mucho más suave. Dado el sumatorio ponderado de las entradas, que llamaremos z, la fórmula de la función sigmoide es la siguiente: σ(z) ≡. Ilustración 4. Grafica de la función sigmoide. 1 1+. Además de la posibilidad de poder realizar clasificaciones de más de dos elementos, esta función de activación facilita en gran medida el entrenamiento de la red. Esto se debe a que una pequeña modificación de los pesos o el sesgo produce un cambio en la salida de la neurona. Esto contrasta con la función anterior donde en la mayoría de los casos no producía un cambio en el output, a excepción de que el cambio hiciera que el valor cayera de un lado u otro del valor umbral. La función sigmoide es ampliamente utilizada ya que aporta buenos resultados en casos diversos. Destaca su uso en calificaciones binarias y en aquellos problemas donde los valores de salida se encuentren en el intervalo [0,1]. [9] Sin embargo, tiene algunas desventajas como el hecho de que las salidas no estén centradas en el cero o el que se produce cuando los valores se las entradas son muy grandes o muy pequeños, que da lugar a que la red pueda aprender muy lentamente. Este problema se conoce como saturación o vanishing gradient [10].. 6.

(15) CAPITULO 2: Estado del arte. 2.1.3.3. Tanh La función tanh tiene muchas similitudes con la función sigmoide como su pendiente suave entre su valor máximo y mínimo, así como el problema del vanishing gradient. Su forma es también muy parecida y sigue la siguiente fórmula: − + Ilustración 5. Gráfica de la función tanh La ventaja principal que tiene respecto a la anterior es que está centrada en el 0, con valores en un intervalo [-1,1]. Esto le permite obtener mejores resultados con valores tanto fuertemente negativos como fuertemente positivos. tanh(z) ≡. 2.1.3.4. ReLU y Leaky ReLU Además de las funciones sigmoide y tanh, caracterizadas por su forma curvilínea, existe otra familia de funciones llamadas rectificadores (rectifiers). Se caracteriza por reproducir en la salida el mismo valor de la entrada para valores mayores que cero. La función más representativa es la función ReLU (rectified linear unit) representada por la fórmula: relu(z) ≡. Ilustración 6. Gráfica función ReLU. (0, ). Este tipo de neuronas son ampliamente utilizadas en problemas de reconocimiento de imágenes [11] y como capa de salida en problemas en los que los datos corresponden con series temporales: precio de la vivienda, mercado de valores, etc. [9] Su principal ventaja frente a las funciones sigmoide y tanh es que carecen del problema de saturación para valores altos, ya que la función ReLU no tiene máximo y por lo tanto el gradiente no se reduce. Sin embargo, para valores negativos de entrada la salida es constante en 0 por lo que el gradiente también, impidiendo el aprendizaje. Para solucionar este problema existe la función Leaky ReLU. Tiene la particularidad de que para valores menores que 0 no es constante en 0, sino que tiene una pequeña pendiente que hace que el gradiente no sea nulo para valores negativos. En este intervalo presenta una pequeña pendiente positiva según la siguiente fórmula, donde p es un factor pequeño como por ejemplo 0.01: lrelu(z) ≡. (. , ). 7. Ilustración 7. Gráfica de la función Leaky ReLU.

(16) CAPITULO 2: Estado del arte. 2.1.4.. Función de coste. Como vimos anteriormente la función de coste nos da una medida de la cercanía de la medida predicha por la red y el valor real. Durante la fase de entrenamiento el objetivo es reducir este valor al máximo en cada iteración. Para ello, durante el proceso de propagación hacia atrás es necesario calcular las derivadas parciales del coste con respecto a los pesos y sesgos. Estas derivadas o gradiente marcarán cuánto se modifican los pesos y sesgos. Puesto que estamos buscando reducir el peso al mínimo necesitamos funciones de coste que tengan un único mínimo. Si esto no sucede, el algoritmo de optimización puede alcanzar un mínimo relativo y quedar estancado ahí, de manera que no se alcanza el resultado óptimo que minimiza el coste. Es por ello por lo que suelen utilizarse funciones cuadráticas como el Mean Squared error (MSE). Para poder calcular estas derivadas y poder realizar la propagación hacia atrás, la función de coste debe cumplir dos condiciones [1]: x. La primera es que la función pueda ser escrita en términos de la media de los costes de cada uno de los ejemplos de entrenamiento Cx: = ∑. x. La segunda es que el coste pueda ser escrito como función de las salidas de la red.. A continuación, se muestran dos de las funciones de coste más utilizadas: Mean Squared Error (MSE) Cross-entropy cost. =. =−. 1. [. 1. ( ( )− ). ( ( )) + (1 − ) (1 − ( ))]. Donde y es el valor esperado y f(x) la salida de la red para los datos de entrada x. Se ve claramente que cumplen las dos condiciones.. 2.1.5.. Optimizador. En el apartado anterior hemos visto qué es una función de coste y qué condiciones deben cumplir para poder entrenar nuestra red. Sabemos que el objetivo del entrenamiento es reducir este valor al máximo, pero ahora veremos cómo modificamos los pesos y sesgos de las neuronas para reducir este valor en cada iteración. El optimizador o algoritmo de optimización es el que marca este proceso, es decir, la propagación hacia atrás. Los algoritmos con los que trabajaremos son los siguientes:. 8.

(17) CAPITULO 2: Estado del arte. 2.1.5.1. Gradient Descent (GD) Este algoritmo busca el mínimo de la función de coste avanzando en la dirección en la que más varía en ese punto. Dicho de otra manera, calcula la dirección donde la pendiente hacia el coste mínimo es mayor, como se ve en la figura. De esta forma calcula qué variaciones de los distintos parámetros (pesos y sesgos) reducen en mayor medida el coste. Estas variaciones es lo que conocemos como gradiente y representamos con la notación ∇C.. Ilustración 8. Grafica tridimensional de la función de coste... Posteriormente modifica los pesos y sesgos ‘v’ mediante la siguiente fórmula [1]: ′=. − ∇. Donde η es el learning rate o tasa de aprendizaje, un parámetro elegido por el usuario que indica cuándo deben modificarse los parámetros en función del gradiente. El problema con este algoritmo de optimización es que puede divergir mucho en su búsqueda del mínimo e incluso quedarse atascado en mínimos locales. Esto puede causar que el entrenamiento sea muy lento e impedirnos utilizar ratios de aprendizaje más altas.. 2.1.5.2. Gradient Descent con momentum Una de las modificaciones del descenso de gradiente que nos permite acelerar la búsqueda del mínimo es el momento [9] (en inglés, momentum). En GD se actualizaban los parámetros únicamente con el gradiente calculado en esa iteración según la fórmula que vimos en el apartado anterior. En el caso del momento, se tienen en cuenta también la media ponderada decreciente (exponentially weighted average) de los N gradientes anteriores. De esta forma las oscilaciones en una determinada dirección se cancelan en gran medida, agilizando el proceso de aprendizaje de la red neuronal.. Ilustración 9. Convergencia del algoritmo GD con (rojo) y sin (azul) momentum.. La fórmula es la siguiente: =. − (1 − ) ′=. −. Donde Vdvt es la media ponderada de los gradientes en el instante ‘t’ y dvt la derivada en dicho instante. β es un parámetro que indica cuántos instantes N anteriores se tienen en cuenta para realizar la media y que puede afinarse durante el diseño de la red.. 9.

(18) CAPITULO 2: Estado del arte. 2.1.5.3. RMSprop Esta modificación del descenso de gradiente es similar al uso del momentum. Al igual que el anterior calcula la media ponderada decreciente pero esa vez del cuadrado de los gradientes: =. − (1 − ′=. −. ). +. √. Donde Sdvt es la media ponderada de los cuadrados de los gradientes en el instante ‘t’ y dvt el gradiente en dicho instante. β2 es un parámetro que indica cuántos instantes N anteriores se tienen en cuenta para realizar la media, de manera similar al GD con momentum. ϵ es un valor pequeño que sumado al denominador impide que éste sea 0, para dar mayor estabilidad matemática a la fórmula.. 2.1.5.4. Adam Adam (Adaptive Moment estimation [9]) es un algoritmo que surge de la unión de RMSprop y GD con momentum. De esta forma, calcula por un lado la media ponderada decreciente de los gradientes anteriores y por otro la misma media, pero de los cuadrados de los gradientes: =. − (1 − ). =. − (1 −. ). Posteriormente actualiza los parámetros con ambos valores: ′=. −. +. √. Este es uno de los algoritmos más utilizados por la rápida convergencia que ofrece en la búsqueda del mínimo de la función de coste y por tanto la rapidez del entrenamiento.. 2.1.5.5. Adadelta Este algoritmo forma parte de la familia de optimizadores adaptativos. Estos optimizadores, a diferencia del algoritmo anterior, modifican la tasa de aprendizaje para cada iteración y para cada parámetro en función de los gradientes anteriores. Así, permiten al usuario despreocuparse de elegir la ratio que mejor se adapta al problema. Adadelta en particular, en lugar de almacenar todo el gradiente anterior, guarda una media decreciente de los gradientes anteriores que va actualizado. La variación que hace de cada parámetro viene definida por la siguiente fórmula [12]: ∆ Donde. es:. =. =−. ∆. + + − (1 −. 10. ).

(19) CAPITULO 2: Estado del arte. 2.1.6.. Hiperparámetros. Para que una red neuronal dé buenos resultados en un escenario concreto primero debe realizarse un proceso de afinamiento (en inglés tuning) de los distintos parámetros que la definen. Estos parámetros (no confundir con los pesos y sesgos que son modificados por el algoritmo de optimización) se conocen como hiperparámetros. El problema es que no existe un único método estándar para elegir los mejores hiperparámetros. En ocasiones este proceso consiste en probar distintos conjuntos de valores y observar cuáles ofrecen los mejores rendimientos. Se trata de un proceso altamente iterativo de experimentación con distintos valores hasta conseguir el mejor resultado posible. Sin embargo, el número de parámetros y de posibles combinaciones es enorme, lo que a priori pude hacer inabarcable la búsqueda. Por suerte, sí existen algunas heurísticas y métodos aproximados que nos permiten centrar la búsqueda y reducir el tiempo de diseño de la red. Los principales hiperparámetros con los que trataremos en este trabajo se explican a continuación. No todos ellos deberán tenerse en cuenta en todos los casos. Algunos de estos parámetros solo deben ajustarse si se emplean determinadas técnicas para mejorar el proceso de optimización y aprendizaje (como el momentum o batch normalization).. 2.1.6.1. Learning rate Como hemos visto en el apartado de Optimizadores, la tasa de aprendizaje ‘η’ es el valor que indica cuánto afectan los gradientes a la actualización de los pesos y sesgos. En otras palabras, es una medida de cómo de rápido queremos que aprenda la red. Sin embargo, el afinamiento de este parámetro no es trivial. Un valor más alto no necesariamente implica mayor velocidad de aprendizaje. Este hiperparámetro debe ajustarse en función del algoritmo de optimización. Si el algoritmo se acerca hacia el mínimo de la función de coste, pero con grandes oscilaciones, una tasa de aprendizaje alta solo aumentará dichas oscilaciones haciendo que el aprendizaje sea más lento. Por otro lado, si el algoritmo no diverge en exceso podemos aumentar su valor para alcanzar antes el mínimo de la función de coste y reducir el tiempo de entrenamiento. Este es el parámetro que más se debe tener en cuenta a la hora de afinar nuestra red neuronal [13]. Normalmente se toman valores entre 0.1 y 0.0001 en una escala logarítmica hasta ir acotando el rango de valores óptimo que agilice el entrenamiento de la red.. 2.1.6.2. Tamaño de mini-batch Un mini-batch es el subconjunto de los datos de entrada con el que alimentamos a la red en cada etapa de aprendizaje. El tamaño de éste influye en gran medida en la velocidad de entrenamiento y en la capacidad de obtener resultados parciales antes de que concluya. Asumiendo que el tamaño total del conjunto de datos de entrada es M, existen tres escenarios dependiendo del tamaño m de cada mini-batch [14]: x. m=1: En este caso cada dato de entrada se introduce individualmente en la red. Esta variedad de GD se conoce como Stochastic Gradient Descent (SGD). Nos permite que en cada entrenamiento la red trate cada dato de manera independiente sin tener en cuenta otros datos. Sin embargo, tiene la. 11.

(20) CAPITULO 2: Estado del arte. desventaja de que desaprovecha las posibilidades de vectorización del computador por lo que el procesamiento es mucho más ineficiente. Esto da lugar a un tiempo de entrenamiento excesivo. También aumenta las oscilaciones en la búsqueda del mínimo ya que cada dato lleva al algoritmo en una dirección distinta, lo que obliga a reducir la tasa de aprendizaje. x. m=M: También conocido como Batch Gradient Descent, este caso se caracteriza por introducir todo el conjunto de dato de una sola vez en la red. Este caso puede ser razonable si nuestro conjunto de datos no es muy grande (≤ 2000 datos, por ejemplo). En conjuntos de datos mayores este método provoca que cada iteración sea demasiado larga y costosa computacionalmente. También nos obliga a esperar hasta el final de la iteración para obtener información sobre cómo ha ido el entrenamiento.. x. 1<m<M: Este es el escenario ideal. Donde se aprovechan las opciones de vectorización que nos ofrecen los procesadores actuales y además podemos recibir información relevante en cada iteración del entrenamiento. Se recomienda escoger un tamaño de mini-batch ‘m’ que sea potencia de dos (64, 128, 256…) y que no exceda la memoria de la CPU/GPU.. 2.1.6.3. Arquitectura de la red La arquitectura de la red puede influir en gran medida en su capacidad de obtener buenos resultados reduciendo el coste. Un mayor número de capas suele ayudar a obtener mayor precisión. Aunque se corre el riesgo de caer en el problema del Vanishing/Exploding Gradient si se trata de una red muy profunda. Aumentar el número de neuronas es un buen acercamiento, pero puede aumentar la carga computacional. Por otro lado, en función de la naturaleza de los datos de entrada y del uso o no de métodos de preprocesamiento de datos como la estandarización, deben escogerse distintas funciones de activación para las neuronas.. 2.1.6.4. Número de épocas Una época corresponde con una iteración completa de entrenamiento sobre todo el conjunto de datos de entrada. Por cada iteración conseguimos que la red se ajuste cada vez mejor a los datos de entrenamiento. Sin embargo, esto puede dar lugar a un sobreajuste o overfitting. Esto se produce cuando la red se ha adaptado tanto a los datos de entrenamiento que es incapaz de generalizar esos resultados a otros conjuntos de datos como el de validación. Por ello debe ajustarse este valor para obtener unos buenos resultados reduciendo el coste tanto en los datos de entrenamiento como en los de validación y test.. 2.1.7.. Tipos de redes neuronales. En función de su topología y de las características de sus neuronas, las redes neuronales pueden clasificarse en varios tipos. Despendiendo de la naturaleza del problema y de los datos, un determinado tipo de red puede resultar más apropiado que otro. En este apartado se describen los tipos de redes neuronales que tienen mayor importancia para el caso de estudio de este trabajo.. 12.

(21) CAPITULO 2: Estado del arte. 2.1.7.1. Redes neuronales convolucionales Este tipo de redes neuronales son especialmente apropiadas en escenarios donde los datos de entrada tienen una clara relación espacial. Por ello, suelen emplearse en problemas de clasificación de imágenes. Cuentan con varios tipos de capas en las que se realizan distintas transformaciones de los datos originales hasta llegar a la clasificación final. Estos tipos de capas son: Capa convolucional: Estas capas son el núcleo de las redes convolucionales y las de mayor carga computacional. La capa convolucional aplica una serie de filtros sobre los datos de entrada. El filtro normalmente es una matriz de tamaño pequeño (5x5x3, por ejemplo) que va recorriendo el largo y ancho de la imagen de entrada produciendo como salida una matriz de menor dimensión, como se muestra en la Figura 1. En el caso del reconocimiento de imágenes, estas capas detectan patrones sencillos en la imagen (rectas, curvas, esquinas, etc.) [15]. Ilustración 10. Capa de entrada y resultado después de la convolución.. Capa de pooling: La función de esta capa es reducir progresivamente la dimensión de la matriz. Con ello se consigue reducir el número de parámetros a entrenar y con ello la carga computacional. Normalmente se suele alternar entre capas convolucionales y de pooling. También permite controlar el nivel de sobreajuste. El método de pooling más utilizado es el “max-pooling”. Consiste en tomar regiones de los datos y tomar solo el valor máximo de las mismas para generar la matriz resultado, como se muestra en la figura 2.. 13.

(22) CAPITULO 2: Estado del arte. Ilustración 11. Ejemplo de max-pooling.. Capa Fully-Connected: Para problemas de clasificación, en la capa final se utiliza una capa Fully-Connected con tantas neuronas como clasificaciones. Cada una de estas neuronas está conectada con todas las neuronas de la capa anterior, y produce un valor con la probabilidad de que la imagen inicial pertenezca a cada una de las clases en las que se pretende clasificar.. Ilustración 12. Arquitectura típica de una red neuronal convolucional. 2.1.7.2. Redes neuronales recurrentes Los datos de radiación solar que se abordan en este trabajo tienen un fuerte componente temporal. La medición de radiación solar en un determinado instante de tiempo normalmente es similar a la recogida en los periodos inmediatamente anteriores. También experimenta variaciones cíclicas de mayor duración por las estaciones y otra de menor periodo por las condiciones climatológicas. Por todo ello, tiene sentido que nuestra red neuronal tenga en cuenta este comportamiento. Las redes neuronales convencionales tratan cada nuevo paquete de datos de entrada como independiente de los demás. Esto no parece razonable para nuestro caso de estudio, donde podríamos aprovechar la información de etapas anteriores para realizar una predicción más precisa. Las redes neuronales recurrentes, a diferencia de las convencionales, tienen en cuenta el valor de salida de la anterior iteración en el cálculo de la nueva salida. O lo que es lo mismo, tienen en cuenta las mediciones. 14.

(23) CAPITULO 2: Estado del arte. anteriores para predecir la actual. En este proyecto se estudiarán dos tipos de redes neuronales recurrentes: Red neuronal recurrente estándar o RNN: Este tipo de red neuronal aplica el uso de datos previos en el cálculo del valor de salida. De esta forma en el cálculo de la función de salida para cada neurona, además del peso y el sesgo se le aplica también este valor previo, como se puede ver en la figura. Estas redes funcionan bien cuando la información que se busca tener en cuenta en la etapa actual es información reciente, es decir, calculada unas pocas etapas atrás. Sin embargo, en algunos problemas es necesario un mayor contexto y poder contar con información. En estos casos en los que la distancia entre la información relevante pasada y la etapa actual es grande, las RNN no son capaces de conectar esta información. Puesto que nuestro problema implica trabajar con datos con relaciones temporales que pueden estar bastante separadas en el tiempo, debemos tener en cuenta otro tipo de red neuronal.. Ilustración 13. Esquema de una RNN. Long Short Term Memory networks o LSTM: Las LSTM son un tipo especial de redes neuronales capaces de manejar dependencias temporales mayores. Cada nodo de estas redes mantiene un estado que puede modificarse en función de los datos de entrada. Este estado mantiene información sobre iteraciones anteriores de la red e influye en el valor de salida del nodo. La celda de estado es el componente clave de las redes LSTM y corresponde con la línea horizontal superior de la figura. Mediante una serie de puertas, la información de la celda de estado puede modificarse opcionalmente. Estas puertas se componen de una función sigmoide junto con una operación de multiplicación elemento a elemento. Una LSTM tiene tres de estas puertas [16].. 15.

(24) CAPITULO 2: Estado del arte. Ilustración 14. Esquema de un nodo de LSTM. El funcionamiento paso a paso de estas celdas es el siguiente: La primera puerta, a la que llamaremos “puerta de olvido”, decide qué información queremos eliminar de la celda de estado. En función de los valores de ht-1 (salida de la anterior etapa) y xt (entrada de la etapa actual) se devuelve un valor entre 0 y 1 que indica a la celda de estado qué valores debe olvidar y mantener respectivamente como se observa en la figura. Posteriormente se estudia qué nueva información se va a almacenar en la celda se estado. Primero, la segunda puerta, a la que llamaremos “puerta de entrada”, decide qué valores se actualizarán. A continuación, aplicando la función tanh a los valores de entrada creamos un nuevo vector de candidatos a almacenarse en la celda de estado, como se muestra en la figura.. Ilustración 15. Puerta de olvido. Ilustración 16. Puerta de entrada. Ahora ya se puede actualizar la celda de estado con los nuevos valores. Primero se olvidan los datos antes seleccionados. Posteriormente se hace el producto de los dos vectores de valores candidatos para después sumarse a la celda de estado. Ilustración 17. Actualización de la celda de estado. 16.

(25) CAPITULO 2: Estado del arte. Finalmente se decide el valor de salida. Para ello se aplica una última puerta para indicar qué valores de la celda de estado se volcarán en la salida. Después se aplica la función tanh para acotar los valores entre -1 y 1. Posteriormente se multiplican estos dos resultados y se envía el producto como salida. Ilustración 18. Cálculo de la salida. 2.1.7.3. Redes neuronales híbridas Algunos problemas, como la predicción de series temporales en mediciones cercanas espacialmente, presentan tanto una correlación espacial como temporal de los datos de entrada. Resulta lógico pensar en un acercamiento al problema que incluya redes neuronales que aprovechen ambas relaciones: las RNN y en particular las LSTM son potentes a la hora de descubrir patrones en secuencias de datos, mientras que las CNN son más útiles a la hora de extraer relaciones locales entre los datos crudos de partida reforzando las relaciones entre las neuronas. De esta forma, en los últimos años se han desarrollado implementaciones que combinan redes convolucionales y LSTM (CLSTM). La topología empleada en este tipo de redes híbridas realiza primero un procesamiento de los datos de series temporales mediante varias capas de redes convolucionales. Después alimenta con el resultado obtenido a la red LSTM y obtiene así la predicción. Otro acercamiento es el realizado por la red neuronal TreNet [17] desarrollada para hallar tendencias en series temporales. Esta red consta de dos capas convolucionales apiladas y una red LSTM con 600 celdas de memoria. Para combinar las salidas de ambas redes implementa unas “capas de fusión”. El resultado de esta capa se vuelca sobre una capa de salida donde se proporciona la predicción de las tendencias.. 2.2. Trabajos previos Por su relevancia y similitudes con el problema a resolver, se han investigado algunos trabajos realizados en este campo. Se trata de dos aplicaciones de redes neuronales recurrentes sobre series temporales de mediciones:. 2.2.1.. Caso 1. Estudio del caso de uso de red neuronal convolucional LSTM para la predicción de la temperatura del mar: Este estudio buscaba construir una red neuronal híbrida que permitiera predecir la temperatura media diaria del océano en distintas localizaciones alrededor del mundo [18]. Con estas predicciones las autoridades podrían predecir la afluencia de turistas en las playas e incluso la aparición de eventos climáticos extremos. Este problema presenta varias similitudes con el caso de las mediciones de radiación solar. En ambos casos los datos presentan una correlación espacial, puesto que los. 17.

(26) CAPITULO 2: Estado del arte. datos de temperaturas en una determinada posición tienden a ser similares a los de posiciones cercanas. También se da una correlación temporal entre los datos, ya que existen relaciones entre mediciones contiguas y también pueden presentar tendencias a lo largo de semanas o meses. Esta segunda característica es relevante para el ámbito de este trabajo de fin de grado. En el caso de estudio, para aprovechar esta correlación temporal se aplica una red LSTM y así poder predecir las tendencias de la temperatura a lo largo de distintos periodos de tiempo. Así este estudio demuestra que al tener en cuenta estas dependencias se obtiene un poder de predicción mucho mayor que otros modelos. En este proyecto la implementación se realizó con el conjunto de herramientas de Deep Learning para Java “DL4J” a diferencia de nuestro caso que se realiza en Keras.. 2.2.2.. Caso 2. Estudio del caso de uso de una red neuronal LSTM escalable para la predicción a corto plazo del consumo de electricidad: El objetivo de este proyecto fue la creación de una red neuronal recurrente LSTM para la predicción de consumos eléctricos individuales de un conjunto de viviendas. Además de los datos de consumo se utilizarían también datos meteorológicos y de calendario para predecir dichos consumos. Una de sus metas principales fue poder entrenar la red neuronal eficientemente mediante solo un subconjunto de los datos, pero permitiéndola ser escalable para poder gestionar series temporales de gran tamaño. Este trabajo es relevante para el caso que estamos estudiando por el carácter de los datos. Es muy similar al nuestro, puesto que se trata de mediciones de consumo eléctrico con una alta frecuencia de muestreo. De esta forma, los datos también muestran una clara correlación temporal y de ahí el uso de una red LSTM. Al igual que en nuestro proyecto, la implementación se ha realizado utilizando Keras para una implementación más sencilla. De esta manera pudieron entrenar hasta 19 LSTM, una para cada conjunto de datos en que estructuraron las mediciones. El resultado de este trabajo fue un modelo que permite realizar predicciones hasta un 20% más precisas que otros modelos. Entre las desventajas de este modelo, según describe el estudio [19], destaca la complejidad que entrañan las redes neuronales a la hora de realizar su diseño (elección de función de coste, función de activación, algoritmo de optimización, etc.) y de comprender su funcionamiento.. 18.

(27) CAPITULO 3: Herramientas. CAPÍTULO 3 3. Herramientas En este capítulo se detallan las principales características de los componentes, tanto software como hardware, que se han empleado en el desarrollo del proyecto. Se explicarán las especificaciones técnicas más representativas en relación con los objetivos previstos para la realización del trabajo.. 3.1. Hardware Para la realización de este proyecto, tanto para el entrenamiento de las redes neuronales como para el desarrollo del código se ha utilizado un ordenador portátil MSI PS42 8RB con procesador Intel Core i7 8th Gen 8550U, 16GB de memoria RAM y tarjeta gráfica NVIDIA GeForce MX150. Estas especificaciones se incluyen para poner en contexto la duración de los entrenamientos de las distintas redes, así como para permitir la reproducibilidad de las pruebas realizadas.. Ilustración 19. Portátil MSI utilizado. 3.2. Software El trabajo se ha realizado sobre un equipo con Sistema Operativo Windows 10 Home [20]. Para la gestión de entornos de desarrollo y paquetes software en Python se ha empleado Anaconda [21]. Anaconda es una distribución libre y abierta de los lenguajes Python y R que permite crear distintos contextos de desarrollo aislados. Esto habilita al usuario a tener distintos entornos para cada área de trabajo (data science, programación web, etc.) evitando colisiones entre distintas versiones de un mismo paquete software. Anaconda permite una gestión e instalación de paquetes sencilla y potente, muy similar a la de los sistemas operativos UNIX. Como IDE se ha utilizado Spyder, la herramienta de desarrollo por defecto de Anaconda para Python. Spyder cuenta con todas las funcionalidades necesarias para el desarrollo del código proyecto: consola incorporada, función de depuración de código, gestión de varios proyectos y visualización inmediata de gráficos e imágenes.. Ilustración 20. Logo de Anaconda. 19.

(28) CAPITULO 3: Herramientas. 3.2.1.. Tensorflow. Tesnsorflow [22] es una biblioteca y motor de aprendizaje automático desarrollado por Google Brain que posteriormente fue publicada bajo licencia de código abierto Apache 2.0. Entre sus características principales destaca la posibilidad de correr en múltiples GPU y CPU. También consolida el uso de APIs de alto nivel como Keras, la cual se explica en el siguiente apartado. Desde 2019 está disponible la versión 2.0 que se centra en la facilidad de uso y la simplicidad. En este proyecto se ha empleado la versión de TensorFlow para CPU puesto que la versión para GPU ofrecía un peor rendimiento.. Ilustración 21. Logo de Tensorflow. 3.2.2.. Keras. Keras [23] es una API de alto nivel centrada en la construcción de redes neuronales. Está desarrollada en Python y es capaz de ejecutarse sobre Tensorflow como backend. La principal ventaja de esta biblioteca es que permite un desarrollo rápido facilitando la experimentación y la investigación. En este proyecto se utiliza la versión Keras 2.3.1 que ofrece las siguientes funcionalidades: ƒ ƒ ƒ ƒ. ƒ ƒ. Permite la implementación tanto de redes neuronales recurrentes como convolucionales. Puede ejecutarse tanto en CPU como GPU. Diseño centrado en el usuario. Modularidad. Permite configurar y acoplar distintos modelos de redes neuronales sin apenas restricciones. Permite combinar distintas funciones de coste, optimizaciones, inicializaciones y funciones de activación. Desarrollado exclusivamente en Python. Lo cual da lugar a un código más compacto y fácil de depurar. Cuenta con multitud de funciones o Callbacks que permiten obtener información interna durante el proceso de entrenamiento y realizan acciones en consecuencia. Algunos ejemplos son: o Early Stopping o Logs o Obtener el historial del entrenamiento o Programador de tasa de aprendizaje Ilustración 22. Logo de Keras. 3.2.3.. Numpy. Numpy [24] (Numerical Python) es el principal paquete de Python para el cálculo matemático y científico. Una de sus utilidades más potentes es el uso de vectores indexados multidimensionales que permiten operar con conjuntos de datos de manera mucho más eficiente que, por ejemplo, con las listas básicas de Python.. 20.

(29) CAPITULO 3: Herramientas. Destacan también las opciones de broadcasting, como por ejemplo la suma de un vector fila a cada una de las filas de una matriz con el operador suma o las operaciones elemento a elemento. En este trabajo se ha empleado la versión Numpy 1.18.1.. Ilustración 23. Logo de Numpy. 3.2.4.. Vitables. Vitables [25] es un programa desarrollado en Python que ofrece una interfaz gráfica para navegar y editar ficheros en formato HDF5. Los conjuntos de datos con los que trabajaremos están en este formato. Son ficheros de gran tamaño que contienen millones de datos y que de otra forma serían imposibles de gestionar. Algunas de las ventajas que ofrece este tipo de archivos es que tienen una estructura jerárquica, similar a las carpetas y ficheros; gran compresión de los datos que reduce su tamaño en memoria; carga de datos selectiva; posibilidad de incluir metadatos; rápido capacidad de entrada/salida y posibilidad de correr en múltiples plataformas. Vitables utiliza todas estas funcionalidades para facilitar el manejo de estos conjuntos de datos.. Ilustración 24. Logo de Vitables.. 21.

(30)

(31) CAPITULO 4: Desarrollo de las soluciones adoptadas.. CAPÍTULO 4 4. Desarrollo de las soluciones adoptadas En este capítulo se abordan los distintos pasos que se han tomado para el diseño, desarrollo y estudio de las redes neuronales de este trabajo. En primer lugar, se realiza un estudio de los datos de radiación solar que utilizaremos para realizar las predicciones. Posteriormente se detalla el proceso de diseño de tres arquitecturas de red y el afinamiento de sus correspondientes hiperparámetros. Por último, se comparan los resultados obtenidos en cada una de ellas para distintas ventanas de predicción.. 4.1. Estudio de los datos de entrada El conjunto de datos de radiación solar que empleamos procede de la red de mediciones solares de la isla de Oahu, en el archipiélago de Hawái (EEUU) [26] proporcionados por el “National Renewable Energy Laboratory” (NREL). La red consta de 17 sensores que miden la irradiancia en W/m 2. El identificador de cada sensor es: ap01, ap03, ap04, ap05, ap06, ap07, dh01, dh02, dh03, dh04, dh05, dh06, dh07, dh08, dh09, dh10, dh11. Se muestra en la siguiente imagen tomada por satélite su localización espacial.. Ilustración 25. Situación de los 17 sensores solares de Oahu.. Los datos corresponden al periodo comprendido entre el 18 de marzo de 2010 y el 31 de octubre de 2011. Los sensores toman datos de irradiación cada segundo entre las 5:00 y la 20:00 HST. De esta forma toman 54000 medidas por día. En ocasiones. 23.

(32) CAPITULO 4: Desarrollo de las soluciones adoptadas.. los sensores pueden tomar medidas erróneas en forma de valores no numéricos (NaN) que son convertidos a -99999. Por ello debemos preprocesar el conjunto de datos para inferir estos datos ausentes.. Ilustración 26. Gráfica del conjunto completo de mediciones de radiación.. Ilustración 27. Gráfica de medición de radiación para los primeros cuatro días. 24.

(33) CAPITULO 4: Desarrollo de las soluciones adoptadas.. Ilustración 28. Gráfica de radiación del 18/03/2010. En la primera imagen se representan todos los valores del conjunto de datos. Consta de valores cuyo rango oscila entre 0 y 1500 W/m2. En la primera imagen podemos observar el patrón anual que sigue la radiación solar, aumentando de media hacia los meses de verano y reduciéndose en invierno. En la segunda vemos las mediciones tomadas por el sensor ‘ap01’ durante los días 18 al 21 de marzo de 2010. En ella se pueden observar los ciclos diarios de día y noche, así como repentinas fluctuaciones causadas por el paso de nubes. Estas variaciones pueden verse con mayor claridad en la tercera imagen. El uso de redes recurrentes y en especial de redes LSTM nos permitirá predecir con mayor exactitud este tipo de patrones tanto diarios como estacionales, ya que sus celdas de memoria pueden recordar características relevantes de mediciones anteriores. Para los horizontes de predicción más lejanos necesitamos una mayor granularidad en las mediciones que nos permita alcanzar ventanas de datos más amplias en el tiempo sin necesidad de aumentar en exceso el tamaño de ventana, ya que daría lugar a entrenamientos excesivamente largos.. 25.

(34) CAPITULO 4: Desarrollo de las soluciones adoptadas.. 4.2. Preprocesamiento de los datos Los datos proporcionados por el NREL están divididos en ficheros comprimidos con los datos de cada mes. Cada uno de ellos contiene un documento CSV con las mediciones de cada día tomadas segundo a segundo. Para poder introducir estos datos a la red es necesario realizar un preprocesamiento de estos. Para este trabajo contamos con dos archivos ya preparados: stand_01m.h5 y filled_01m.h5 que agrupan todas las mediciones de manera jerarquizada por año y mes. En ambos se ha corregido el problema de las entradas con valores erróneos. Así, para cada elemento que sea -99999 (NaN), se intenta corregir con valores anteriores del mismo sensor (hasta 30 segundos). Si esto no es posible, se busca entre sus vecinos (por orden de cercanía) el que tenga un valor válido para ese mismo instante y se copia su valor. También se han descartado los datos del sensor ap02 porque sus datos son distintos y están tomados a intervalos de 3 segundos. El archivo filled_01m.h5 contiene datos de todos los sensores con una granularidad de 1 minuto. Para ello se ha realizado la media de los datos en intervalos de un minuto. Además de la corrección de los datos erróneos con los datos interpolados. El archivo stand_01m.h5 parte del anterior con la particularidad de que se han estandarizado sus datos. De esta forma a cada dato se le ha aplicado la siguiente fórmula: =. ( ) /. −. ( ). Donde mean(x) es la media del conjunto de datos y std(x) su desviación típica. También se dispone de dos conjuntos adicionales con mayor granularidad: y filled_15m.h5. Estos datos se han estructurado de la misma manera que en los dos primeros conjuntos. La única diferencia es que la granularidad de los datos es de 15 minutos. Para ello se ha calculado la media de los datos originales en intervalos de 15 minutos.. stand_15m.h5. La preparación de los cuatro archivos con los datos preparados stand_01m.h5, filled_01m.h5, stand_15m.h5 y filled_15m.h5 ha sido realizada por Ignacio Iker Prado Rujas siguiendo la metodología explicada en este apartado. En este trabajo buscamos realizar predicciones sobre las mediciones de un sensor con horizontes de predicción amplios (1, 3 y 6 horas) empleando ventanas de datos de distintos tamaños. En su implementación en Keras, las redes recurrentes reciben una matriz tridimensional donde sus dimensiones son: x x x. Tamaño de batch: Número de ventanas de tiempo se introducen a la red en cada paso. Tamaño de ventana o timesteps: Número de mediciones consecutivas que forman una ventana de datos. Se experimentará con distintos valores. Variables de estudio o features: Número de variables que se tendrán en cuenta para realizar la predicción. En nuestro caso son 17, una por cada sensor.. A diferencia de las redes recurrentes, las redes FC solamente pueden recibir matrices bidimensionales. Para poder alimentar a la red con ventanas de datos generaremos matrices que incluyan mediciones desde ‘t-N’ a ‘t’ siendo ‘t’ el valor la medición en el. 26.

(35) CAPITULO 4: Desarrollo de las soluciones adoptadas.. instante actual y N la amplitud de dicha ventana. Así, si queremos predecir la radiación que incidirá dentro de una hora, buscaremos el valor t+60 en el caso de que los instantes de medición sean de 1 minuto. Teniendo esto en cuenta, para el entrenamiento generamos datos de entrada X en los que en cada fila se muestran N mediciones consecutivas para cada sensor. Así el primer valor desde la izquierda es el valor en el instante actual, su siguiente es t-1 y así hasta llegar a t-N. En cada fila se concatenan las ventanas de valores de los siguientes sensores. En la siguiente tabla se muestra un ejemplo con dos sensores y ventanas de 5 mediciones consecutivas:. t=4 t=5 t=6 t=7 t=8 t=9 t=10. dh6_ t. dh6_ t-1. dh6_ t-2. dh6_ t-3. dh6_ t-4. dh9_ t. dh9_ t-1. dh9_ t-2. dh9_ t-3. dh9_ t-4. dh6_4. dh6_3. dh6_2. dh6_1. dh6_0. dh9_4. dh9_3. dh9_2. dh9_1. dh9_0. dh6_5. dh6_4. dh6_3. dh6_2. dh6_1. dh9_5. dh9_4. dh9_3. dh9_2. dh9_1. dh6_6. dh6_5. dh6_4. dh6_3. dh6_2. dh9_6. dh9_5. dh9_4. dh9_3. dh9_2. dh6_7. dh6_6. dh6_5. dh6_4. dh6_3. dh9_7. dh9_6. dh9_5. dh9_4. dh9_3. dh6_8. dh6_7. dh6_6. dh6_5. dh6_4. dh9_8. dh9_7. dh9_6. dh9_5. dh9_4. dh6_9. dh6_8. dh6_7. dh6_6. dh6_5. dh9_9. dh9_8. dh9_7. dh9_6. dh9_5. dh6_10. dh6_9. dh6_8. dh6_7. dh6_6. dh9_10. dh9_9. dh9_8. dh9_7. dh9_6. Tabla 1. Ejemplo de matriz de entrada X. Los valores reales Y con los que la red comparará los resultados obtenidos en el entrenamiento consisten en una matriz columna. Esta columna contiene los valores de radiación del instante a predecir t+H. A continuación, se muestra cuál sería la matriz con las predicciones para una hora más tarde (H=60) del sensor dh6. dh6_t+60 dh6_64 dh6_65 dh6_66 dh6_67 dh6_68 dh6_69 dh6_70 Tabla 2. Ejemplo de matriz Y. Con este conjunto de datos de entrada se realizará una división en datos de entrenamiento, validación y test. Puesto que vamos a trabajar con datos de granularidad de 1 minuto, el conjunto total de datos es de alrededor de 500.000 de mediciones. Por ello será suficiente asignar un 20% de los datos para validación un 10% para test. Como hemos comentado antes, para los horizontes más lejanos emplearemos los conjuntos con granularidad de 15 min siguiendo esta metodología.. 27.

(36) CAPITULO 4: Desarrollo de las soluciones adoptadas.. 4.3. Desarrollo y aplicación de las redes neuronales En este apartado se detalla el diseño e implementación de los distintos modelos de redes neuronales propuestos para la predicción de los datos de series temporales de radiación solar medida por los sensores. Se desarrollarán 3 tipos de redes neuronales: Fully-Connected, recurrente y LSTM. En primer lugar, se realiza una batería de pruebas para cada horizonte y ventana de datos a estudiar. Posteriormente se realizarán modificaciones de manera iterativa para afinar al máximo sus hiperparámetros. También se experimentará con el número de muestras consecutivas con las que se alimenta a la red. Con ello probaremos su eficacia en casos con distintos horizontes de predicción: 1, 3 y 6 horas. Dentro de cada caso experimentaremos con distintos tamaños de ventanas de datos. Puesto que por cada caso se realizan decenas de pruebas con distintas configuraciones, en este documento se detallan solo aquellas pruebas que hayan obtenido mejores resultados u ofrezcan información relevante. Con esto nos referimos a diferencias de rendimiento entre optimizadores, funciones de activación, etc. Finalmente compararemos los resultados en función de la medida de precisión elegida. También compararemos los resultados con una predicción ingenua (weighted average), para comprobar que las redes no se especializan demasiado en las mediciones inmediatamente anteriores al instante de predicción. La métrica empleada para medir la precisión en la predicción es el error absoluto medio (MAE en sus siglas en inglés). Este valor resulta de la media de las diferencias en valor absoluto entre los valores predichos por la red y los valores reales. Para medir el sobreajuste emplearemos la siguiente fórmula: =. _. −. _ _. × 100. Siendo val_loss y train_loss la media para todas las épocas de entrenamiento del coste de validación y coste de entrenamiento respectivamente. El código desarrollado para automatizar las baterías de pruebas, así como la carga de los datasets de entrenamiento y la generación de las gráficas y resultados se encuentra en el siguiente repositorio de GitHub:. Ilustración 29. Logo de GitHub con enlace al repositorio. https://github.com/Pablosornp/TFG. 28.

(37) CAPITULO 4: Desarrollo de las soluciones adoptadas.. 4.3.1.. Horizonte de predicción de 1 hora. Este caso corresponde con el horizonte de predicción más cercano, en el que predeciremos el valor de radiación que se producirá 60 minutos después de la ventana de medición. Comenzaremos empleando una ventana de 5 mediciones consecutivas para cada sensor. Después probaremos con una ventana de 15 min para ver en qué medida aumenta la capacidad de predicción. VENTANA DE PREDICCIÓN: 5 min Para corroborar que las distintas redes están realizando una buena predicción establecemos un valor referencia o baseline basado en una predicción trivial. Este método calcula como predicción la media ponderada de los valores de la ventana de datos. La gráfica siguiente compara los valores reales y de predicción para las muestras tomadas durante un día. Los valores predichos muestran un retardo de 60 minutos con respecto a los valores reales. Las oscilaciones que presentan los valores reales son menos pronunciadas en los valores predichos ya que cada uno es la media de la ventana de medición.. Ilustración 30. Comparativa entre predicción y los valores reales del caso base. En la gráfica 21 vemos en detalle cómo esas oscilaciones muy acuciadas alrededor del minuto 700 se observan también en los valores predichos, pero con menor intensidad.. Ilustración 31. Detalle de la predicción del baseline. 29.

(38) CAPITULO 4: Desarrollo de las soluciones adoptadas.. La precisión obtenida por este método es de 183.83 W/m2. Es una predicción muy sencilla y poco precisa, pero nos sirve como referencia a la hora de evaluar las siguientes redes neuronales: RED 1 Como primera prueba elegimos una red FC sin capas ocultas. La capa de entrada cuenta con 17 neuronas, una por cada sensor. Puesto que el resultado de la red debe ser un único valor con la predicción la capa de salida solo tiene una neurona. Esta red es uno de los casos más sencillos y nos servirá para probar distintos algoritmos de optimización y funciones de activación. En este caso se utiliza RMSprop, un optimizador avanzado que ofrece mejores prestaciones que Gradient Descent. Como función de activación utilizaremos la clásica sigmoide. Puesto que la función sigmoide trabaja mejor con valores entre 0 y 1, realizaremos un escalado de los valores de entrada para que estén comprendidos en dicho intervalo. Una vez entrenada la red y realizada la predicción, los datos predichos se reescalarán para poder compararlos con los datos reales y obtener el valor final de predicción. Las características e hiperparámetros completos de esta red son: Arquitectura: 17 (D) Æ 1 (D) Learning rate: 1.00E-5 Número de épocas: 200 Tamaño de batch: 300 Función de coste: MSE Función de activación: sigmoide Algoritmo de optimización: RMSprop Tratamiento de datos: Escalado entre 0 y 1. Ilustración 32. Evolución del coste por época de la RED 1. En la imagen vemos cómo el coste del entrenamiento por épocas se reduce de manera muy rápida durante las primeros 25 épocas. Después permanece prácticamente constante durante el resto de las épocas, lo cual puede indicar que no son necesarias tantas épocas de entrenamiento. El descenso se produce de manera suave sin apenas. 30.

(39) CAPITULO 4: Desarrollo de las soluciones adoptadas.. oscilaciones. En la gráfica de detalle vemos que los valores de coste de entrenamiento y validación presentan un sobreajuste importante y que se mantiene constante. La red se está ajustando en exceso al conjunto de valores de entrenamiento.. Ilustración 33. Predicción de la RED 1. Ilustración 34. Detalle de la predicción de la RED 1. En las gráficas de predicción vemos que aún se produce un retardo en los valores de predicción. La red aún basa sus predicciones de manera importante en los valores de la ventana de datos, razón por la que se produce el retardo. En la gráfica de detalle puede observarse cómo las fuertes oscilaciones centrales en los valores reales se traducen en oscilaciones de menor intensidad en los valores predichos con un desfase de 60 minutos. La precisión de predicción final ha superado el valor base por lo que vamos por buen camino. Como hemos comentado anteriormente el sobreajuste de la red es importante. La duración del entrenamiento es de unos 6 minutos. Aunque no es demasiado alta no merece la pena aumentar el número de épocas de entrenamiento ya que como vimos el coste se reduce muy poco a partir de la época 25.. 31.

Referencias

Documento similar

Cedulario se inicia a mediados del siglo XVIL, por sus propias cédulas puede advertirse que no estaba totalmente conquistada la Nueva Gali- cia, ya que a fines del siglo xvn y en

Abstract: This paper reviews the dialogue and controversies between the paratexts of a corpus of collections of short novels –and romances– publi- shed from 1624 to 1637:

por unidad de tiempo (throughput) en estado estacionario de las transiciones.. de una red de Petri

Habiendo organizado un movimiento revolucionario en Valencia a principios de 1929 y persistido en las reuniones conspirativo-constitucionalistas desde entonces —cierto que a aquellas

En nuestra opinión, las cuentas anuales de la Entidad Pública Empresarial Red.es correspondientes al ejercicio 2012 representan en todos los aspectos

La Intervención General de la Administración del Estado, a través de la Oficina Nacional de Auditoría, en uso de las competencias que le atribuye el artículo 168

La Intervención General de la Administración del Estado, a través de la Oficina Nacional de Auditoría, en uso de las competencias que le atribuye el artículo

La campaña ha consistido en la revisión del etiquetado e instrucciones de uso de todos los ter- mómetros digitales comunicados, así como de la documentación técnica adicional de