Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Director:
Ing. Oswaldo Alberto Romero Villalobos, M. Sc.
AGRADECIMIENTOS
”Quiero agradecer a todos mis familiares que fueron un apoyo fundamental durante este
largo camino de esfuerzo, crecimiento y aprendizaje, a la institución por mi formación y
con ella a todos aquellos docentes que dejaron su huella en mi persona. Agradezco su
paciencia y esfuerzo, adicionalmente a mi compañera quien fue la persona que un dı́a soñó
con esto, permitiendo con su trabajo y dedicación que fuera posible”.
Glosario
API:
˙ Es un conjunto de funciones y procedimientos que cumplen una o muchas funciones
con el fin de ser utilizadas por otro software. Sus siglas vienen del inglés Application Pro-
gramming Interface o en español Interfaz de Programación de Aplicaciones.
Asociación:
˙ Relación que se establece entre dos patrones.
Clase:
˙ Son los grupos o conjuntos de patrones que representan un mismo tipo de concepto.
Modelo:
˙ Representación abstracta, conceptual, gráfica (o visual), fı́sica o matemática, de fenóme-
nos, sistemas o procesos a fin de analizarlos, describirlos, explicarlos, simularlos y predecirlos.
Patrones:
˙ Son representaciones abstractas de un objeto en el mundo fı́sico; los patrones exhiben
cierta regularidad en una colección de observaciones conectadas en el tiempo, en el espacio
o en ambas, y pueden servir como modelo.
Pı́xel:
˙ Elemento discreto de una imagen digital, cuyo valor indica la intensidad del color o del
nivel de gris de la imagen en ese punto.
Etiquetas
Nombre otorgado a un conjunto de datos que tiene caracterı́sticas en común.
clasificación
Lista o relación ordenada de cosas o personas con arreglo a un criterio determinado.
predicción
La predicción en el contexto cientı́fico es una declaración precisa de lo que ocurrirá en de-
terminadas condiciones especificadas.
detección de objetos
La detección de objetos es una tecnologı́a de ordenador relacionada con la visión artificial y
el procesamiento de imagen que trata de detectar casos de objetos semánticos de una cierta
clase en vı́deos e imágenes digitales.
Reconocimiento de patrones:
˙ Es la rama cientı́fica que se encarga de emular la habilidad humana de reconocer ob-
jetos, mediante técnicas y métodos que sean implementados en máquinas desarrolladas y
construidas para este fin.
Recuperación:
˙ Proceso mediante el cual dado un patrón conocido como llave se obtiene de una me-
moria asociativa el patrón asociado a dicha llave.
RGB:
v
˙ Por sus siglas en inglés red, green, blue. Es la composición del color en términos de la
intensidad de los colores primarios de la luz.
UPME
˙ Unidad de Planeación Minero Energética.
VSS:
˙ Viviendas sin servicio de energı́a.
vi
Resumen
Abstract
In this thesis project, a Deep Learning application is developed, specifically a tool for de-
tection of homes without utility services on the satellite map of the village of Media Luna,
located in the municipality of Uribia, north of La Guajira. Using a dataset composed of sa-
tellite images of homes in different rural areas of Colombia, obtained through Google Earth,
two different prediction models are developed, a comparison of these models is made with
the aim of minimizing the prediction error. Different technologies were used to solve the
problem, including TensorFlow and Keras for the creation of neural networks, with their
respective configurations. Convolutionary Neural Networks are proposed and a pre-trained
Keras model called VGG16 with a ReLu activation function. The experiments carried out
show that the use of Convolutional Networks and the algorithms presented have an ac-
ceptable and more efficient performance than the traditional methods applied for the VSS
counting in rural areas, with reasonable processing times and speed in the delivery of the
required information.
Keywords: neural networks, convolution, satellite images, deep learning, machine lear-
ning, training networks.
ÍNDICE
Glosario iv
Resumen vi
0.1 Introducción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 2
0.2 Justificación . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 3
0.3 Objetivos . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
0.3.1 Objetivo general . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
0.3.2 Objetivos especı́ficos . . . . . . . . . . . . . . . . . . . . . . . . . . . 4
1 Marco de referencia 5
1.1 Antecedentes . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 5
1.2 Alcances y limitaciones . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 6
1.2.1 Limitantes del algoritmo . . . . . . . . . . . . . . . . . . . . . . . . . 8
1.3 Marco teórico . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 9
1.3.1 Machine Learning o aprendizaje automático . . . . . . . . . . . . . . 9
1.3.2 Deep Learning o Aprendizaje Profundo . . . . . . . . . . . . . . . . . 13
1.3.3 Redes neuronales convolucionales (CNN o ConVet) . . . . . . . . . . 18
1.4 Librerı́as principales . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
1.4.1 TensorFlow . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
1.4.2 Flask . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
1.4.3 Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 57
1.5 Viviendas sin servicio en Colombia (VSS) . . . . . . . . . . . . . . . . . . . . 58
2 Aplicación 60
2.1 Preparación del entorno de trabajo . . . . . . . . . . . . . . . . . . . . . . . 60
2.1.1 Instalación de TensorFlow y Keras . . . . . . . . . . . . . . . . . . . 61
2.2 Conjunto de datos de entrenamiento . . . . . . . . . . . . . . . . . . . . . . 61
2.3 Pre-procesamiento de imágenes . . . . . . . . . . . . . . . . . . . . . . . . . 63
2.4 Entrenamiento de los modelos CNN y VGG16 . . . . . . . . . . . . . . . . . 65
2.4.1 Primer modelo: CNN . . . . . . . . . . . . . . . . . . . . . . . . . . . 66
2.4.2 Segundo modelo: VGG16 . . . . . . . . . . . . . . . . . . . . . . . . . 80
2.5 Predicción . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 85
viii ÍNDICE
4 Aplicación Web 95
4.0.1 Manual de usuario . . . . . . . . . . . . . . . . . . . . . . . . . . . . 95
5 Conclusiones 99
6 Anexos 101
6.1 Inteligencia Artificial . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 101
6.1.1 Imágenes satelitales . . . . . . . . . . . . . . . . . . . . . . . . . . . . 103
6.1.2 Red Neuronal Artificial o RNA . . . . . . . . . . . . . . . . . . . . . 104
6.1.3 Anatomı́a del cerebro . . . . . . . . . . . . . . . . . . . . . . . . . . . 107
6.1.4 Neurona . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 109
6.2 Librerı́as Keras . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.2.1 Models . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 113
6.2.2 Layers . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 115
6.2.3 Preprocessing.image . . . . . . . . . . . . . . . . . . . . . . . . . . . 118
6.2.4 Aplications . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 119
6.3 GPU . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 120
Bibliografı́a 123
Lista de Figuras
1-29.Modelo clasificador de una capa oculta y tres neuronas con función de acti-
vación sigmoid[61] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 34
1-30.Función tanh[61] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 35
1-31.Función tanh[61] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 36
1-32.Modelo clasificados con una capa oculta y una neurona con activación ReLu[61] 37
1-33.Modelo clasificados con una capa oculta y una neurona con activación ReLu[61] 38
1-34.Softmax vs Sigmoid . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 39
1-35.Modelo neuronal de Dropout [53] . . . . . . . . . . . . . . . . . . . . . . . . 39
1-36.Neuronas con Dropout[53] . . . . . . . . . . . . . . . . . . . . . . . . . . . . 40
1-37.Comparación de las operaciones básicas de una red estándar y de Dropout[33] 41
1-38.Aprendizaje supervisado[39] . . . . . . . . . . . . . . . . . . . . . . . . . . . 42
1-39.Aprendizaje no supervisado[39] . . . . . . . . . . . . . . . . . . . . . . . . . 43
1-40.Redes Neuronales Artificiales . . . . . . . . . . . . . . . . . . . . . . . . . . . 43
1-41.Comparación de clasificación supervisada y no supervisada . . . . . . . . . . 44
1-42.Gradiente [65] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 48
1-43.Evolución de los optimizadores . . . . . . . . . . . . . . . . . . . . . . . . . . 49
1-44.Optimizadores de descenso de gradiente[23] . . . . . . . . . . . . . . . . . . . 51
1-45.Etapas de una CNN [30] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 53
1-46.TensorBoard [56] . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 55
1-47.TensorFlow Playground . . . . . . . . . . . . . . . . . . . . . . . . . . . . . 56
0.1. Introducción
En la actualidad, las imágenes satelitales pueden ser usadas para reconocer patrones de in-
terés en un área geográfica que puede utilizarse para realizar calibraciones espaciales en un
satélite, y ası́ dar a conocer el estado de una población,como por ejemplo, la deforestación de
una zona, de la agricultura, entre otros. Las predicciones realizadas por computador pueden
ayudar a automatizar el proceso de toma de decisiones, visualización y extracción de ca-
racterı́sticas complejas en las imágenes satelitales, según un artı́culo publicado en la revista
Indepent, la Fundación Bill & Melinda Gates (EE.UU.) ha realizado un mapa de población
más detallado y actualizado basado en un análisis de edificios en imágenes satelitales [59].
“Las imágenes satelitales podrı́an ser una de las herramientas más poderosas e imparciales
para contarle a la gente lo que está sucediendo en el planeta”, dijo en la cumbre Albert Lin,
cientı́fico investigador de la Universidad de California en San Diego.
En el reconocimiento de patrones de imágenes satelitales son utilizadas diversas técnicas de
Deep Learning, como los algoritmos de reducción, clasificación y regresión, a través de las
cuales se entrenan sistemas generalmente con muestras de imágenes y el sistema extrae las
caracterı́sticas necesarias para modelar el comportamiento de la salida, ante determinado
valor de entrada, de tal forma que permita asistir a empresas y organizaciones en la realiza-
ción de proyectos [24].
En la actualidad, las imágenes satelitales pueden ser usadas para reconocer patrones de in-
terés en un área geográfica, que sirven para realizar calibraciones espaciales en un satélite,
y ası́ dar a conocer el estado de una población, como, por ejemplo, la deforestación de una
zona, de la agricultura, entre otros. Las predicciones realizadas por computador pueden apli-
carse en diferentes áreas de conocimiento y como una herramienta versátil, un antecesor de
conteo poblacional fue ideado por GiveDirectly, una organización sin fines de lucro que iden-
tifica hogares pobres en zonas rurales de Kenia y Uganda para entregar dinero (al menos el
90 % ) de cada dolar donado en manos de las personas que lo necesitan a través del teléfono
móvil. Usando imágenes satélites de estas zonas, obtenidas de Google Maps, se implementó
un algoritmo que identifico los hogares individuales en una imagen, usando la coincidencia
de plantillas y fue capaz de identificar el umbral de color que los clasifico como paja o me-
tal (representando techado de viviendas). En las primeras pruebas, se obtuvieron resultados
bastantes alentadores, pues el algoritmo logro una alta tasa de clasificación, sin embargo,
este dato se vio fuertemente alterado al encontrarse con que los techados de estructuras como
cocina o cobertizos inflaban sus números [11].
Para realizar un conteo de VSS bien fundamentado, es necesario considerar una gran canti-
dad de imágenes satelitales relacionadas. A pesar de que esta cantidad puede obtenerse por
medio de censos, usualmente es imposible para las empresas y organizaciones obtener este
dato con precisión. Es por esto que algunas de las técnicas de Deep Learning tienen la capa-
0.2 Justificación 3
cidad de extraer caracterı́sticas implı́citas en las imágenes satelitales sin que estas hayan sido
previamente clasificadas y armar grupos ubicando las imágenes en diferentes categorı́as, de-
pendiendo de si se muestran signos que reflejen o signifiquen en determinada zona, liberando
de esta pesada carga a las organizaciones a fin. Además existen técnicas capaces de realizar
una extracción de caracterı́sticas automática, dependiendo los patrones de las imágenes, un
ejemplo de estos es el Deep Learning.
El eje de este trabajo investigativo, es la necesidad de contar con una herramienta capaz
de clasificar los techos de VSS, mediante modelos de entrenamiento de redes neuronales
convolucionales ofrecidos por el Deep Learning, que harán uso de imágenes satelitales de
zonas rurales en donde no se tengan servicios de electricidad, como el caso del caserı́o de
Media Luna.
0.2. Justificación
Sin lugar a dudas se está realizando un esfuerzo por parte del gobierno para identificar
las VSS, por medio del levantamiento de información primaria, secundaria, ası́ como la
información reportada por terceros; dicho esfuerzo no ha sido suficiente para cuantificar el
número de VSS de una manera precisa y eficiente, ante este panorama se hace visible la
necesidad de una herramienta tecnológica que contribuya en esta identificación. Para apoyar
con esta labor existen diferentes alternativas, entre estas, Deep Learning (o aprendizaje
profundo) que hace parte de la inteligencia artificial y para este caso se enfoca en la visión
artificial con uso de algoritmos que van a parsear datos, aprender de ellos, identificar patrones
y luego serán capaces de identificar VSS; No obstante, las imágenes satélitales a procesar han
sido previamente seleccionadas y limitadas a una región particular por su claridad, definición
y poca obstrucción de elementos, que faciliten la exploración detallada de las mismas, es este
carácter exploratorio lo que se ajusta perfectamente a Python, un lenguaje de programación
de alto nivel que tiene un gran potencial en este campo, la comunidad de desarrolladores
ha aportado varios paquetes como PyBrain (Schaul et al., 2010) o scikit-learn (Pedregosa
et al., 2011), entre otros, al campo del Deep Learning. De todos ellos, el más conocido tal
vez sea scikit-learn 1 y la librerı́a Theano, que es un proyecto de código abierto desarrollado
principalmente por un grupo de aprendizaje automático de la Universidad Montreal2 . Esta
librerı́a y su integración Numpy, se convirtieron en sus inicios en una de las librerı́as más
usadas para Deep Learning de propósito general.
Este proyecto, es un medio para complementar y aplicar conocimientos relacionados con el
aprendizaje de máquina y procesamiento de imágenes satélitales.
1
Repositorio Github, disponible en: https://github.com/scikit-learn/scikit-learn, última fecha de consulta:
15/06/18
2
Librerı́a Theano disponible en: www.deeplearning.net, última fecha de consulta 15/06/18
4 Lista de Figuras
0.3. Objetivos
0.3.1. Objetivo general
Desarrollar una aplicación basada en Deep Learning que detecte, clasifique y cuente Vivien-
das Sin Servicio de energı́a en imágenes satelitales del caserı́o Media Luna-Uribia-Guajira.
1.1. Antecedentes
En la actualidad los satélites como el GeoEye-1 de Google nos ofrecen una buena perspectiva
de la Tierra por medio de imágenes con alta resolución, lo que facilita ver detalles de lo que
ocurre dentro de ella, por eso se usan cada vez con más frecuencia. En estas imágenes
se aprecian todos sus recursos y el impacto ambiental. El uso de imágenes satelitales ha
demostrado ser una fuente rentable de información relevante para numerosas aplicaciones,
como por ejemplo la planificación urbana, la vigilancia del medio ambiente, para la evaluación
agrı́cola y de cultivos, exploraciones de minas y muchas otras [9].
Cabe destacar que la correcta clasificación de estas imágenes es sumamente importante
como es el caso del estudio de recursos naturales o censos poblacionales, donde es necesaria
la clasificación de diferentes imágenes como flores, agua, vegetación, nubes, suelos o techos
de viviendas.
GiveDirectly es una organización sin fines de lucro que identifica algunos de los hogares más
pobres de las zonas rurales de Kenia y Uganda y les da dinero a través de una transferencia de
teléfono móvil. El objetivo de GiveDirectly es poner al menos el 90 por ciento de cada dólar
donado en manos de las personas que lo necesitan. Gracias a las imágenes satélites de Google
Earth, habı́a imágenes del campo en Kenia y Uganda que podrı́an analizarse para identificar
los tipos de techado utilizados en un pueblo en particular. El algoritmo identificó los hogares
individuales en una imagen usando la coincidencia de plantillas y fue capaz de identificar el
umbral de color que los clasificó como paja o metal. Luego, el algoritmo se aplicó a un pueblo
entero para determinar la proporción de paja en casas techadas de metal. En las primeras
pruebas, el algoritmo logró una alta tasa de clasificación (89.67 %) al estimar el número de
techos de paja vs. techos de hierro. Sin embargo, cuando se intentó usar el algoritmo en el
campo, descubrieron que el nivel de precisión era mucho menor. Con la ayuda del embajador
de datos, Lluis Canet, se descubrió que habı́a una serie de factores externos que hacı́an que
el algoritmo fuera menos preciso. Por un lado, hay muchas estructuras en Kenia y Uganda
que tienen techos de paja, pero no son hogares, como cocinas y cobertizos. Estos edificios
estaban inflando artificialmente el número de hogares con techos de paja, lo que hacı́a que
las áreas se vieran más pobres de lo que eran. [11]
6 1 Marco de referencia
Como se puede observar en la figura 1-1, según la UPME el caserı́o de Media Luna - La
Guajira, cuenta con un total de 179 VSS, aunque este es un dato obtenido por aproximación,
lo que conlleva a una amplia tolerancia en un comparación de resultados. Esto quiere decir
que podemos usar este dato de Sitios Upme para comparar con los resultados que se obtengan
al implementar la herramienta que propone este proyecto.
Valga aclarar que este sector es seleccionado como una muestra pero podrı́a replicarse a lo
largo del territorio nacional o incluso mundial con la salvedad de que la imágenes a procesar
deben ser claras, sin interferencia de nubes, arboles o cualquier otro artefacto que limite la
visibilidad de la imagen y no permita funcionar al software. Por ejemplo, en Uganda una
organización hizo algo parecido, haciendo uso de imágenes satélites y con Deep Learning
encontraron pueblos necesitados, estos datos, muy importantes para organizaciones sin ánimo
de lucro interesadas [62].
2
SitiosUpme, disponible en: http://sig.simec.gov.co/SitiosUpme/, fecha última consulta: 14/06/18
8 1 Marco de referencia
Con el uso de deep learning, en lugar de entrenar el algoritmo, como con el machine learning,
este buscará por sı́ mismo los lı́mites de la imagen e irá analizando las formas de la imagen de
manera jerárquica encontrando los atributos indicados. Por último, decidirá cuáles de estas
propiedades son las necesarias para llegar a la respuesta. De esta forma, puede equivocarse
una vez, pero aprenderá de su error y si le llegan millones de datos, se auto-entrenará para
no fallar. Esto último es una de las desventajas del deep learning, ya que necesita un número
muy alto de datos para que el algoritmo tome decisiones correctas. Sin embargo, como el flujo
de datos del que disponemos cada vez tiende a ser mayor, se convierte en una de sus grandes
ventajas, siempre que le lleguen nuevas situaciones, irá mejorando de forma automática.
La red neuronal convolucional se implementará completamente en Python ya que este so-
bresale sobre cualquier otro lenguaje porque cuenta con soportes para frameworks de Deep
Learning de muy buena calidad. Los más destacados según un ranking realizado por The
Data Incubato en 2017 son: TensorFlow, Theano, Keras, Caffe y MXNet [34].
Esta herramienta se entregará en modo ejecutable, y para el almacenamiento de imágenes
se implementa Google Cloud.
El Machine Learning, también conocido como aprendizaje automático es cada vez más ha-
bitual, las máquinas aprenden por sı́ solas, son capaces de auto programarse aprendiendo de
su propia experiencia combinando datos de entradas y situaciones del mundo real.
En términos generales, los dos sub-grupos principales del Machine Learning son el apren-
dizaje supervisado y el aprendizaje no supervisado. En el aprendizaje supervisado, la
atención se centra en la predicción precisa, mientras que en el aprendizaje no supervisado el
objetivo es encontrar descripciones precisas y compactas de los datos.
Particularmente en el aprendizaje supervisado, uno está interesado en los métodos que funcio-
nan bien con datos que no se habı́an visto anteriormente. Es decir, el método se ‘generalizaá
datos invisibles. En este sentido, se distingue entre los datos que se utilizan para entrenar
un modelo y los datos que se usan para probar el rendimiento del modelo entrenado[7].
En general el Machine Learning es supervisado y esto sucede gracias a que utiliza Deep
Learning. Este funciona por medio de redes neuronales que imitan al cerebro humano
usando hasta miles de millones de “neuronas” o unidades computacionales que se organizan
en capas y cada capa aprende patrones una de la otra por lo que en conjunto se desarrollan
patrones de definiciones, conducta, acciones, colores, objetos o simplemente luce algo.
En el Machine Learning existen al menos siete grandes grupos de algoritmos que corres-
ponden a cuatro clasificaciones[49]:
Como segundo paso, el algoritmo hace un segundo agrupamiento al preguntarse si los datos
pueden compartir atributos comunes entre sı́ para crear una Categorı́a o si forma parte de
un flujo continuo de datos no estructurados. La repuesta implicará una segunda clasifica-
ción:
un análisis por asociación. En la figura 1-16 se muestran dos gráficas con las diferencias entre
los aprendizajes supervisados y no supervisados:
En la figura 1-17 tenemos un diagrama que muestra la red del Perceptrón, el cual usa
aprendizaje supervisado, este actualiza su lı́mite lineal a medida que se agregan más ejemplos
de capacitación.
Estos grandes avances solo han sido posibles gracias a que la computación que se requerı́a
para poderlos llevar a cabo estaba disponible; de esta manera, los investigadores de este
1.3 Marco teórico 15
campo han podido poner a prueba y ampliar viejas ideas, a la vez que han avanzado con
nuevas que requerı́an muchos recursos de computación. Recientemente OpenAI 3 ha publica-
do en su blog un estudio [38] que corrobora precisamente esta visión de la que se ha hablado.
Concretamente, presentan un análisis en el que se confirma que, desde 2012, la cantidad de
computación disponible para generar modelos de inteligencia artificial ha aumentado expo-
nencialmente a la vez que afirman que las mejoras en la capacidad de cálculo han sido un
componente clave del progreso de la inteligencia artificial. En este mismo artı́culo presentan
una gráfica detallada para sintetizar los resultados de su análisis de la figura 1-20.
Las aplicaciones de Deep Learning se utilizan en sectores diferentes como la conducción
autónoma, los dispositivos médicos, el sector aeroespacial y de defensa, automatización in-
dustrial, electrónica y en procesamiento de imágenes para reconocer objetos o patrones.
Figura 1-8: Crecimiento exponencial de la capacidad de computación como motor del Deep
Learning [38]
3
Consulte: https://openai.com/
16 1 Marco de referencia
Para dar a entender mejor, se mostrará un ejemplo tomado del libro de Ian Goodfellow, Deep
Learning[18]. Supongamos que se quiere dibujar una lı́nea que separe los cı́rculos azules de
los triángulos verdes de la imagen de la izquierda:
Si la solución pensada es usar una lı́nea, el autor dice lo siguiente: “. . . representamos algunos
datos usando coordenadas cartesianas, y la tarea es imposible”.Y realmente es imposible si
tenemos en cuenta la definición de una linea: “Una lı́nea es una figura recta unidimensional
sin grosor y que se extiende infinitamente en ambas direcciones”. De Wolfram MathWorld.
Para dar solución al problema anterior hay que encontrar una manera de representar estos
datos de una manera diferente, de alguna manera en la que se pueda trazar una lı́nea recta
para separar los tipos de datos. Esto es algo que las matemáticas nos enseñaron hace cientos
de años. En este caso, lo que se necesita es una transformación de coordenadas, de modo
que pueda graficar o representar estos datos de forma que podamos dibujar esta lı́nea. Si
observamos la transformación de coordenadas polares, tenemos la solución: Y eso es
todo ahora es posible trazar una lı́nea:
1.3 Marco teórico 17
Entonces, en este sencillo ejemplo, se encontró y eligió la transformación para obtener una
mejor representación a mano. Pero si se crea un sistema, un programa que pueda buscar
representaciones diferentes (en este caso, un cambio de coordenadas), y luego encontramos
una forma de calcular el porcentaje de categorı́as que se clasifican correctamente con este
nuevo enfoque, en ese momento estaremos haciendo Machine Learning.
Esto es algo muy importante a tener en cuenta, el Deep Learning es el aprendizaje de repre-
sentaciones utilizando diferentes tipos de redes neuronales y optimizando los hiperparámetros
de la red para obtener (aprender) la mejor representación de nuestros datos.
Hiperparámetros
Los hiperparámetros son parámetros ajustables que se eligen para entrenar un modelo y
que rigen el propio proceso de entrenamiento. Por ejemplo, para entrenar una red neuronal
profunda, debe decidir el número de capas ocultas en la red y la cantidad de nodos de cada
capa antes de entrenar al modelo. Estos valores suelen permanecer constantes durante el
proceso de entrenamiento. En escenarios de aprendizaje profundo o aprendizaje automáti-
co, el rendimiento del modelo depende en gran medida de los valores de hiperparámetro
seleccionados. El objetivo de la exploración de los hiperparámetros es buscar entre diversas
configuraciones de hiperparámetros hasta dar con la que tenga como resultado un rendi-
miento óptimo. Normalmente, el proceso de exploración de hiperparámetros es un trabajo
manual muy laborioso, dado que el espacio de búsqueda es muy extenso y la evaluación de
cada configuración puede ser costosa[35].
Cada hiperparámetro puede ser discreto o continuo, los hiperparámetros discretos se espe-
cifican con un objeto choice entre valores discretos[35]. Los hiperparámetros continuos se
especifican como una distribución a través de un intervalo continuo de valores. Las distribu-
ciones admitidas son[35]:
normal(mu, sigma): devuelve un valor real que se distribuye normalmente con media
mu y desviación estándar sigma.
Con esta herramienta se puede experimentar con diferentes hiperparámetros y ver su com-
portamiento. Precisamente, la flexibilidad de las redes neuronales es una de sus virtudes y a
la vez uno de sus inconvenientes para los que se inician en el tema: hay muchos hiperparáme-
tros para ajustar.
Tensorflow Play Ground es una herramienta web de Tensorflow que permite experimentar
con algunos hiperparámetros y crear redes neuronales profundas, con esta herramienta es
posible analizar la influencia de algún hiperparámetro en el aprendizaje de una red, ya que
hace una simulación del comportamiento de esta. Para más información consulte la sección
2.4.14
Las CNN toman una imagen de entrada, la procesan y clasifican en ciertas categorı́as o
clases. Los ordenadores ven una imagen de entrada como una matriz de pı́xeles y depende
de la resolución de la imagen. Según la resolución de la imagen, verá hxwxd (h: Altura, w:
Ancho, d: Dimensión). Por ejemplo, una imagen de 6x6x3 es una matriz de RGB (3 se refiere
a la cantidad de canales, Red, Green, Blue) y una imagen de 6x6x1, es una matriz de una
imagen de escala de grises.
Las neuronas de una CNN poseen un patrón de conectividad inspirado en el córtex visual de
un cerebro biológico, son una variación del Perceptrón Multicapa -MLP, pero están diseñadas
para requerir la mı́nima cantidad de procesamiento, lo cual hace más eficiente las tareas de
visión artificial, como el reconocimiento de imágenes.
En el procesamiento de la capa S, la retina (capa u0), es una matriz de 19x19px, cada plano
de Usi tendrá una matriz del mismo tamaño de la retina (19x19px) y cada plano barre toda
la retina en busca de cierta caracterı́stica. Cada célula del plano S busca exactamente la
misma caracterı́stica pero en una posición diferente de la retina. El campo receptivo de cada
una de las células S corresponde a una matriz de 3x3 y hay un plano de células Vc asociado
a cada capa S del sistema. La salida de una célula Vc va a una sola célula S de todos los
planos de la capa, la salida de la célula Vc tiene un efecto inhibitorio sobre las células S [16].
Este modelo fue más tarde mejorado por Yann LeCun et al en 1982 al introducir un método
de aprendizaje basado en backpropagation(o propagación hacia atrás) para poder entrenar el
sistema correctamente. En el año 2012, fueron refinadas por Dan Ciresan y otros, y fueron
implementadas para una unidad de procesamiento gráfico (GPU) consiguiendo ası́ resultados
impresionantes[16].
la arquitectura de la CNN de LeCun y el Neocognitron de Fukushima se parecen en muchos
aspectos. Son una secuencia de capas-S y Capas-C alternas, aquı́ llamadas capas de convo-
lución y submuestreo, formadas por las llamadas mapas de caracterı́sticas correspondientes
a los planos S y C del neocognitron.
Hay que tener en cuenta que, al contrario de lo que se espera de las notaciones, las capas
S corresponden a las capas de convolución y las capas C a las capas de submuestreo. El
modelo CNN también implementa los conceptos de campos receptivos y el intercambio de
peso. Sin embargo, el modelo de las neuronas individuales es el Perceptrón básico [46] con
una función de activación sigmoide. Eso significa que no hay entrada inhibitoria ni planos
en V, lo que simplifica el modelo y la arquitectura en general. Una ventaja adicional de este
modelo es que la red no tiene que ser entrenada capa por capa, sino que todos los pesos
se ajustan iterativamente por error de backpropagation minimizando una función de error
global. Como consecuencia, las caracterı́sticas a extraer, es decir, bordes, esquinas, etc, no
22 1 Marco de referencia
Las Redes Neuronales Convolucionales están compuestas por una capa de entrada, una de
salida y varias capas ocultas, ası́ como cualquier red neuronal, lo que diferencia a las CNN,
es que hacen la suposición explı́cita de que las entradas son imágenes, por esto se nos permi-
te codificar algunas propiedades en la arquitectura para reconocer objetos concretos en las
imágenes. En una CNN cada capa va aprendiendo diferentes niveles de abstracción, ası́ que
un número significativo de capas pueden conseguir identificar estructuras más complejas en
los datos de entrada[60].
Técnicamente, en los modelos CNN de Deep Learning para entrenar y probar, cada imagen de
entrada se pasa a través de una serie de capas de convolución con filtros (kernels), agrupación,
capas totalmente conectadas (FC) y aplicará la función Softmax para clasificar un objeto
con valores probabilı́sticos entre 0 y 1. La siguiente figura es un flujo completo de CNN para
procesar una imagen de entrada y clasifica los objetos según los valores.
Convolución
La principal diferencia entre una capa densamente conectada y una capa especializada en la
operación de convolución, es que la capa densa aprende patrones globales en su espacio global
de entrada, mientras que las capas convolucionales aprenden patrones locales en pequeñas
ventanas de dos dimensiones.
El objetivo principal de una capa convolucional es detectar caracterı́sticas o rasgos visuales en
las imágenes como aristas, lı́neas, gotas de color, etc. Una vez aprendida una caracterı́stica
en un punto concreto de la imagen la puede reconocer después en cualquier parte de la
misma. En cambio, en una red neuronal densamente conectada tiene que aprender el patrón
nuevamente si este aparece en una nueva localización de la imagen[60].
Generalmente las capas convolucionales operan sobre tensores de 3D, conocidos como feature
maps, este cuenta con dos ejes espaciales de altura y anchura y otro eje de canal, conocido
como profundidad. Para una imagen de color RGB, la dimensión del eje de profundidad es
3, pues la imagen tiene tres canales: Rojo, verde y azul (RGB)[54]
El kernel toma inicialmente valores aleatorios entre [−∞, ∞], pero lo aconsejable es hacerlo
en un rango entre [-5. 5], para que la red no tarde tanto en el proceso de aprendizaje, después
estos se van ajustando mediante backpropagation.
Pooling
Ahora viene un paso en el que se reducirá la cantidad de neuronas antes de hacer una nueva
convolución. Esto se hace ya que al tener una imagen de 60x60x3, es decir, una imagen de
60 de ancho y alto que es a color, se tendrı́a como entrada un total de 10.800 neuronas,
después de la primer convolución, se tendrán por ejemplo 32 filtros, esto significa un total de
60x60x3x32= 345.600 neuronas, si se llegara a hacer una convolución a partir de esta capa, el
número de neuronas de la siguiente capa serı́a enorme, lo que implica mayor procesamiento.
Para reducir el tamaño de la próxima capa se hace un proceso de pooling en el que se reduce
el tamaño de las imágenes filtradas, pero en donde deberán prevalecer las caracterı́sticas
más importantes que detectó cada filtro. Hay diferentes tipos de pooling, entre estos el más
utilizado se plasma en la figura 1-29 el Max pooling.
Suponiendo que usaremos un Max pooling de tamaño 2x2. Esto quiere decir que recorreremos
cada una de nuestras 32 imágenes de caracterı́sticas obtenidas anteriormente de 60x60px de
izquierda a derecha, arriba a abajo, pero en vez de tomar de a 1 pixel, se tomarán de 2x2 (2
de alto por 2 de ancho = 4 pixeles) y se irá preservando el valor “más alto” de entre esos 4
pixeles (por eso lo de “Max”). En este caso, usando 2x2, la imagen resultante es reducida “a
la mitad”y quedará de 3030 pixeles. Luego de este proceso de pooling quedarán 32 imágenes
de 30x30, pasando de haber tenido 345.600 neuronas a 30x30x3x32= 86.400, son bastantes
menos y, en teorı́a-, siguen almacenando la información más importante para detectar ca-
racterı́sticas deseadas.
Arquitecturas de CNN
Existen modelos pre-entrenados como la red VGG, introducida por Karen Simonyan, An-
drew Zisserman en 2015, con su publicación Very Deep Comvolutional Networks For Large-
Scale Image Recognition[22].
AlexNet es el nombre de otra CNN, escrita originalmente con CUDA para funcionar con
soporte GPU, que compitió en el desafı́o de reconocimiento de gran escala ImageNet [28].
AlexNet contenı́a ocho capas: las primeras cinco fueron capas convolucionales y las tres
últimas fueron capas conectadas por completo.
El ganador del concurso ILSVRC 2014 fue GoogleNet (a.k.a. Inception V1) de Google.
¡Logró una tasa de error top-5 de 6.67 %! Este fue un desempeño muy cercano al nivel hu-
mano que los organizadores del desafı́o se vieron obligados a evaluar. Resulta que, en realidad,
esto era bastante difı́cil de realizar y requerı́a algún entrenamiento humano para poder supe-
rar la precisión de GoogLeNets. Después de unos dı́as de entrenamiento, el experto humano
(Andrej Karpathy) logró una tasa de error entre los 5 primeros del 5,1 % (modelo único) y
el 3,6 % (conjunto).
La red utilizó una CNN inspirada en LeNet, pero implementó un elemento novedoso que se
denomina módulo de inicio. Se utilizó la normalización por lotes, distorsiones de imagen y
RMSprop. Este módulo se basa en varias convoluciones muy pequeñas para reducir drásti-
camente el número de parámetros. Su arquitectura consistı́a en una CNN de 22 capas de
profundidad, pero redujo el número de parámetros de 60 millones (AlexNet) a 4 millones[19].
1.3 Marco teórico 27
Funciones de activación
Es solo una función que se usa para obtener la salida del nodo. También se conoce como
función de transferencia.
Estas funciones de activación con redes neuronales se utilizan para determinar la salida de la
red neuronal, como sı́ o no. Mapea los valores resultantes entre [0,1] o [-1,1], etc. (dependiendo
de la función).
Las funciones de activación se pueden dividir básicamente en 2 tipos:
Función de paso
Para comprender lo que son las funciones de activación es necesario saber lo que hace una
neurona artificial, que en pocas palabras, calcula una ”suma ponderada”de su entrada, agrega
un sesgo y luego decide si debe ”dispararse.o no (sı́, claro, una función de activación hace
esto, pero vamos con el flujo por un momento). Ası́ que consideremos una neurona:
P
y = (weight ∗ input) + bias
El valor de Y puede ser cualquier cosa que va desde [−∞, +∞]. La neurona realmente no
conoce los lı́mites del valor.
Función de paso
Lo primero que se planeta es hacer una función de activación basada en un umbral. Si
1.3 Marco teórico 29
el valor de Y está por encima de un cierto valor, declararlo activado. Si es menor que el
umbral, entonces no. Se deciden agregar “funciones de activación”para verificar el valor de
Y producido por una neurona y decidir si las conexiones externas deben considerar esta
neurona como “activada.o no.
Ası́ que esto hace una función de activación para una neurona. Sin embargo, hay ciertos
inconvenientes con esto.
Supongamos que está creando un clasificador binario. Algo que deberı́a decir “sı́.o “no”(activar
o desactivar). Una Función de Paso podrı́a hacer esto, diga un 1 o un 0. Ahora, se plantea el
caso de uso en el que desearı́a que varias neuronas de este tipo estuvieran conectadas para
generar más clases. Clase 1, clase 2, clase 3, etc. Si se llegara a activar más de una neurona,
todas las neuronas emitirán un 1 (desde la función de paso).
Lo deseado serı́a que la red activara solo 1 neurona y que otras fueran 0, solo entonces
podrı́a decir que clasificó correctamente o identificó la clase. Esto es más difı́cil de entrenar
y converger de esta manera. Para este caso es mejor que la activación no sea binaria y
en su lugar fuera “50 % activado.o “20 % activado ası́ sucesivamente. Y luego, si más de
2
1 neurona se activa, se lograrı́a encontrar qué neurona tiene la “activación más alta ası́ 2
sucesivamente[61].
También en este caso, si más de 1 neurona dice “100 % activada”, el problema aún persiste.
Ya que hay valores de activación intermedios para la salida, el aprendizaje puede ser más
suave y más fácil (menos confuso) y las posibilidades de que más de 1 neurona se active al
100 % es menor cuando se compara con la función de pasos durante el entrenamiento.
30 1 Marco de referencia
Para esto se necesita algo que nos de valores de activación intermedios (analógicos) en lugar
de decir “activado.o no (binario).
Función lineal
A = cX
Es una función de lı́nea recta donde la activación es proporcional a la entrada (que es la suma
ponderada de la neurona). De esta manera, proporciona un rango de activaciones, por lo que
no es una activación binaria. Definitivamente, es posible conectar algunas neuronas juntas
y si más de 1 se dispara, se toma el máximo (o softmax) y decidir con base a eso. Aunque
esta función también tiene un inconveniente, el descenso de gradiente para el entrenamiento,
observarı́a que para esta función, la derivada es una constante.
A = cX, derivado con respecto a x es c. Eso significa que el gradiente no tiene relación con
X. Es un gradiente constante y el descenso estará en un gradiente constante. Si hay un error
en la predicción, los cambios realizados por la propagación hacia atrás son constantes y no
dependen del cambio en la entrada delta (x)[61].
También hay otro problema. En las capas conectada, cada capa es activada por una función
lineal. Esa activación, a su vez, pasa al siguiente nivel como entrada y la segunda capa
calcula la suma ponderada de esa entrada y, a su vez, se activa basándose en otra función
de activación lineal.
Sin importar la cantidad de capas, si todas son de naturaleza lineal, la función de activación
final de la última capa no es más que una función lineal de la entrada de la primera capa. Eso
significa que estas capas pueden ser reemplazadas por una sola capa, ası́ que, sin importar
cómo se apilen, toda la red sigue siendo equivalente a una sola capa con activación lineal
(una combinación de funciones lineales de manera lineal es otra función lineal).
Este comportamiento se puede analizar en PlayGround de TensorFlow5 , que es una aplicación
web de visualización interactiva que permite simular redes neuronales simples que se ejecutan
el nuestro navegador, y ver los resultados en tiempo real.
Esta herramienta nos ofrece cuatro tipos de datos (Gaussiano, circulo, exclusive OR y espi-
ral). La idea es probar diferentes parámetros y analizar el comportamiento de la red.
5
Consulte: https://playground.tensorflow.org
1.3 Marco teórico 31
Ahora veamos el comportamiento del modelo con una capa oculta y que tiene una sola
neurona usando la función de activación linear .
Figura 1-25: Modelo clasificador de una sola capa oculta con una sola neurona y función
de activación lineal, Playground Tensorflow
Como se puede observar, una sola neurona con función de activación lineal no es suficiente
para lograr que los datos se agrupen en grupos diferentes.
32 1 Marco de referencia
Ahora veamos qué pasa cuando se le agregan más capas ocultas al modelo anterior y más
neuronas a cada capa:
Figura 1-26: Modelo clasificador de varias capas ocultas con varias neuronas y función de
activación lineal, Playground Tensorflow
En conclusión una serie de capas ocultas con muchas neuronas en ellas, es equivalente a una
sola neurona cuando se usa la función de activación lineal. esto pasa porque las neurona
no añaden ninguna no linealidad al modelo, simplemente colapsan las señales de entrada y
simplemente hacen una combinación lineal lo que genera un plano. Entonces, ası́ se agreguen
muchas capas ocultas y a estas capas se le agreguen muchas neuronas, la combinación lineal
de todas las combinaciones lineales que se producen en todas las capas ocultas es el equi-
valente a una sola neurona, por eso vemos en los modelos de las figuras 2-15 y 2-16 que a
pesar de su diferencia en el modelo, producen el mismo resultado y ninguno logra solucionar
el problema.
Función sigmoidea
La razón principal por la que se usa la función sigmoidea es porque existe entre [0 a 1].
Por lo tanto, se utiliza especialmente para los modelos en los que tenemos que predecir la
probabilidad como una salida. Dado que la probabilidad de que algo exista solo entre el
rango de 0 y 1, sigmoidea es la opción correcta.
1
A= 1+e−x
1.3 Marco teórico 33
Parece que es bueno para un clasificador considerando su propiedad, tiende a llevar las
activaciones a ambos lados de la curva (por encima de x = 2 y por debajo de x = -2, por
ejemplo). Haciendo distinciones claras en la predicción[61].
Otra ventaja de esta función de activación es que, a diferencia de la función lineal, la salida
de la función de activación siempre estará en el rango (0,1) en comparación con (-inf, inf)
de la función lineal. Ası́ que se tienen las activaciones ligadas en un rango.
Las funciones sigmoideas son una de las funciones de activación más utilizadas en la actua-
lidad. Aunque también tienen un inconveniente, si observa, hacia cualquier extremo de la
función sigmoidea, los valores de Y tienden a responder mucho menos a los cambios en X,
esto significa que el gradiente en esa región será pequeño. Esto da lugar a un problema de
“gradientes de fuga”.
Figura 1-28: Modelo clasificador de una capa oculta y una neurona con función de activa-
ción sigmoid[61]
Evidentemente un modelo de clasificación compuesto por una sola neurona y con función de
activación sigmoid no soluciona el problema de agrupación. Entonces agregamos más capas
ocultas y más neuronas y obtuvimos el siguiente resultado:
Figura 1-29: Modelo clasificador de una capa oculta y tres neuronas con función de acti-
vación sigmoid[61]
1.3 Marco teórico 35
Vemos que con solo agregar 3 neuronas a una capa oculta de un modelo de clasificación con
función de activación sigmoid, se logra trazar la linea fronteriza entre ambos grupos de datos.
Función Tanh
Otra función de activación que se utiliza es la función tanh. Esta es una función sigmoidea
escalada, tiene caracterı́sticas similares a la función sigmoid discutidos anteriormente. Es
de naturaleza no lineal, esto significa que podemos apilar capas. Está limitado a un rango
(-1, 1), por lo que no hay preocupaciones de que las activaciones exploten. Un punto a
mencionar es que el gradiente es más fuerte para tanh que para sigmoide (los derivados
son más pronunciados). La decisión entre el sigmoide o el tanh dependerá del requisito de
gradiente de fuerza. Al igual que sigmoide, Tanh también tiene el problema de la degradación
de la desaparición. Tanh es también una función de activación muy popular y ampliamente
utilizada[61].
2
f (x) = tanh(x) = 1+e−2x −1
A(x) = max(0, x)
36 1 Marco de referencia
A simple vista, esto parecerı́a tener los mismos problemas de función lineal, ya que es lineal
en el eje positivo. En primer lugar, ReLu es de naturaleza no lineal, por tanto las combi-
naciones de ReLu tampoco son lineales, ası́ que esto significa que podemos apilar capas. El
rango de ReLu es [0, +∞). Esto significa que puede explotar la activación. Otro punto a
tener en cuenta es la escasez de la activación. Si se tiene una gran red neuronal con muchas
neuronas, el uso de un sigmoide o tanh hará que casi todas las neuronas se activen de forma
análoga, eso significa que casi todas las activaciones se procesarán para describir la salida de
una red. En otras palabras, la activación es densa. Esto es costoso, lo ideal serı́a que algunas
neuronas de la red no se activen y, por lo tanto, hagan que las activaciones sean dispersas y
eficientes[61].
ReLu nos da este beneficio. Si se tiene una red con pesos inicializados aleatorios (o normali-
zados) y casi el 50 % de la red produce una activación de 0 debido a la caracterı́stica de ReLu
(salida 0 para valores negativos de x). Esto significa que se están disparando menos neuronas
(activación dispersa) y la red es más ligera. Aunque ReLu también tiene su inconveniente,
debido a la lı́nea horizontal en ReLu (para X negativo), el gradiente puede ir hacia 0. Para
las activaciones en esa región de ReLu, el gradiente será 0 debido a que los pesos no se ajus-
tarán durante el descenso. Eso significa que las neuronas que entran en ese estado dejarán de
responder a las variaciones en el error/entrada (simplemente porque el gradiente es 0, nada
cambia). Esto se llama problema ReLu moribundo. Este problema puede causar que varias
neuronas simplemente mueran y no respondan, lo que hace que una parte sustancial de la
red sea pasiva. Hay variaciones en ReLu para mitigar este problema simplemente haciendo
que la lı́nea horizontal sea un componente no horizontal. por ejemplo, y = 0.01x para x ¡0
hará que sea una lı́nea ligeramente inclinada en lugar de una lı́nea horizontal. Esto es fugas
1.3 Marco teórico 37
ReLu. También hay otras variaciones. La idea principal es dejar que el gradiente no sea cero
y recuperarse durante el entrenamiento eventualmente[61].
ReLu es menos costoso computacionalmente que tanh y sigmoide porque involucra operacio-
nes matemáticas más simples. Ese es un buen punto a considerar cuando estamos diseñando
redes neuronales profundas.
Figura 1-32: Modelo clasificados con una capa oculta y una neurona con activación
ReLu[61]
Figura 1-33: Modelo clasificados con una capa oculta y una neurona con activación
ReLu[61]
Softmax
La función Softmax calcula la distribución de probabilidades del evento sobre ñéventos dife-
rentes. En términos generales, esta función calculará las probabilidades de cada clase objetivo
sobre todas las clases objetivo posibles. Más tarde, las probabilidades calculadas serán útiles
para determinar la clase objetivo para las entradas dadas.
A continuación se presenta la figura 1-46 donde se evidencia una comparativa entre las
funciones Softmax y Sigmoid.
1.3 Marco teórico 39
Dropout
Las redes neuronales profundas contienen múltiples capas ocultas no lineales, lo que las
convierte en modelos muy expresivos que pueden aprender relaciones muy complicadas entre
sus entradas y salidas. Sin embargo, con datos de entrenamiento limitados, muchas de estas
relaciones complejas serán el resultado del ruido de muestreo, por lo que existirán en el
conjunto de entrenamiento pero no en datos de prueba reales, incluso si se extraen de la
misma distribución. Esto conduce al sobreajuste y se han desarrollado muchos métodos
para reducirlo. Estos incluyen detener el entrenamiento tan pronto como el rendimiento en
un conjunto de validación empiece a empeorar [53].
A la izquierda tenemos una red neuronal estándar con 2 capas oculta y a la derecha un
ejemplo de una red reducida producida mediante la aplicación de Dropout a la red de la
40 1 Marco de referencia
Dropout es una técnica que aborda estos dos problemas: Previene el sobreajuste y proporcio-
na una forma de combinar aproximadamente de manera exponencial muchas arquitecturas de
redes neuronales diferentes de manera eficiente. El término ”Dropout”se refiere a abandonar
unidades (ocultas y visibles) en una red neuronal. Al abandonar una unidad, nos referimos a
su eliminación temporal de la red, junto con todas las conexiones entrantes y salientes, como
se muestra en la siguiente figura. La elección de qué unidades eliminar es aleatoria. En el
caso más simple, cada unidad se retiene con una probabilidad fija p independiente de otras
unidades, donde p puede elegirse utilizando un conjunto de validación o simplemente puede
establecerse en 0.5, lo que parece ser casi óptimo para una amplia gama de redes y Tareas.
Sin embargo, para las unidades de entrada, la probabilidad óptima de retención suele ser
más cercana a 1 que a 0.5 [53].
A la izquierda se tiene una unidad en tiempo de entrenamiento que está presente con pro-
babilidad p y está conectada a unidades en la siguiente capa con pesos w. A la derecha está
en el momento de la prueba, la unidad siempre está presente y los pesos se multiplican por
p. La salida en el momento de la prueba es la misma que la salida esperada en tiempo de
entrenamiento.[53].
Aplicar Dropout a una red neuronal equivale a muestrear una red “reducida” de ella. La red
reducida consta de todas las unidades que sobrevivieron a la eliminación. Una red neuronal
con n unidades, puede verse como una colección de 2n posibles redes neuronales adelgaza-
das. Todas estas redes comparten ponderaciones, de modo que el número total de parámetros
sigue siendo 0 (n2), o menos. Para cada presentación de cada caso de capacitación, se mues-
trea y entrena una nueva red reducida. Por lo tanto, la capacitación de una red neuronal con
abandono se puede ver como una colección de 2n redes reducidas con un amplio intercambio
de peso, donde cada red adelgazada se entrena muy rara vez, si es que lo hace [53].
La idea del Dropout no se limita a alimentar las redes neuronales. Se puede aplicar de manera
más general a modelos gráficos como las máquinas Boltzmann6 .
6
La Máquina de Boltzmann es una red neuronal recurrente estocástica que representa la información a
1.3 Marco teórico 41
(l+1) (l+1)
yi = f (zi )
1
donde f es cualquier función de activación, por ejemplo, f (x) = (1+e(−x) )
, con el Dropout, la
operación de avance se convierte en:
(l)
rj ∼ Bernoulli(p),
(l+1) (l+1)
yi = f (zi )
Figura 1-37: Comparación de las operaciones básicas de una red estándar y de Dropout[33]
partir de una distribución de probabilidad[33]
42 1 Marco de referencia
Aprendizaje
Ser significativo: Esto significa que debe existir un numero suficiente de ejemplos.
Ser representativo: Los componentes del conjunto de aprendizaje deberı́an ser diversos.
Aprendizaje supervisado: En este tipo de esquema, los datos del conjunto de apren-
dizaje tienen dos tipos de atributos: Los datos y cierta información relativa a la solución
del problema.
Aprendizaje por refuerzo: Este tipo de aprendizaje es una variante del aprendizaje
supervisado en el que no se dispone de información concreta del error que llegue a tener
la red neuronal para cada ejemplo de aprendizaje, sino que se determina si la salida
producida para dicho patrón es o no adecuada.
En la figura 1-52 se puede visualizar mejor el tema de las redes neuronales mencionado hasta
ahora:
Para determinar si la red neural artificial produce salidas acertadas, se divide el conjunto de
entrenamiento en dos conjuntos que se llamarán: entrenamiento y validación. El conjunto d
entrenamiento se usa para aprender los valores de los pesos, la diferencia es que en lugar de
calcular el error en el conjunto de entrenamiento, se utiliza el de validación. Si el error sobre
44 1 Marco de referencia
Funciones de pérdida
Luego de inicializar los pesos se procede a elegir una loss function o función de pérdida, la
cual se elige de acuerdo al problema, esta permite hacer la evaluación al modelo, estimar la
pérdida e identificar vulnerabilidades para mejora y minimización de pérdida de precisión.
Entre las funciones de perdida se encuentran las de clasificación binaria, de regresión y las
de clasificación multi-clase.
se modifican para que estén dentro del rango exigido, para utilizarlo se debe tener
una capa de salida de un solo nodo, una activación de tangente hiperbólica que
genere valores continuos entre [-1,1].
• Pérdida de entropı́a cruzada binaria
Es la función predeterminada para problemas de clasificación binaria, el rango
de valores de destino es en el conjunto 0, 1. Esta función busca que el resultado
de la entropı́a cruzada sea igual a cero, a partir de las diferencia promedio entre
las distribuciones (real y pronosticada), para acertar en la predicción de la clase
1. Esta función de pérdida en Keras se establece como ’binary crossentropy’y
requiere que la capa de salida este en activación ’sigmoide’y tenga un solo nodo
para la predicción.
H(p, q) = − N1 x logq(x)
P
Optimización de RNA
Adagrad, Adadelta, Adam, Adamax, Nadam. Se puede encontrar más detalle de cada uno
de ellos en la documentación de Keras.7
Gradiente
Un Gradiente es simplemente un vector que es una generalización multivariable de
un derivado (dy/dx) que es la tasa instantánea de cambio de y con respecto a x. La
diferencia es que para calcular una derivada de una función que depende de más de
una variable o varias variables, un gradiente toma su lugar. Y un gradiente se calcula
utilizando derivadas parciales. También otra diferencia importante entre el Gradiente
y un derivado es que un Gradiente de una función produce un Campo vectorial. Un
gradiente está representado por una matriz jacobiana, que es simplemente una matriz
que consiste en derivadas parciales de primer orden (gradientes). En resumen, una
7
consulte https://keras.io/optimizers/
48 1 Marco de referencia
derivada se define simplemente para una función que depende de variables individuales,
mientras que un gradiente se define para la función que depende de múltiples variables.
Algoritmos de optimización
SGD o Descenso de gradiente estocástico: Este es uno de los optimizadores
más usados en el Machine Learning y Deep Learning. es uno de los método que más
lleva tiempo en al campo de entrenamiento de redes neuronales. Se prefiere sobre otro
métodos por si eficiencia y su fácil implementación. Debe estar compuesto por dos
matrices, una matriz X, que estará contenida por muestras de formación y una matriz
Y que tenga los valores objetivo para las muestras. Matemáticamente hablamos de un
vector de derivadas parciales, se puede identificar fácilmente que distancia es más corta
y cual más larga[60].
g t = 5f t
Entonces:
1. Calcular la dirección de descenso con momentum
pt = n1 pt−1 + (1 − n1 )g t
β t = n2 β t−1 + (1 − n2 ) k g t k2
1 t
pb(t) = nt
p
1 t
βbt = βb2t
v
xt+1 = xt − √ αt pc
(t)
β +
p0k + Sk
1.3 Marco teórico 51
η
Θt+1 = Θt − m
ut t
b
Tenga en cuenta que dado que u se basa en la operación máxima, no es posible desviarse
a cero como m y v en Adam, por lo que no necesitamos calcular una corrección de
sesgo para u. Los buenos valores predeterminados son nuevamente η = 0,002, β1 = 0,9
y β2 = 0,999.
Backpropagation
Una red neuronal multicapa de alimentación directa puede representar cualquier función, con
suficientes unidades de neuronas artificiales. Generalmente se aprende mediante un algoritmo
de aprendizaje denominado backpropagation o propagación hacia atrás[5] El backpropaga-
tion utiliza el descenso de gradiente, en los pesos de las conexiones en una red neuronal para
minimizar el error en la salida de la red.
Históricamente, el backpropagation se ha considerado lento, pero los avances recientes en el
poder computacional a través del paralelismo y las unidades de procesamiento de gráficos
(GPU) han renovado el interés en las redes neuronales.
El proceso es similar al de las redes tradicionales en las que se tiene una entrada y una
salida esperada, y mediante el backpropagation se mejora el valor de los pesos de las inter-
conexiones entre capas de neuronas y a medida que se iteran esos pesos se ajustan hasta ser
óptimos. Pero en el caso de la CNN, se debe ajustar el valor de los pesos de los distintos
kernels. Esto es una gran ventaja al momento del aprendizaje pues como se vio cada kernel
es de un tamaño reducido, en nuestro ejemplo en la primer convolución es de tamaño de 33,
eso son solo 9 parámetros que se deben ajustar en la cantidad de filtros utilizados, es decir,
si se usan 32 filtros, será un total de 9x32 = 288 parámetros.
El algoritmo debackpropagation se introdujo originalmente en la década de 1970, pero su im-
portancia no fue totalmente apreciada hasta un famoso artı́culo de 1986 de David Rumelhart,
Geoffrey Hinton y Ronald Williams[12]. En ese documento describe varias redes neuronales
en las que el backpropagation funciona mucho más rápido que los enfoques anteriores de
aprendizaje, lo que hace posible utilizar redes neuronales para resolver problemas que antes
eran insolubles. Hoy en dı́a, el algoritmo de backpropagation es el caballo de batalla del
aprendizaje en redes neuronales.
Para mejorar el desempeño de las CNN, se adicionan otros tipos de capas a las mencio-
nadas anteriormente,como Dropout, bacth normalization y regularization, con el objetivo
de evitar problemas de sobre-entrenamiento en redes profundas. Su función principal es
eliminar temporalmente algunas neuronas especı́ficas de forma aleatoria, rompiendo sus co-
nexiones neuronales durante el entrenamiento. esto previene que las unidades se co-adapten
en exceso[31].
1.4 Librerı́as principales 53
En los últimos años se han desarrollado diversos modelos de redes convolucionales. Para
el sistema de clasificación de VSS desarrollado en este trabajo, utilizaremos la red Alexnet
[54]. Otro método para prevenir el sobre-entrenamiento es adicionar capas de regularización,
estas se encargarán de agregar un término de penalización a los pesos, logrando controlar la
complejidad del modelo. Ejemplo de este modelo de regularización es el de Ridge o weight
decay. La idea de estos modelos es evitar que la red aprenda una regla equivocada, que tenga
más peso que las otras y esto genere una influencia negativa en la decisión final, por esto
se trata de que los pesos tengan niveles similares, ası́ será mucho más fácil que el sistema
busque caracterı́sticas en toda la imagen.
TensorBoard
Es una herramienta que ofrece TensorFlow para visualizar el aprendizaje, como los cálculos
que se realizan pueden ser complejos y confusos (en el entrenamiento de una red neuronal
profunda masiva), para facilitar la comprensión, la depuración y la optimización de los
programas esta aplicación incluye un conjunto de herramientas de visualización llamadas
TensorBoard. Se utiliza para visualizar su gráficos, trazar métricas cuantitativas sobre la
ejecución de gráficos y mostrar datos adicionales como las imágenes que pasan a través de
él.
Para su funcionamiento se requiere instalar TensorFlow, este ya trae TensorBoard, este fun-
ciona al leer los eventos declarados en el tensor. Luego de crear el gráfico a trabajar en
TensorFlow se recopila datos de resumen y se deciden los nodos que contienen las opera-
ciones con la anotación tf.summary más un tag que indica su tipo como scalar o histogram
para visualizar las distribuciones de activaciones que salen de una capa en particular, o la
distribución de gradientes o pesos. Las operaciones no hacen nada hasta que se ejecuten y se
puede hacer uno a uno o todos con el comando tf.summary.merge all, esto genera un archivo
protobuf que se debe escribir en un archivo textittf.summary.FileWriter para luego leerlo y
mostrarlo en la TensorBoard.
Esta herrmienta apunta al directorio de registro del trabajo ”log su uso facilita comprender
2
TensorFlow cuenta con una herramienta llamada TensorFlow Playground 8 que es una
aplicación web de visualización interactiva escrita en JavaScript que permite simular redes
neuronales simples que se ejecutan el nuestro navegador, y ver los resultados en tiempo real:
8
consulte: https://playground.tensorflow.org
56 1 Marco de referencia
1.4.2. Flask
Es un microframework open-source que permite en pequeñas lı́neas de código crear aplica-
ciones web, usa el patrón MVC que proporciona una estructura al proyecto y no necesita
una infraestructura con un servidor web, es compatible con Wsig, un protocolo que utiliza
los servidores web (solo de ser necesario). Esta herramienta es donde esta creada la presenta-
ción web con el uso de bootstrap para la ejecución del proyecto, ofrece sugerencias, pero no
impone ninguna dependencia ni diseño del proyecto. Su configuración no requiere de grandes
pasos.
1.4 Librerı́as principales 57
1.4.3. Keras
Keras es una API de alto nivel escrita en Python que corre sobre diferentes motores de Deep
Learning como TensorFlow, CNTK o Theano y corre tanto en CPUs como en GPUs. Esta
API ofrece modelos el los que las capas que se quieran agregar,puedan combinarse según los
requisitos que se tengan. los modelos de Keras son totalmente compatibles con los tensores
de TensorFlow, y como resultado, Keras hace un gran complemento de definición de modelo
para TensorFlow. Además Keras es compatible con Python 2.7 y 3.6.
La facilidad de uso. Keras es una API diseñada para seres humanos, no máquinas. Pone
la experiencia del usuario al frente y al centro. Keras sigue las mejores prácticas para
reducir la carga cognitiva: ofrece API consistentes y simples, minimiza el número de
acciones de usuario requeridas para los casos de uso comunes y proporciona comentarios
claros.
Fácil extensibilidad. Los nuevos módulos son fáciles de agregar (como nuevas clases y
funciones), y los módulos existentes brindan amplios ejemplos. Poder crear fácilmente
nuevos módulos permite una expresividad total, lo que hace que Keras sea adecuado
para la investigación avanzada.
Keras nos proporciona una serie de modelos pre-entrenados como la red VGG, introducida
por Karen Simonyan, Andrew Zisserman en 2015, con su publicación Very Deep Comvolu-
tional Networks For Large-Scale Image Recognition[22].
En ese trabajo, investigaron el efecto de la profundidad de la red convolucional sobre su
precisión en el ajuste de reconocimiento de imagen a gran escala. Su contribución princi-
pal fue una evaluación exhaustiva de las redes más profundas utilizando una arquitectura
con filtros de convolución de un tamaño muy pequeño (3x3 ), lo que demuestra que una
mejora significativa en las configuraciones de la técnica anterior se puede lograr empujando
la profundidad a 16 o 19 capas. Estos hallazgos fueron la base de ImageNet (2014), donde
su equipo aseguró el primer y segundo por dar buenos resultados con respecto a ubicación
58 1 Marco de referencia
podido determinar de una manera juiciosa, el Número de Viviendas Sin Servicio en la zona
rural.
lı́cita.
2 Aplicación
Para la creación de esta aplicación se utilizó un computador Lenovo con sistema operativo
Ubuntu 16.04, esta es una distribución de GNU/Linux versión LTS lanzada el 26 de abril
del 2018. Se seleccionó este sistema operativo, porque es más rápido a la hora de ejecutar
instrucciones de TensorFlow como se afirma en la información proporcionada por la página
oficial de TensorFlow1 . El ordenador cuenta con una memoria RAM de 16GB y una tarjeta
gráfica Nvidia GeForce GTX 1050. Como se vio en la sección 2.3.9, Nvidia lanzó el lenguaje
de programación CUDA para poder programar sus GPU, gracias a esto se comenzaron a
usar chusters de GPU para acelerar aplicaciones numéricas, esto es una ventaja a la hora de
hacer el entrenamiento de CNN debido a Nvidia es compatible con TensorFlow. Esta librerı́a
tiene tanto la versión de la CPU, como la versión de la GPU disponibles y aunque la versión
de la CPU funciona bastante bien, en modelos de Deep Learning se recomienda usar la GPU
para la obtención de resultados en tiempo real o el menor tiempo posible.
Para poder hacer uso de Tensorflow GPU es necesario contar con una GPU compatible, en
la página de Tensorflow 2 se encuentran todas las especificaciones para la instalación de esta
librerı́a junto con una lista de las GPU Nvidia compatibles con esta. Además de Una tarjeta
gráfica Nvidia, es necesario cumplir con los siguientes requisitos:
Linux de 64 bits
Python 2.7
CUDA 9
cuDNN 7
Todas las librerı́as utilizadas para el entrenamiento de las CNN fueron instaladas en un
entorno virtual de python (virtualenv), este es un ambiente creado con el objetivo de aislar
1
https://www.tensorflow.org/, última fecha de revisión: noviembre del 2018
2
www.tensorflow.org/install/gpu
2.2 Conjunto de datos de entrenamiento 61
recursos como librerı́as y entorno de ejecución del sistema principal o de otros entornos
virtuales. Lo anterior significa que en la misma computadora, es posible tener instaladas
múltiples versiones de una misma librerı́a sin crear ningún tipo de conflicto.
Después de tener CUDA y CuDNN instalados y de haber creado el entorno virtual de python,
se procedió a la instalación de TensorFlow y Keras. Para este proyecto se instalo TensorFlow
versión 1.5.0 por ser compatible con CUDA 9 y cuDNN 7 3 y Keras versión 2.2.4 que es la
más actual hasta la fecha. Cabe mencionar que toda esta instalación se realiza por medio de
comandos desde la consola de python.
En Keras se ensamblan capas para construir modelos. En nuestro caso se usó Keras para
ensamblar las capas convolucionales, de max pooling y capas completamente conectadas que
se encargaron de abstraer y aprender las caracterı́sticas de las imágenes y fueron utilizadas
para el entrenamiento para el modelo.
Para que el proceso de aprendizaje de un modelo sea eficaz los conjuntos de entrenamiento
y validación deben contar con las siguientes caracterı́sticas :
La división del conjunto de datos en dos conjuntos es una buena idea, pero también se puede
reducir en gran medida las posibilidades de sobreajuste al dividir el conjunto de datos en los
tres subconjuntos que se muestran en los siguientes diagrama:
3
Consulte: https://www.tensorflow.org/install/sourcelinux
62 2 Aplicación
El conjunto de entrenamiento es la información que conoce la red, está formado por: datos de
entrenamiento y datos de validación, el mapa de Media Luna que corresponde el dato
de prueba, este conjunto contiene las imágenes que fueron utilizadas como ejemplos para
que los modelos lograran aprender. Cada subconjunto cuenta con dos etiquetas (también
llamadas clases): VSS y LOTE ; Estas etiquetas corresponden a ejemplos de imágenes de
techos de viviendas y de lotes respectivamente.
Como se muestra en la figura 2-3, el modelo recibe el conjunto de entrenamiento que co-
rresponde a 1365 imágenes (imágenes de viviendas recolectadas una a una de Google) de
entrenamiento que cuentan con las dos clases (VSS y lote) más 482 imágenes (otro paquete
recolectado una a una de Google) de validación que igualmente cuentan con las dos clases.
Eso significa que del total de datos que se tienen para el conjunto de entrenamiento (1847
imágenes), el 73.9 % se usaron como ejemplos para que el modelo aprendiera y el 26.1 % se
usó en el conjunto de validación. Estas cantidades se decidieron enfados en el área de es-
tudio y la clasificación necesaria, pues comprenden un muestreo suficiente para lo requerido.
Con ImageDataGenerator también podemos invertir las imágenes para que aprenda a dis-
tinguir direccionalidad nuestra Red Neuronal, esto es gracias al argumento horizontal flip.
La diferencia entre el generador para las imágenes de entrenamiento y las de validación, es que
en el generador para las imágenes de validación solo se le modificará el argumento rescale,
ya que cuando se le ingrese el mapa de la región y el modelo comience a hacer el recorri-
do por él, no queremos girar, invertir o hacerle zoom a la imagen, la queremos tal como está.
1. Para construir nuestra Red Neuronal, utilizamos TensorFlow y Keras (API de redes
neuronales que se ejecuta sobre TensorFlow).
2. Debido a que el modelo necesita reconocer objetos en una imagen satelital es necesario
el uso de Redes Neuronales Convolucionales,debido a que están especializadas en la
detección y categorización de objetos. Para más información consulte la sección 2.3.4.
4. Teniendo en cuenta que la salida que se requiere del modelo es un porcentaje de proba-
bilidad que la imagen a la que le está haciendo la predicción sea VSS o no, es necesario
el uso de la función de activación Softmax, puesto que esta función asigna probabili-
dades decimales a cada clase en un caso de clases múltiples. En nuestro caso, las clases
son VSS y lote. Softmax es un clasificador ubicado al final de la red neuronal que
66 2 Aplicación
hace una regresión logı́stica para regularizar las salidas a valores entre 0 y 1. Para más
información consulte la sección 2.3.3 (Funciones de activación).
5. Se sabe que los algoritmos de optimización más populares en la actualidad son Adam
y sus derivaciones. En este proyecto se compararon los rendimientos de las CNN uti-
lizando tres optimizadores diferentes: Adam, Adamax y Nadam para utilizar el que
mejor resultados daba.
Entrenamiento
Ya con los datos pre-procesados se comenzó a crear el modelo como una instancia tipo Se-
quential, que es un modelo tipo secuencial que nos proporciona Keras al que se le agregan,
como su nombre lo indica, capas en forma secuencial.
Iniciamos el modelo agregando una capa convolucional, que tiene una profundidad de 32
filtros. Estos filtros son los encargados de identificar bordes, sombras y contrastes en las
imágenes de entrada. Esta capa toma como entrada los pixeles de las imágenes de techos
de viviendas y de lotes del conjunto de entrenamiento, estas imágenes tienen un tamaño
de 60x60px cada una. Esto equivaldrı́a a 3.600 neuronas si fuera una imagen en escala de
grises (un solo color) y requiere un solo canal, pero como las imágenes del conjunto de
entrenamiento son a color, significa que necesitamos tres canales (Red, Green, Blue), esto
da un total de 60x60x3 = 10.800 neuronas de entrada para la primer capa convolucional.
Como esta capa tiene 32 filtro (un filtro es un conjunto de kernels), significa que obtendremos
32 matrices de salida, cada una de 60x60x3 dando un total del 345.600 neuronas para la
primer capa oculta de neuronas.Esto ayudará en el futuro a poder distinguir las VSS.
2.4 Entrenamiento de los modelos CNN y VGG16 67
Después de que la imagen realiza una convolución con un kernel aplica la función de acti-
vación, en este caso ReLu, teniendo en cuenta los criterios mencionados con anterioridad.
La segunda capa del modelo CNN es de max pooling, en esta capa se reduce la cantidad
de neuronas antes de hacer una nueva convolución. Esto se hace para quitarle el número de
conexiones y que no sea tan pesado para la Red Neuronal procesar esta información.
Hay dos tipos de pooling o agrupación:
Average pooling: Es similar al max pooling, solo que en vez de tomar el número más
grande en cada parche, toma el valor promedio de todos los números del parche.
Como a partir de la imagen de VSS de 60x60x3px tenemos una primer capa de entrada de
10.800 neuronas y después de la primer convolución obtenemos una capa oculta de 345.600
neuronas es necesario reducir la cantidad de neuronas antes de hacer una nueva convolución
con max pooling. Si se llegara a realizar una nueva convolución a partir de esta capa oculta
sin la reducción, el número de neuronas de la próxima capa crecerı́a de forma exponencial y
eso implicarı́a mayor procesamiento.
68 2 Aplicación
El max pooling reduce la cantidad de neuronas de la próxima capa, pero deja las carac-
terı́sticas más importantes que detectó cada filtro.
El tamaño del Max pooling es de 2x2. Esto quiere decir que se recorrerá cada una de las 32
imágenes de caracterı́sticas obtenidas anteriormente de 60x60x3px de izquierda a derecha,
arriba a abajo, pero en vez de tomar de a 1 pı́xel, se tomarán de 2x2 (2 de alto por 2 de
ancho = 4 pixeles) y se irá preservando el valor “más alto” de entre esos 4 pixeles (por eso
lo de “Max”). En este caso, usando 2x2, la imagen resultante es reducida “a la mitad”y
quedará de 30x30x3 = 2.700 pixeles. Luego de este proceso de Max Pooling solo quedarán
32 imágenes de 30x30x3px, pasando de haber tenido 345.600 neuronas a 86.400, la cantidad
se redujo de forma considerable, pero siguen almacenando la información más importante
para detectar caracterı́sticas deseadas.
Hasta aquı́ se ha realizado la primer convolución, esta consiste en recibir una imagen como
entrada, se pasa por un conjunto de filtros, se genera un mapa de caracterı́sticas y para
terminar se hace un Max pooling.
Para terminar, se toma la última capa oculta a la que se le hizo Max Pooling, que es “tri-
dimensional” por tomar la forma 15x15x64 (alto, ancho, profundidad) y se “aplana”, esto
significa que deja de ser tridimensional, y pasa a ser una capa de neuronas “tradicionales”,
es decir, de una sola dimensión que contiene toda la información de la CNN..Esta capa es
conocida como flatten.
La siguiente es una capa Dense o densa en las que especificamos un número de 256 neu-
ronas y que están conectadas a todas las neuronas de la capa pasada (flatten). En seguida
se agrega un Dropout pasando como parámetro ”0.5”. Esto lo que hará es que apagará el
50 % de las neuronas de la capa Dense en cada paso. Esto se hace para evitar sobreajustar
el modelo, ya que si todo el tiempo, todas las neuronas están activadas puede que la Red
Neuronal aprenda un camino en especı́fico para clasificar las clases. Entonces, si se le dice
que de manera aleatoria en cada paso solo active el 50 % de las 256 neuronas de la capa
densa, va a aprender caminos alternos para clasificar los datos y se queda un modelo que se
adapta mejor a información nueva.
A continuación se agrega otra capa densa, esta vez con 2 neuronas que corresponden al
número de clases que definimos: VSS y LOTE. Otro parámetro que se le da a la función es la
activación tipo softmax, esta lo que hará es decir la probabilidad de que sea cierta etiqueta,
por ejemplo, 95 % de probabilidad de que sea una VSS y un 5 % de que sea lote. Ası́ se puede
70 2 Aplicación
Para finalizar se hace uso de la función compile pasándole los parámetros para optimizar el
algoritmo. Le decimos que la función de pérdida, es decir, que el algoritmo vea qué tan bien
o qué tal mal va, va a ser categorical crossentropy.
De manera experimental se utilizaron tres optimizadores en esta CNN, para comparar el ren-
dimiento de cada modelo de aprendizaje y comparar resultados. La comparación se realizó
con los optimizadores Adam, adamax y Nadam. Cada optimizador tiene un learning
reader (lr), que es la taza de aprendizaje que usa el optimizador, esta no fue modificada,
sino que se le dejaron los valores predeterminados como recomiendan Keras en su documen-
tación.5 . Para finalizar, la métrica con la cual se va optimizando es accuracy, es decir el
porcentaje de qué tan bien está aprendiendo la Red Neuronal.
Con esto la Red Neuronal ya está lista, ya tenemos una capa de convolución con activa-
ción ReLu, seguida de un max pooling, seguida de otra capa de convolución, seguida de
otro max pooling; después se aplana toda la información, se envı́a a una capa densa con
256 neuronas, esta capa le manda la información a la siguiente capa que solo va a tener 2
neuronas por cada una de las clases (VSS y LOTE), que tiene una activación de Softmax y
ya sabe cómo va a aprender, va a medir qué tan bien va con categorical crossenttropy,
va a ir optimizándose con Adam, Adamax y Nadam y va a estar intentando mejorar con
accury, es decir, el porcentaje de imágenes que está clasificando bien.
En la figura 2-7 se observa un resumen del proceso por el que pasaron las imágenes de entrada
5
Consulte: https://keras.io/optimizers/
2.4 Entrenamiento de los modelos CNN y VGG16 71
en las capas de la CNN. Esta es una visualización obtenida por terminal del resumen de
entrenamiento entregado por la función fit generator.
Ahora solo falta entrenar la Red Neuronal, para esto se hace uso de la función fit generator
de la clase Convolution2D, a esta función se le pasan el conjunto de entrenamiento, se
especifica el número de pasos de entrenamiento que se van a tener en cada una de las épocas
y el número de pasos de validación. La configuración de los parámetros es la parte más
laboriosa del entrenamiento, ya que hay que hacerlo de forma manual y además confiar un
poco en la intuición. Se probaron varias configuraciones diferentes, con distintas épocas y
pasos de entrenamiento y validación, hasta dar con el más óptimo, esto se facilita un poco
gracias a la función EarlyStopping de Keras. Con esta función es posible monitorizar las
diferentes variables del modelo. La variable que nos interesa monitorizar es la ganancia de
validación, ya que su comportamiento es el indicador de si el aprendizaje de la CNN va
bien o mal. Para tener una buena ganancia de validación es necesario que este método vigile
la variable verificando que esta no deje de crecer y si deja de crecer, entonces detenga el
entrenamiento. La ganancia de validación debe ser lo más alta posible para que el modelo
de entrenamiento sea lo más preciso posible.
Experimentando con diferentes valores para los hiperparámetros del modelo, se llegó a la
conclusión de que el entrenamiento más óptimo requerı́a de ocho épocas de cien pasos en
cada una. Cuando termina el entrenamiento de cada época, el modelo corre cincuenta pasos
de validación y después pasa a la siguiente época.
72 2 Aplicación
La función fit gererator devuelve un objeto tipo History que tiene un registro de valores
de pérdida de entrenamiento y valores de métricas en épocas sucesivas, ası́ como valores de
pérdida de validación y valores de métrica de validación. En la figura 3-8 vemos un ejemplo
de la salida por terminal del modelo CNN entrenado en ocho épocas de cien pasos:
A continuación se muestran las gráficas facilitadas por Tensorboard de las ganancias y pérdi-
das del modelo CNN entrenado anteriormente. En las gráficas se pueden observan tres lineas
de colores diferentes, el color azul corresponde al comportamiento del entrenamiento de la
CNN utilizando el optimizador Adam, el naranja corresponde al entrenamiento utilizando
Adamx y el rojo para Nadam. En las gráficas se muestra el entrenamiento durante ocho
épocas de cien pasos cada una.
2.4 Entrenamiento de los modelos CNN y VGG16 73
La gráfica de la figura 2-11 es la que más nos interesa, la ganancia de validación, acá podemos
comprobar que con el optimizador Adamax se obtuvo una mejor ganancia de optimización
con un 0.979 % lo que nos garantiza que el modelo está bien entrenado y será preciso a la hora
de realizar las predicciones. Con el optimizador Adam se obtuvo una ganancia de validación
al llegar la época ocho de 1 %, esta es la ganancia más alta, sin embargo, se puede ver que la
variable bajo durante las épocas dos y cinco, lo que hace pensar que el modelo se sobreajustó
y no será del todo preciso a la hora de hacer predicciones. Con el optimizador Nadam fue el
que peor resultados se obtuvieron, la ganancia de validación se muestra inestable a lo largo
del aprendizaje del modelo aunque al terminar el entrenamiento llegó a una ganancia de
validación de 0.986.
Las gráficas proporcionadas por Tensorboard nos evidencian que el optimizador que mejores
resultados nos dio es: Adamax, ya que con este la evolución de las ganancias y pérdidas
tanto de entrenamiento como de validación fueron muy buenas en comparación a los otros
dos.
En este modelo obtuvimos una ganancia de validación bastante alta, de 99.79 %, lo que indica
que tenemos un buen modelo de entrenamiento. Este fue guardado junto con sus pesos para
la predicción.
En la siguiente imagen se muestra el grafo del modelo cnn:
Expandiendo los nodos del grafo principal tenemos los subgrafos que correspondes a cada
una de las capas de la red secuencial, como por ejemplo, las capas convolucionales, las de Max
Pooling, las capas densas, etc. A continuación se muestran los subgrafos obtenidos mediante
Tensorboard, desde que entran los datos en la primera capa convolucional hasta la última
capa densa. Se puede entender cómo pasan los datos por medio de cada una de ellas hasta
los nodos auxiliares donde se compila y entrena el modelo.
.
78 2 Aplicación
Entrenamiento
El modelo VGG16 (figura 2-21) es una red pre-entrenada de Keras bastante popular gracias
a su gran éxito en clasificación y detección de objetos en imágenes y videos, fue creada por
2.4 Entrenamiento de los modelos CNN y VGG16 81
Karen Simonyan y Andrew Zisserman en 2015[22]. Este modelo fue entrenado para clasificar
cerca de mil objetos, tiene una arquitectura de Red Neuronal de profundidad de 16 capas,
que emplea la función de activación ReLU y un número de núcleos de convolución 3x3[4].
Keras implementa el esquema arquetı́pico de las redes convolucionales clásicas: una serie de
convolucionces, Max Pooling, capas de activación y finalmente algunas capas de clasificación
(Softmax) completamente conectadas.
Para hacer uso del modelo VGG16, es necesaria la librerı́a aplications, esta librerı́a es la que
contiene todos los modelos pre-entrenados que nos ofrece Keras6 .
Una vez cargado el modelo, se modificó para ajustarlo a nuestras necesidades y ası́ aprendie-
ra a clasificar techos de viviendas y lotes. Esto fue considerado conveniente ya que el modelo
VGG16 es más elaborado al tener una gran profundidad de capas, esto quiere decir que con
este modelo se harán muchas más convoluciones que con el primer modelo, en total cinco
convoluciones.
El modelo VGG16 cuenta con 16 capas que harán un total de 5 convoluciones. Al final de
las capas se encuentra una capa densa, que una capa de clasificación para mil elementos,
esta también hace uso de la función de activación Softmax. Como las clases que necesitan
6
Para ver todos los modelos pre-entrenado de Keras consulte: https://keras.io/applications/
82 2 Aplicación
ser clasificadas en este proyecto son solo dos (VSS y LOTE), entonces reemplazamos ese mil,
por dos y esta serı́a la única modificación que se le harı́a al modelo.
Para crear la Red Neuronal comenzamos creando el modelo secuencial, al igual que el primer
modelo, con la diferencia que acá se le dice al modelo que decimos que por cada capa que
tenemos en VGG16, nos añada esa capa a nuestra Red Neuronal, esto se logra con la función
vgg.layers. Ahora como el modelo VGG16 hace predicción para mil objetos, necesitamos
modificar esa capa, por tanto se utilizó la función pop, que nos elimina esa última capa de
VGG16, que es la que hace la clasificación. Para posteriormente añadir una capa de clasi-
ficación pasándole dos neuronas que corresponden a nuestras dos clases y diciéndole que se
usará la función de clasificación Softmax.
Con la función layers se le dice al modelo que durante todo el entrenamiento qué tiene
que hacer para que aprenda a clasificar las viviendas, no queremos que las capas del mo-
delo VGG16 aprendan, ya que estas capas ya aprendieron en el pasado y tienen todos los
parámetros listos para ser utilizadas y no queremos que se modifiquen sus pesos.
Ya con esto tenemos la estructura para simplemente entrenar el modelo para estas dos
categorı́as, con toda la estructura pre-entrenada de VGG16. El resto de variables y atributos
del módulo son muy parecidos al modelos cnn, como el conjunto de datos de entrenamiento
y los hiperparámtros. Con la función fit generator ponemos a entrenar al modelo y al igual
que el primer modelo, este modelo y sus pesos fueron guardados en archivos de extensión
.h5 para ser usados posteriormente en la predicción.
Para compilar el modelo se utilizó el optimizador Adamax ya que en el primer modelo de-
mostró dar buenos resultados en el aprendizaje del entrenamiento. También se utilizó la
función de pérdida categorical crossentropy.
Para entrenar este modelo fue necesario experimentar modificando algunos hiperparáme-
tros como la cantidad de épocas, de pasos de entrenamiento y pasos de validación para llegar
al punto más óptimo del aprendizaje de entrenamiento. Sin embargo al ser un modelo tan
complejo, requiere mucha capacidad computacional, esto significa que se necesitan todos los
recursos del equipo y mucho tiempo para que complete su aprendizaje, por esta razón solo
fue posible entrenarlo por pocas épocas y pasos. Para poder comparar el aprendizaje de este
modelo con el primero se optó por entrenarlo durante cuatro épocas, cien pasos de entrena-
miento y cincuenta pasos de validación. Por la simplicidad de las imágenes en el conjunto
de entrenamiento, lo anterior no deberı́a ser un problema. Cuando se tienen imágenes de
gran resolución es necesario el entrenamiento con muchas épocas y pasos de entrenamiento
y validación para que logre reconocer todos los patrones de las imágenes y haga un correcto
aprendizaje.
2.4 Entrenamiento de los modelos CNN y VGG16 83
Las gráficas de las pérdidas y ganancias tanto de entrenamiento como de validación fue-
ron obtenidas gracias a Tensorboard, con estas será posible observar el comportamiento de
estas variables y ası́ poder realizar la comparación entre ambos modelos para ver cuál es el
mejor para realizar que haga la clasificación de Viviendas Sin Servicio y lotes en el mapa de
Media Luna.
A continuación se pueden observar las gráficas de las ganancias y pérdidas tanto del en-
trenamiento como de validación del modelo VGG16.
La ganancia de validación (figura 2-26) es muy baja, con un valor de 0.45, se mantiene
contante durante todo el entrenamiento, en definitiva, el modelo VGG16 no ha tenido un
2.5 Predicción 85
2.5. Predicción
Una vez entrenados los modelos, se cargan junto con el mapa de Media Luna para que
comience el proceso de predicción. Para lograr hacer el conteo de VSS en el mapa,es necesario
dividirlo en pequeños parches que sean de tamaño similar al de los techos que sirvieron de
ejemplos en el aprendizaje de la CNN, esto es de 60x60px. El mapa de Media Luna tiene
una resolución de 4800x2783px, lo que significa que el mapa se dividió en 3.680 parches de
60x60px.(Figura 2-27). Cada uno de estos recuadros se pasaron al modelo de predicción, en
este el modelo clasificó uno a uno estos parches, dando como salida la etiqueta con mayor
probabilidad. Si el modelo clasifica la imagen como ”VSS”, entonces se suma una unidad al
contador y ası́ recorriendo los 3.680 parches que componen la totalidad del mapa, obteniendo
como resultado el total de Viviendas Sin Servicio que vio en ese barrido por el mapa.
86 2 Aplicación
Para intentar dar solución al problema anterior lo que se experimentó fue hacer la pre-
dicción varias veces al mapa. Por cada vez que se hace una predicción sobre todo el mapa, se
inicia el recorrido en coordenadas diferentes. La primer predicción comienza en la coordena-
da (0,0) y da una salida y1 con el total de VSS que contó en el mapa. La segunda predicción
inicia en la coordenada (0,10) y da como resultado y2 . La cantidad de veces que se hace
clasificación sobre todo el mapa depende del tamaño de los parches. Como cada parche es
de 60x60px, lo que se quiso hacer fue iniciar el recorrido del mapa para un nuevo conteo
trasladando las coordenadas de inicio 10 pı́xeles hacia la derecha cinco veces y después hacia
abajo otras cinco veces, la razón de esto es porque después de recorrer 50 pı́xeles a la dere-
cha y hacia abajo, la rejilla queda en la posición inicial, recordando que cada parche es de
60x60px, dando un total de 25 salidas para cada predicción total del mapa. Como se tienen
2.5 Predicción 87
las imágenes clasificadas como VSS se guardan un arreglo nuevo que será verificado poste-
riormente con la función verificar. La salida de esta función es un número entero con el total
de viviendas que se contaron en todo el arreglo. Lo que hace la función verificar es pasar
estas imágenes nuevamente a la función predict para que vuelva a hacer una clasificación
sobre estas.
3 Comparación de los modelos
3.1. Discusión
En este capı́tulo se comparan los resultados obtenidos por los dos modelos de CNN vis-
tos durante el desarrollo de este proyecto. Para esto es necesario saber contra qué se van a
comparar los resultados obtenidos por los modelos. Recordando lo mencionado en el plantea-
miento del problema, se sabe que la unidad de Planeación Minero Energética de Colombia
(UPME) cuenta con una herramienta para la visualización de datos reportados por entida-
des territoriales y operadores de red, sin embargo, el inconveniente es que estas entidades no
cuentan con soportes para la validación de dicha información.
Como se puede ver en la figura 3-1, en Sitios UPME, al ver las viviendas a energizar en Media
Luna nos muestra un total de 186 viviendas. Estos datos pueden ser solo una aproximación,
un método que tienen entidades como la UPME para corroborar esta información es mediante
el método manual, el cual consiste en hacer el conteo directamente sobre el mapa. Con este
método contamos un total de 42 viviendas en el caserı́o de Media Luna, un datos bastante
lejano a las 186 viviendas que nos permite visualizar sitios UPME.
3.1 Discusión 89
En la figura 3-5 se puede apreciar como la ganancia es mucho mayor con el modelo CNN
(azul) respecto al modelo pre-entrenado de kerar, VGG16 (naranja), esto quiere decir que
incluso en la ganancia de entrenamiento es mejor el modelo cnn.
Es evidente que el modelo cnn tiene un porcentaje de perdida mayor a la del modelo vgg16
como se pude evidenciar en la figura 3-6, esto sigue siento indicador de que este no es el
mejor modelo para realizar las predicciones en todo el mapa.
Esta es definitivamente la variable que nos indica cuál es el mejor modelo, por esta razón fue
vigilada durante el entrenamiento, cuando esta deja de incrementar, significa que el modelo
se sobrecargó, por tanto el entrenamiento debe parar ahı́. Para el modelo VGG16 se mantuvo
constante, lo que ya daba malas señales de su proceso de aprendizaje.
92 3 Comparación de los modelos
Estos resultados pueden deberse al tipo de imágenes que se le pasaron al modelo. recordemos
que este modelo fue entrenado para encontrar patrones en imágenes de gran resolución, con
lo que es necesario el uso de grandes cantidad de capas para reducir la imagen. Como se
mencionó en la sección 2.3.4 las convoluciones reducen las imágenes a la mitad si se usa un
max pooling de tamaño 2x2, esto significa que para una imagen de 60x60 se le podrán hacer
un máximo de cuatro convoluciones. Después de esa cantidad la imagen ya no puede ser
reducida. Por esta razón el primer modelo fue más efectivo que el segundo.
No es necesario el uso de tantas capas cuando se tiene una imagen de pequeña resolución,
esto afecta el aprendizaje del modelo de forma drástica afectando de manera negativa sus
porcentajes de aprendizaje y pérdida.
En la siguiente tabla encontramos los datos obtenidos por los modelos entrenados durante
cuatro épocas, de esta manera podemos verificar qué modelo está mejor entrenado,las ga-
nancias y pérdidas tanto de entrenamiento como de validación del modelo vgg16 no tienen
tan buenos resultados como el primer modelo.
3.2 Observaciones 93
3.2. Observaciones
Es importante tener los datos de entrenamiento y validación, que son el conjunto de
entrenamiento del modelo de Deep Learning, Dividido en subgrupos de entrenamiento
y validación en las proporciones adecuadas para el correcto entrenamiento. Para este
trabajo se utilizaron 75 % de datos de entrenamiento y 25 % de datos de validación,
para un total de 1847 datos.
La precisión obtenida con el primer modelo fue superior con una ganancia de validación
del 99.79 % frente al 60 % del modelo pre-entrenado de Keras: VGG16.
La capa de ajuste en el primer modelo que realiza corrección, mantiene época tras época
la precisión asemejada a la realidad algo que se iguala con el calculo de veracidad en
el modelo VGG16.
Acelerando las redes neuronales convolucionales usando GPUs los frameworks de Deep
Learning permiten a los investigadores crear y explorar redes neuronales convolucio-
nales y otras redes neuronales profundas fácilmente, al tiempo que ofrecen una alta
velocidad necesaria para los experimentos.
Las redes neuronales convolucionales han demostrado ser confiables a la hora de obtener
un modelo que detecte techos de Viviendas Sin Servicio, esto da una posible solución
al problema de tener un censo en regiones rurales del paı́s y ahorrando costos.
4 Aplicación Web
En este capitulo trataremos el tema de la aplicación web, que tiene como objetivo, dar una
herramienta a un usuario final que será el que necesita el total de Viviendas Sin Servicio
para diferentes proyectos.
Como se vio en la sección 2.4.3, flask es una herramienta escrita en python que permite
la creación de aplicaciones web básicas y minimalistas, pero funcionales. Para intentar dar
solución a la problemática que tienen algunas organizaciones como la Unidad de Planeación
Minero Energética de Colombia (UPME), se hizo una aplicación web en la que el usuario
puede subir el mapa a través de la plataforma y ver la cantidad de viviendas detectas que
detecta en él. Esto aplica para el mapa de Media Luna o mapas con caracterı́sticas similares,
teniendo en cuenta el conjunto de entrenamiento utilizado para la creación de los modelos
de clasificación. Esta herramienta proporciona una interfaz gráfica con un entorno visual
sencillo.
1. Al ingresar a la ruta, se le mostrará una vista como la de la figura 4-1. Allı́ podrá
encontrar el texto descriptivo de la aplicación y la sugerencia de que el mapa debe ser
tomado a una altura de 728 metros para que el modelo haga una predicción óptima.
En caso contrario habrán fallas al no hacer una coincidencia entre los tamaños de las
imágenes y el resultado estará alejado de la realidad.
2. Al dar clic en el botón seleccionar archivo se desplegará una ventana donde usted
deberá buscar la ruta de su mapa. Seleccione y dele clic al botón abrir como se indica
en la figura 4-2.
3. Una vez se haya cargado el mapa en la aplicación, esta lo mostrará en la vista como se
muestra en la figura 4-3. Ahora solo debe dar clic en el botón Detectar y contar y
la aplicación comenzará a recorrer el mapa parche a parche (parches de 60x60px), este
proceso tardará un tiempo.
Como se puede ver, esta es una aplicación bastante minimalista, pero intuitiva y funcional.
Ası́ que el usuario no va a tener mayor inconveniente al usarla correctamente mientras siga
las indicaciones.
5 Conclusiones
La comparación de diferentes modelos de predicción es una parte fundamental a la
hora de analizar su eficacia y ver cual se adapta mejor a los resultados esperados.
El primer modelo demostró que con pocas convoluciones se puede lograr una buena
extracción de atributos de una imagen simple y de pequeña escala, como el caso de
las imágenes de techos de Viviendas Sin Servicio que formaron parte del conjunto de
entrenamiento, dando como resultado una precisión en el porcentaje de validación del
entrenamiento de 99.79 %.
El primer modelo tiene un alto porcentaje de precisión en sus predicciones, sin embargo,
la forma en que es recorrido el mapa puede llegar a generar impresión en la cantidad
de viviendas detectadas por la aplicación.
Contar con una herramienta de Deep Learning que sea capaz de mostrar la cantidad
de viviendas que detectó en un mapa de una zona rural podrı́a ahorrar altos costos y
100 5 Conclusiones
agilizar los procesos de estudios y proyectos realizados por diferentes entidades con el
objetivo de ayudar a la población.
6 Anexos
Stuart Russell y Peter Norvig diferencian estos tipos de la inteligencia artificial, los cua-
les están contenidos dentro de las enfoques anteriormente mencionados. Los sistemas que
piensan como humanos, tratan de emular el pensamiento humano; por ejemplo las redes
neuronales artificiales, resolución de problemas y aprendizaje, etc. Para los sistemas que
actúan como humanos buscan simular esto mismo; es decir, imitan el comportamiento hu-
mano; por ejemplo la robótica, que busca lograr que los computadores realicen tareas que,
por el momento, los humanos hacen mejor.
Por otra parte están los sistemas que piensan racionalmente, mediante lógica (idealmente),
tratan de imitar o emular el pensamiento lógico racional del ser humano; por ejemplo los
sistemas expertos. El estudio de los cálculos que hacen posible percibir, razonar y actuar.
Finalmente los sistemas que actúan racionalmente que intentan emular de forma racional el
comportamiento humano; por ejemplo los agentes inteligentes.
Definir el problema
Analizar el problema
6.1 Inteligencia Artificial 103
de la imagen puede tener 28 = 256 posibles colores distintos, en donde 0 corresponde al color
negro, 255 al color blanco y se encuentran 254 diferentes tonos de gris intermedios [36].
Las caracterı́sticas de una imagen satelital son: Estructura, resolución, precisión, escala y las
combinaciones de color
“... un sistema de computación hecho por un gran número de elementos simples, ele-
mentos de proceso altamente interconectados, los cuales procesan información por me-
dio de su estado dinámico como respuesta a entradas externas.” Robert Hecht-Niesen,
1988.
Programar tal red puede significar sólo dos cosas: a) Las estructuras de interconexión entre
las células son alteradas, y b) Las “fuerzas”de estas interconexiones son cambiadas [20].
Operación en tiempo real: Los computadores neuronales pueden ser realizados en pa-
ralelo y se diseñan y fabrican máquinas con hardware especial para obtener esta capa-
cidad.
Dentro de lo que se entiende por inteligencia artificial, una de las ramas más prometedoras
es la que corresponde a las denominadas redes de auto-proceso, entendiendo como tales
aquellas formadas por nodos en los que hay elementos procesadores de información de cuyas
interacciones locales depende el comportamiento del conjunto del sistema.
Como indica la figura 6-2 , dentro del campo de la inteligencia artificial, existen dos grandes
ramas de las redes de auto-proceso: Procesamiento numérico y procesamiento simbólico:
Para terminar de situar la teorı́a de redes neuronales dentro del mundo de la “computación.en
general, y frente a la IA en particular, en la siguiente tabla se resume y sintetiza parte de las
ideas vistas hasta ahora acerca de las redes neuronales y las diferencias existentes respecto
a la computación convencional y a la computación simbólica. Se muestran las diferencias en
función de la teorı́as en las que se basan, en los campos para las que son y no son apropiadas,
el tipo de memoria que utilizan, cómo se construyen y qué tipo de soporte utilizan.
El estudio de redes neuronales sirve para comprender cómo funciona realmente el cerebro
humano, esto es necesario a la hora de diseñar un modelo de cómputo paralelo inspirado en
las neuronas y sus sinapsis (conexiones) adaptativas.1 . El cerebro humano es la inspiración de
las redes neuronales artificiales, las RNA pretenden modelar la estructura y funcionamiento
de algunas partes del sistema nervioso animal.
Lóbulo frontal: Razonamiento, planificación, función ejecutiva, partes del habla, emo-
ciones y resolución de problemas. Además, la corteza motora primaria que dispara el
movimiento junto con el lóbulo parietal y el cerebelo. La memoria se distribuye apa-
rentemente por todo el cerebro y el cerebelo, y potencialmente incluso en partes del
tronco cerebral y más allá.
6.1.4. Neurona
Neurona biológica
Las neuronas, junto con las células gliales, hacen parte de los sistemas nerviosos central y
periférico. Mediante estos sistemas los animales se comunican con el medio que les rodea,
tanto captando estı́mulos como emitiendo señales a los músculos para mover partes de su
organismo o desplazarse. Las neuronas son las principales encargadas de realizar estas fun-
ciones puesto que están especializadas en la recepción, procesamiento y emisión de
información mediante mecanismos quı́micos y eléctricos que están asociados a su membra-
na plasmática.
Estas funciones no las puede realizar una célula individualmente sino que lo hacen grupos
más o menos numerosos de neuronas conectadas entre sı́ formando circuitos. Dentro de
cada circuito, las neuronas se comunican entre ellas principalmente mediante unas especiali-
zaciones en sus membranas celulares denominadas, gracias a las cuales se establecen dichos
circuitos neuronales (sinapsis)[13].
Figura 6-7: Imagen de una neurona de la corteza cerebral de una rata impregnada con la
técnica de Golgi [8].
Las neuronas poseen la morfologı́a más diversa y compleja en comparación con las demás
células del cuerpo. Las neuronas están dividas en tres partes: soma, dendritas y axón como se
puede apreciar en la imagen anterior. El tamaño y forma del soma, la densidad y organización
de las dendritas, ası́ como la disposición, longitud y patrón de ramificación de los axones son
diferentes para cada tipo de neurona[13].
Neurona Artificial La neurona artificial, célula o autómata, es un elemento que posee un
estado interno, llamado nivel de activación, y recibe sefiales que le permiten, en su caso,
cambiar de estado [39].
110 6 Anexos
Las neuronas artificiales se modelan mediante unidades de proceso, caracterizadas por una
función de activación que convierte la entrada total recibida de otras unidades en un valor
de salida, el cual hace la función de la tasa de disparo de la neurona. Cada unidad de proceso
se compone de una red de conexiones de entrada, una función de red (de propagación),
encargada de computar la entrada total combinada de todas las conexiones, un núcleo central
de proceso, encargado de aplicar la función de activación, y la salida, por dónde se transmite
el valor de activación a otras unidades[21].
y = x1 w1 + x2 w2 + ... + xn wn
P
y= (pesos ∗ entradas) + bias
Las señales E son procesadas además por una función llamada función de activación, esta
produce la señal de salida de la neurona.
Las neuronas artificiales y las biológicas tienen en común el hecho de que establecen conexión
con otras neuronas vecinas para el envió y la obtención de información, ambas reciben
información de varias entradas para generar una sola salida. La neurona artificial captura
señales mediante sensores simulando al axón en la neurona biológica.
A continuación tenemos una tabla comparativa entre neuronas artificiales y biológicas:
Tanto las redes neuronales biológicas como las redes neuronales artificiales tienen el mismo
funcionamiento de comunicación, con una estructura muy similar solo que cada una con sus
respectivos nombres. Ambas utilizan una potencia máxima y mı́nima para lograr la comu-
nicación.
En la siguiente figura se muestra un ejemplo de una unidad tı́pica de proceso de una Red
Neuronal Artificial. Al lado izquierdo de la red está una serie de entradas al perceptrón,
cada una llega de la salida de otro perceptrón de la red. una vez calculada la salida de un
perceptrón, ésta se propaga por medio de conexiones de salida a los perceptrones destino.
Todas las conexiones de salida reciben el mismo valor de salida[33].
A la forma en que los perceptrones se conectan entre sı́ se le llama patrón de conectividad
o arquitectura de la red. La estructura básica de interconexión entre neuronas artificiales
es la de multicapa. Esta es una estructura de implementación del paradigma conocido como
Retro-Propagación [33].
El esquema de funcionamiento de una red neuronal por capas puede describirse mediante la
ecuación:
e · W1 ) · w2 )
Se = F (F (X
El modelo necesita saber qué forma de entrada debe esperar. Por esta razón, la pri-
mera capa en un Sequential (y solo la primera, porque las siguientes capas pueden
hacer inferencia automática de formas) necesita recibir información sobre su forma de
entrada. Esto se puede hacer con los parámetros input shape que indica la entrada
es una tupla de enteros o none indica que se puede esperar cualquier entero positi-
vo, la dimensión no esta incluida. ALgunas capas 2D y 3D como Dense, admiten la
especificación de su forma de entrada a través del argumento input dim, se declaran ası́:
model = Sequential ()
model.add(Dense(32, input shape = (784,)))
Compile
Antes de entrenar un modelo, debe configurar el proceso de aprendizaje, que se realiza
a través del método compilación. Recibe tres argumentos:
114 6 Anexos
Predict
Genera predicciones de salida para las muestras de entrada. Predice la clasificación de
nuevas imágenes. Para ello, se utiliza algunas imágenes del conjunto de prueba, que
son cargadas como matrices en numpy para ser utilizadas. El cálculo se realiza en lotes.
Estas predicciones se realizan luego de entrenar un modelo final, y se declaración se
hace ası́:
Donde x es un vector o matriz de entrada, seguido por el tamaño del lote, modo de
verbosidad, (0 o 1), el número total de pasos (lotes de muestras) y finalmente si adiciona
o no una lista instancias keras.Callback.
Fit generator
Entrena el modelo en los datos generados lote por lote por un generador de Python (o
una instancia de Sequence). A diferencia de la función fit, fit generator esta diseñado
para grandes cantidades de datos y funciona multiproceso. El generador se ejecuta en
paralelo al modelo, por eficiencia. Por ejemplo, esto le permite hacer un aumento de
6.2 Librerı́as Keras 115
model.f it generator(generate arrays f rom f ile(0 /my f ile.txt0 ), steps per epoch =
10000, epochs = 10)
6.2.2. Layers
Convolution 2D
Crea un núcleo de convolución para producir un tensor de salida, la convolución 2D
es solo una extensión de la convolución 1D mediante la convolución de las direcciones
horizontal y vertical en el dominio espacial bidimensional. La convolución se utiliza
con frecuencia para el procesamiento de imágenes, como el suavizado, el enfoque y la
detección de bordes de las imágenes.
Esto se realiza multiplicando y acumulando los valores instantáneos de las muestras
superpuestas correspondientes a dos señales de entrada, una de las cuales se invierte dos
veces. Esta definición es aplicable para convolución 1D, excepto una de las entradas
se invierte solo una vez. La convolución puede entenderse como una señal se puede
descomponer en una suma de funciones de impulso (delta) escaladas y desplazadas.
Max pooling 2D
Max pooling es un proceso de discretización basado en muestras que tiene como objeti-
vo muestrear una representación de entrada (imagen, matriz de salida de capa oculta,
etc.), reduciendo su dimensionalidad y permitiendo hacer suposiciones sobre las ca-
racterı́sticas contenidas en las sub-regiones agrupadas. Esto se hace, en parte, para
ayudar al ajuste excesivo al proporcionar una forma abstracta de la representación.
Además, reduce el costo computacional al reducir el número de parámetros a aprender
y proporciona una invarianza de traducción básica a la representación interna.
La agrupación máxima se realiza aplicando un filtro máximo, ventana móvil o recuadro
mudable a (generalmente) sub-regiones no superpuestas de la representación inicial.
Este hace dos cosas principales:
• Reduce la cantidad de parámetros dentro del modelo y cuando la salida es más
pequeña que la entrada se denomina muestreo descendente o sub-muestreo.
• Generaliza los resultados de un filtro convolucional, lo que hace que la detección
de caracterı́sticas sea invariante a los cambios de escala u orientación.
Es decir que en una matriz 4x4 que representa la entrada inicial, y al ejecutar un filtro
2x2 sobre la entrada se obtiene un paso en 2D dx, dy y no se superpondrán las regiones.
Para cada una de las regiones representadas por el filtro, se toma el el máximo de esa
región y es generada una nueva matriz de salida donde cada elemento es el máximo de
una región en la entrada original.
Flatten
Esta capa convierte la imagen de tres dimensiones a una sola, convierte los elementos
de la matriz de imágenes de entrada en un array plano sin afectar el lote, hereda de
la clase layer. El propósito de este argumento es preservar el orden de peso al cambiar
un modelo de un formato de datos a otro.
Esta propiedad se invoca luego de que los datos fueron procesados por una capa de
superior de convolución. Se invoca con la función add, ası́:
model.add(F latten())
Dropout
Es un método de regularización que minimiza el riesgo del sobre-entrenamiento de
una red neuronal mediante la eliminación de unidades de cada una de las capas que
componen la red. Para esto utiliza una perturbación a cada minibatch (pequeños lotes
equivalentes, que dividen la información ingresada). Se declara ası́:
Donde
• rate: Dı́gito flotante entre 0 y 1. Fracción de las unidades de entrada.
• noise shape: Tensor entero 1D que representa la forma de la máscara de omisión
binaria que se multiplicará con la entrada. Por ejemplo, si sus entradas tienen
forma (batch size, timesteps, features) y desea que la máscara de desactivación sea
la misma para todos los pasos de tiempo, puede usar la (noise shape=(batch size,
1, features).
• seed: Un entero de Python para usar como semilla aleatoria.
Este método se puede utilizar en cualquier tipo de capa, sin embargo se puede utilizar
únicamente sobre capa de entrada o capa visible, no sobre la de salida.
El proceso consiste en que en cada etapa de entrenamiento, los nodos individuales
se eliminan de la red dependiendo su probabilidad, quedando una red reducida.Al
eliminarse al azar la mayor cantidad de unidades, mejora la generalización de la red y
facilita que la información sea clasificada de forma más inmediata y este más cerca al
resultado esperado.
Dense
Esta función añade una capa oculta (hidden layer) de la red neuronal, una capa total-
mente conectada. Implementa la operación:
118 6 Anexos
model = Sequential()
Configuramos el modelo para que tome matrices de entrada de forma (*, 16) y matrices
de salida de forma (*, 32), ası́:
model.add(Dense(32))
6.2.3. Preprocessing.image
ImageDataGenerator
Es un API que define la configuración para la preparación y el aumento de datos de
imágenes. En lugar de realizar las operaciones en su conjunto de datos de imagen
en la memoria, la API está diseñada para ser iterada por el proceso de ajuste del
modelo de aprendizaje profundo, creando datos de imagen aumentados para usted
justo a tiempo. Esto reduce la sobrecarga de memoria, pero agrega un costo de tiempo
adicional durante el entrenamiento del modelo.
Keras proporciona esta clase que define la configuración para la preparación y el au-
mento de datos de imágenes e incluye capacidades como:
• Estandarización de caracterı́sticas, estandarizar los valores de pı́xeles en todo el
conjunto de datos. Se puede realizar utilizando los argumentos featurewise center
y featurewise std normalization.
• Blanqueamiento ZCA, una transformación de blanqueamiento de una imagen es
una operación de álgebra lineal que reduce la redundancia en la matriz de imágenes
de pı́xeles. Es utilizada mediante el argumento zca whitening.
6.2 Librerı́as Keras 119
6.2.4. Aplications
Aplication de Keras son modelos de Deep Learning que están disponibles junto con sus pesos
pre-entrenadas. Estos modelos se pueden usar para predicción, extracción de caracterı́sticas
y ajuste fino. Los pesos se descargan automáticamente al crear una instancia de un modelo.
Se almacenan en /.keras/models/.
Modelos disponibles
Xception
VGG16
VGG19
InceptionV3
InceptionResNetV2
MobileNet
MobileNetV2
120 6 Anexos
DenseNet
NASNet
Todas estas arquitecturas son compatibles con todos los backends (TensorFlow, Theano y
CNTK), y al crear una instancia, los modelos se construirán de acuerdo con el formato de
datos de imagen establecido en su archivo de configuración de Keras en /.keras/keras.json.2
6.3. GPU
Consultando varios artı́culos de investigación sobre los temas de Deep Learning y redes neu-
ronales convolucionales, descubrimos la existencia de la competición de Imagenet y de los
resultados del equipo de la universidad de Toronto en la competición el año 2012 [57] . La
competición ImageNet (Large Scale Visual Recognition Challenge [29] ) se realizaba desde
el 2010, y por aquel entonces se habı́a convertido en un referente en la comunidad de visión
por computador para el reconocimiento de objetos a gran escala. En 2012 Alex Krizhevsky,
Ilya Sutskever y Geoffrey E. Hilton emplearon por primera vez aceleradores hardware GPU
(graphical processing units) [66] , usados ya en ese momento en los centros de supercompu-
tación para aumentar la velocidad de ejecución de aplicaciones que requieren realizar muchos
cálculos. Por ejemplo, en aquella época el BSC disponı́a ya de un supercomputador llamado
MinoTauro, de 128 nodos Bull505, equipados con 2 procesadores Intel y 2 GPUs Tesla M2090
de NVIDIA cada uno de ellos. Con un rendimiento pico de 186 Teraflops 3 , puesto en marcha
en septiembre del año 2011. Hasta el 2012, el incremento de capacidad de computación que
cada año conseguı́amos de los ordenadores era gracias a la mejora de la CPU. Sin embargo,
desde entonces el incremento de capacidad de computación para Deep Learning no ha sido
solo gracias a ellas, sino también a los nuevos sistemas masivamente paralelos basados en
aceleradores GPU, que resultan decenas de veces más eficientes que las CPU tradicionales.
Las GPU se desarrollaron originalmente para acelerar el juego 3D que requiere el uso repe-
tido de procesos matemáticos que incluyen distintos cálculos sobre matrices. Inicialmente,
compañı́as como Nvidia y AMD desarrollaron estos chips rápidos y masivamente paralelos
para tarjetas gráficas dedicadas a videojuegos: pronto se vio que las GPU útiles para juegos
3D. Eran muy adecuadas también para acelerar cálculos sobre matrices numéricas; por ello,
este hardware en realidad benefició a la comunidad cientı́fica, y en el 2007 Nvidia lanzó el
lenguaje de programación CUDA [37] para poder programar sus GPU. Gracias a ello, cen-
tros de investigación en supercomputación como el BSC empezaron a usar clusters de GPU
para acelerar aplicaciones numéricas. Pero como veremos en este libro, las redes neuronales
artificiales básicamente realizan operaciones matriciales que son también altamente parale-
lizables. Y esto es lo que hizo en 2012 el equipo de Alex Krizhevsky: entrenó su algoritmo
2
para más información de los modelos de keras consulte: https://keras.io/applications/
3
TeraFlops es una medida de rendimiento en informática, especialmente en cálculos cientı́ficos. Se refiere a
1.000.000.000.000 operaciones en coma flotante por segundo.
6.3 GPU 121
Deep Learning AlexNet con GPU [4]. Desde entonces se empezaron a usar las GPU para
esta competición, y en estos momentos todos los grupos que investigan en Deep Learning
están usando este hardware o alternativas equivalentes que han aparecido recientemente.
Figura 6-16: Tiempo total de entrenamiento del modelo en relación con la GPU [67]
Aquı́, la GPU es la más rápida de todas las configuraciones de la plataforma, pero hay otras
tendencias curiosas: el rendimiento entre 32 vCPU y 64 vCPU es similar, y la biblioteca
compilada TensorFlow es de hecho una mejora significativa en la velocidad de entrenamiento
pero solo para 8 y 16 vCPUs.
Ahora, veamos el mismo conjunto de datos con un enfoque de red neuronal convolucional
para la clasificación de dı́gitos:
122 6 Anexos
Figura 6-17: Tiempo total de entrenamiento del modelo en relación con la GPU [67]
Como es lógico, las GPU son más del doble de rápidas que cualquier enfoque de CPU en las
CNN.
Bibliografı́a
[1] Piec (2013-2017) página: 53. accedido el 15-06-2018.
[21] k. y Juliet G.., L. AnalogÍa entre las redes neuronales biolÓgicas y artificiales. url
https://rneuronales.wordpress.com/, 2012.
[22] Karen Simonyan, A. Z. Very deep convolutional networks for large-scale image
recognition, 2015.
[24] Kentish, B. Bill gates starts new project using satellites to help people after natural
disasters, ee.uu: Indepent, 2017.
[25] Keras. Getting started with the keras sequential model. urlhttps://keras.io/getting-
started/sequential-model-guide/.
[27] Kingma, D. P., and Ba., J. L. Adam: a method for stochastic optimization, 2015.
[28] Krizhevsky, Sutskever, and Hinton, E. Imagenet classification with deep con-
volutional neural networks, 2012.
[31] LeCun, Y., Huang, F., and Bottou, L. Learning methods for generic object recog-
nition with invariance to pose and lighting. in: Computer vision and pattern recognition.
cvpr, 2004.
Bibliografı́a 125
[34] Michael. Ranking popular deep learning libraries for data science.
urlhttps://blog.thedataincubator.com/2017/10/ranking-popular-deep-learning-
libraries-for-data- science/, 2017. accedido el 15-06-2018.
[46] Rosenblatt, F. The perceptron: a probabilistic model for information storage and
retrieval in the brain. psychological review, 1958.
[47] R.Rubio. .aplicaciones médicas de las redes neuronales”. novatica, vol.16., 1990.
126 Bibliografı́a
[48] Sharma., R. What is the differences between artificial neural network, computer
science, and biological neural network, 2017.
[54] Sutskever, and Hinton, G. Imagenet classification with deep convolutional neural
networks. advances in neural information processing systems, 2012.
[59] Torres, J. Hello world en tensorflow - para iniciarse en la programación del deep
learning, 2016.
[60] Torres, J. Deep learning, introducción práctica con keras, primera parte, 2018.
[62] Varshney, George H. Che, A. N. Targeting villages for rural development using
satellite image analys, 2015.
[63] Vedaldi, Lenc, and Matconvnet, K. Convolutional neural networks for matlab.
acm multimedia, open source software competition, 2015. Oxford University.
[65] Walia., A. S. Types of optimization algorithms used in neural networks and ways to
optimize gradient descent. urlhttps://towardsdatascience.com/types-of-optimization-
algorithms-used-in-neural-networks-and-ways-to-optimize-gradient-95ae5d39529f, 2017.
[67] Woolf, M. Benchmarking tensorflow on cloud cpus: Cheaper deep learning than cloud
gpus. url Disponible en: https://minimaxir.com/2017/07/cpu-or-gpu/, 2017.
[68] Yoshua, B., Aaron, C., and Pascal, V. Representation learning: A review and
new perspectives, 2013.