• No se han encontrado resultados

Herramienta para el soporte asistido en el diseño y procesamiento de redes neuronales

N/A
N/A
Protected

Academic year: 2020

Share "Herramienta para el soporte asistido en el diseño y procesamiento de redes neuronales"

Copied!
95
0
0

Texto completo

(1)

UNIVERSIDAD NACIONAL DEL CENTRO DE LA

PROVINCIA DE BUENOS AIRES

FACULTAD DE CIENCIAS EXACTAS

Trabajo Final de la carrera de Ingeniería de Sistemas

Herramienta para el soporte asistido en el

diseño y procesamiento de redes neuronales

Alejo Timoteo Gonzalez

(2)

Índice de Contenido

Resumen 3

Capítulo 1: Introducción y motivación 4

1.1 Problemática 6

1.2 Solución propuesta 7

1.3 Organización del trabajo 8

Capítulo 2: Marco teórico 10

2.1 Machine Learning 10

2.2 Deep Learning 11

2.3 Redes Neuronales Artificiales 11

3.4 Neuronas Artificiales 13

2.5 Funciones de activación 15

2.6 Capas Neuronales 21

2.7 Métricas: 25

Capítulo 3: Trabajos Relacionados 29

3.1 Descripción de aplicaciones 29

3.1.1 DIANNE 29

3.1.2 DARVIZ 32

3.1.3 NVIDIA DIGITS 34

3.2 Comparación entre aplicaciones 36

3.2.1 Criterios de evaluación: 37

3.2.2 Tabla comparativa: 37

3.2.3 Conclusiones: 38

Capítulo 4: Diseño de la herramienta 39

4.1 Introducción 39

4.2 Problemática actual 39

4.3 Objetivo de la herramienta 39

4.4 Lenguaje de Programación y bibliotecas externas 40

4.5 Diseño de la herramienta 42

4.6 Preproceso 44

4.6.1 Caso de ejemplo 48

4.7 Proceso 49

4.7.1 Definición del modelo 49

4.7.2 Compilación del modelo 52

4.7.3 Entrenamiento del modelo 55

(3)

Capítulo 5: Casos de Estudio 59

5.1 Descripción de las pruebas 59

5.2 DataSet de entrada 59

5.3 Hardware utilizado para procesamiento 63

5.4 Casos de Estudio 64

5.4.1 Caso de Estudio 1 64

5.4.2 Caso de Estudio 2 67

5.4.3 Caso de Estudio 3 74

5.4.4 Caso de Estudio 4 77

5.4.5 Caso de Estudio 5 83

5.5 Análisis de resultados 88

Capítulo 6: Conclusiones 90

6.1 Contribuciones 90

6.2 Limitaciones 90

6.3 Trabajos futuros 91

(4)

Resumen

En este documento se detalla el trabajo final de la carrera Ingeniería de Sistemas, llamado Herramienta para el soporte asistido en el diseño y

procesamiento de redes neuronales. Mediante este trabajo se desarrolló una herramienta denominada NeuralPy que permite de forma didáctica asistir a los usuarios en la construcción y ejecución de redes neuronales destinadas a la clasificación de secuencias de texto.

Para la implementación de esta herramienta se combinaron diferentes bibliotecas de alto nivel de Deep Learning, logrando crear una aplicación que disminuye el nivel de dificultad para los usuarios que cuentan con poco

conocimiento en esta área. Logrando de esta forma ser NeuralPy una herramienta importante para la capacitación en el área de Deep Learning mediante la realización de pruebas.

(5)

Capítulo 1: Introducción y motivación

El mundo se está reconfigurado silenciosamente con Machine Learning

(aprendizaje automático). Ya no es necesario enseñar a las computadoras cómo realizar tareas complejas como el reconocimiento de imágenes o la traducción de textos, en su lugar se construyen sistemas que les permiten aprender a hacerlo ellos mismos. "No es mágico", dice Greg Corrado, un científico investigador en el área de neurociencia biológica en Google. "Es sólo una herramienta. Pero es una herramienta realmente importante " [1].

La forma más poderosa de aprendizaje de máquinas que se utiliza hoy en día, llamada Deep Learning (aprendizaje profundo), construye una compleja estructura matemática llamada red neuronal basada en grandes cantidades de datos. Diseñado para ser análogo a cómo funciona un cerebro humano, las redes neuronales mismas se describieron por primera vez en la década de 1930. Pero en los últimos tres o cuatro años las computadoras se han convertido en lo suficientemente poderosas como para utilizarlas de manera efectiva [1].

Estos algoritmos para la enseñanza de una máquina, permiten completar las tareas y clasificar, cita de varias décadas atrás. La diferencia entre ahora y cuando se inventaron los primeros modelos, es que cuanta más información se introduce en los algoritmos, más precisos se vuelven. En las últimas décadas se ha visto una escalabilidad masiva de datos e información, lo que permite predicciones mucho más precisas.

Nuevas técnicas en el ámbito del aprendizaje de máquina - que en su mayoría implican la combinación de piezas que ya existían en el pasado - han permitido poder realizar grandes investigaciones en el área de Deep Neural Networks (DNN). A su vez el uso de computadoras con mayor nivel de proceso han permitido a los investigadores ampliar su conocimiento en el aprendizaje de máquina, hasta el punto de que las máquinas están superando a los seres humanos para tareas difíciles, pero estrictamente definidas, tales como el reconocimiento de rostros o jugar el antiguo juego de mesa chino Go [2].

A partir del mes de diciembre de 2016 la empresa DeepMind 1perteneciente a Google y OpenAi 2 del grupo de empresas Elon Musk ofrecen al público soluciones de Machine Learning e inteligencia artificial desarrollada para aprender a resolver diferentes retos. “ … DeepMInd Lab es una plataforma similar a un entorno

(6)

de juego tridimensional adaptado para la investigación de Inteligencia Artificial basada en agentes..” según esta detallado en su blog oficial .3

El aprendizaje automático tiene varias aplicaciones muy prácticas en la actualidad, por ejemplo un caso muy importante es la mejora en la atención de la salud pública [3], dicho caso se remonta a la idea de la epidemiología. La idea de que al estudiar las estadísticas de conjuntos de datos, en particular los conjuntos de datos relativos a un gran número de personas, se pueden encontrar patrones que podrían indicar las causas de las enfermedades, la eficacia o efectos secundarios de los fármacos, y así sucesivamente. Llevar a cabo la epidemiología en una escala sin precedentes podría llevar a tener un efecto muy profundo en asistencia sanitaria como antibióticos o radiografías [4].

Otro uso en aplicaciones se refiere al reconocimiento de imágenes por ejemplo “Automatic Portrait Segmentation for Image Stylization” [5], los avances en esta área son transferibles en diferentes productos, como la búsqueda de fotos e imágenes en Google, la búsqueda de videos en YouTube, coches de auto-conducción y cualquier lugar donde es útil entender lo que está en una imagen así como dónde están las cosas.

Las anteriores son algunas de las muchas áreas en las que se ha introducido

Machine Learning, estos avances tecnológicos impulsan a resultados reales de negocio - como el ahorro de tiempo y dinero - que tienen el potencial de afectar de una forma poderosa el futuro de una organización. En interacciones, se ve un gran impacto dentro de la industria en la atención a clientes, mediante la cual el aprendizaje de máquina está permitiendo a la gente hacer las cosas de manera más rápida y eficiente. A través de soluciones asistente virtual, el aprendizaje automático, automatiza las tareas que de otro modo deben ser realizados por un agente en vivo - cómo cambiar una contraseña o comprobar el saldo de cuenta. Esto libera tiempo valioso a los agentes que se puede utilizar para centrarse en el tipo de atención al cliente que los seres humanos tienen mejor rendimiento [2].

Con la utilización de Deep Learning y la Inteligencia Artificial se ha logrado ingresar en una amplia variedad de aplicaciones, cuyo desempeño ha sido tan bueno como el de los seres humanos o a veces incluso mejor en algunas tareas de gran dificultad como es el recordar conversaciones, percibir el habla y entender imágenes [6].

(7)

1.1 Problemática

Greg Corrado piensa que el uso de Machine Learning es un cambio tan grande para la tecnología como lo fue Internet. "Antes de las tecnologías de Internet, si trabajabas en ciencias de la computación, la conexión en red era algo raro. Y ahora todo el mundo independientemente de si son ingenieros, desarrolladores de software, diseñadores de productos o un CEO, entiende cómo la conectividad a Internet da forma a su producto moldeandolo al mercado".

Él dice que el mismo tipo de transformación va a suceder con Machine Learning. "Terminará siendo algo que todo el mundo puede utilizar. No tienen que hacer las cosas detalladas, pero tienen que entender”, 'bien, espere un minuto, tal vez podríamos hacer esto si tuviéramos datos para aprender' " [1].

El aprendizaje automático sigue siendo una bestia compleja. Lejos de ser simples algoritmos teóricos, no hay mucho que se puede hacer con las redes neuronales sino se tiene un fuerte conocimiento en varias áreas. El aprendizaje automático ha demostrado ser tan útil que ha creado un problema de oferta y demanda, simplemente no hay suficientes personas con experiencia en aprendizaje automático para desarrollar todos los proyectos que desean las organizaciones y empresas. Eso provocó un mayor esfuerzo para que el aprendizaje de máquina esté a disposición de un grupo de personas más amplio [7].

Un equipo de SDVS, Silicon Valley Data Science, realizó investigaciones sobre diferentes tecnologías de Deep Learning, que abarcan el reconocimiento de imágenes y voz, entre otras. Un proyecto de Deep Learningconsiste en: construir un pipeline que tome datos, crear un modelo y evaluar los resultados del modelo generado. Sin embargo, cuando comenzaron a investigar las tecnologías disponibles no encontraron documentación de referencia para el inicio de un nuevo proyecto de Deep Learning.

En la actualidad existe una gran variedad de tutoriales para el uso de distintas herramientas paraDeep Learning. Las herramientas más importantes como

Theano (MILA) [8], TensorFlow (Google) [9], Torch (Facebook) [10] y Microsoft Cognitive Toolkit [11] tienen tutoriales documentados que son fáciles de comprender e implementar. Además ha incrementado el número de usuarios en comunidades como Stackoverflow, que colaboran en la solución de problemas concretos en el diseño de las redes a través de búsquedas en internet [4].

(8)

investigación y poner el aprendizaje de máquinas en productos" . Y no es solo eso, cada implementación de los modelos de Machine Learningestá disponible de forma gratuita para utilizar y modificar, lo que significa que es posible configurar una inteligencia simple de máquina con nada más que una computadora portátil y una conexión web [1].

Sin embargo, como se comentó anteriormente, comenzar un proyecto de

Deep Learning tiene una curva de aprendizaje elevada, es muy costoso en tiempo, requiriendo de meses de estudio. Para comprender el funcionamiento de las herramientas de Deep Learning, se debe tener un conocimiento básico de álgebra lineal, cálculo numérico, probabilidad, programación (conocimientos en lenguajes de programación como Python), y un conocimiento básico en los principios de Machine Learning.

Otro factor que perjudica el uso de Deep Learning es la tecnología. Para poder configurar una red neuronal se debe contar con un hardware “poderoso” (con una GPU de alta gama, un CPU de gran procesamiento y con suficiente memoria, dependiendo del conjunto de datos a utilizar para entrenamiento y testeo) para obtener una mejor performance en el proceso de entrenamiento y ajuste de los parámetros de la red neuronal, por lo que muy pocas personas pueden acceder y aprender a utilizar herramientas que son muy potentes, pero no están al alcance de todos los usuarios [5].

1.2 Solución propuesta

(9)

Figura 1.1: Esquema general de la herramienta NeuralPy.

Con esta aplicación el usuario podrá crear diferentes redes neuronales para clasificación de texto, determinando cada uno de los tipos de capa que la constituye, como así también el conjunto de parámetros (funciones de activación, Rate, etc) de cada una. Pudiendo evaluar el clasificador mediante el uso de métricas (funciones de optimización, funciones de pérdida, etc). El usuario puede ingresar diferentes conjuntos de dataSet para el entrenamiento y evaluación del clasificador.

1.3 Organización del trabajo

En esta sección se detalla la estructura general del presente trabajo, brindando una breve descripción de los temas que se plantea en cada capítulo.

(10)

En el capítulo 3, titulado Trabajos Relacionados, se analizan las aplicaciones del área de Deep Learning que están actualmente en el mercado, realizando comparativas con la aplicación desarrollada en el presente trabajo y detallando las nuevas características que aporta NeuralPy.

En el capítulo 4, titulado Diseño de la Herramienta, se muestra las decisiones de diseño que se determinaron para la realización de la herramienta. Además se presentan las cuestiones de implementación propias de la aplicación que permitirán extender su funcionalidad.

En el capítulo 5, titulado Casos de Estudio, se detallarán diferentes casos de estudio aplicados sobre la herramienta, se utilizarán diferentes métricas que permitirán evaluar el comportamiento de la aplicación y destacar las características que presenta la misma.

(11)

Capítulo 2: Marco teórico

En este capítulo se presentan los diferentes fundamentos teóricos que serán utilizados a lo largo del trabajo actual. El capítulo comienza con una introducción a lo que es Machine Learning y Deep Learning, continuando con la definición de Redes Neuronales y neuronas artificiales, realizando una comparativa entre la funcionalidad de las neuronas artificiales y las neuronas biológicas. Por último se realiza una definición de las funciones de activación que se podrán utilizar en la herramienta, junto a sus correspondientes fórmulas y la definición de las métricas con las que contará la herramienta para poder evaluar los resultados generados por los clasificadores. En los casos que se crea necesario se tendrá asociado uno o más diagramas a la definición de algunos temas en particular, para ayudar en la comprensión a los lectores.

2.1 Machine Learning

Machine Learning se encarga de estudiar algoritmos informáticos permitiendo que las computadoras aprendan hacer diferentes tareas. Podríamos, por ejemplo, estar interesados en aprender a completar una tarea, hacer predicciones exactas, o comportarnos de manera inteligente. El aprendizaje que se hace se basa siempre en algún tipo de observaciones de datos, como ejemplos, experiencia directa o instrucciones. Por lo tanto, generalmente el concepto de Machine Learning se basa en aprender a realizar tareas de forma más eficiente en el futuro, en base a lo que se experimentó en el pasado.

El énfasis de Machine Learning está en los métodos automáticos. En otras palabras, el objetivo es diseñar algoritmos que permitan el aprendizaje automático de máquinas sin intervención ni asistencia humana. El paradigma de Machine Learning puede ser visto como “programación por ejemplo”.

Machine Learning es una subárea central de la inteligencia artificial. Es muy poco probable que se pueda construir cualquier tipo de sistema inteligente, con la inteligencia necesaria para comprender el lenguaje o la detección de elementos en imágenes, sin utilizar previamente un algoritmo de aprendizaje. Estas tareas son simplemente demasiado difíciles de resolver. Además, se considera que un sistema no es verdaderamente inteligente si es incapaz de aprender, ya que el aprendizaje es el núcleo de la inteligencia.

Aunque Machine Learning es una subárea dentro de la Inteligencia artificial, también se cruza ampliamente con otros campos, especialmente las estadísticas, pero también la matemática, la física, informática teórica y más [12].

(12)

2.2 Deep Learning

Deep Learning es un área de investigación dentro de Machine Learning, que se ha introducido con el objetivo de acercar el aprendizaje de máquinas a uno de sus objetivos originales, la inteligencia Artificial. Deep Learning es el aprendizaje en múltiples niveles de representación y abstracción, que ayudan a dar sentido a los datos como imágenes, sonido y texto.

En el enfoque Deep Learning se usan estructuras lógicas que se asemejan en mayor medida a la organización del sistema nervioso de los mamíferos, teniendo capas de unidades de proceso (neuronas artificiales) que se especializan en detectar determinadas características existentes en los objetos percibidos. La visión artificial es una de las áreas donde Deep Learning proporciona una mejora considerable en comparación con los algoritmos más tradicionales. Existen varios entornos y bibliotecas de código Deep Learning que se ejecutan en las potentes GPUs modernas tipo CUDA, como por ejemplo NVIDIA cuDNN, cuyas siglas se deben a “cu” por las GPUs cuda y DNN por redes neuronales.

Deep Learning representa un acercamiento más íntimo al modo de funcionamiento del sistema nervioso humano. Nuestro encéfalo tiene una microarquitectura de gran complejidad, en la que se han descubierto núcleos y áreas diferenciadas, cuyas redes de neuronas están especializadas para realizar tareas específicas.

Los modelos computacionales de Deep Learning imitan estas características arquitecturales del sistema nervioso, permitiendo que dentro del sistema global haya redes de unidades de proceso que se especialicen en la detección de determinadas características ocultas en los datos. Este enfoque ha permitido mejores resultados en tareas de percepción computacional, si las comparamos con las redes monolíticas de neuronas artificiales [13].

2.3 Redes Neuronales Artificiales

(13)

red neuronal para resolver un problema determinado. Así, las RNA son sistemas adaptativos que aprenden de la experiencia.

Mediante el entrenamiento o aprendizaje, las RNA crean su propia representación interna del problema, por tal motivo se dice que son auto-organizadas. Posteriormente, pueden responder adecuadamente cuando se les presentan situaciones a las que no habían sido expuestas anteriormente, es decir, las RNA son capaces de generalizar de casos anteriores a casos nuevos. En las RNA el tipo de procesamiento de la información es en paralelo, en el sentido de que muchas neuronas pueden estar funcionando al mismo tiempo. De hecho, nuestro cerebro está compuesto por unas 10^11 neuronas, las cuales operan en paralelo. Es ahí donde reside una parte fundamental de su poder de procesamiento. Aunque individualmente las neuronas sean capaces de realizar procesamientos muy simples, trabajando en paralelo pueden desarrollar una actividad global de procesamiento impresionante.

En síntesis, podemos decir que las RNA se inspiran en la estructura del sistema nervioso, con la intención de construir sistemas de procesamiento de la información paralelos, distribuidos y adaptativos que pueden presentar un cierto comportamiento inteligente (Martín del Brío y Sanz, 1997) [14].

Se denomina arquitectura a la topología, estructura o patrón de conexionado de una red neuronal. En una red neuronal artificial los nodos se conectan por medio de sinapsis, estando el comportamiento de la red determinado por la estructura de conexiones sinápticas. Estas conexiones sinápticas son direccionales, es decir, la información solamente puede propagarse en un único sentido (desde la neurona presináptica a la postsináptica). En general las neuronas se suelen agrupar en unidades estructurales que se denominan capas. El conjunto de una o más capas constituye la red neuronal.

(14)

Figura 2.1: Arquitectura unidireccional compuesta de tres capas de neuronas: una capa de entrada, una capa oculta y una capa de salida.

Teniendo en cuenta diversos conceptos se pueden establecer diferentes tipos de arquitecturas neuronales. Así considerando su estructura podemos hablar de

redes monocapa, las cuales están compuestas por una única capa de neuronas, o redes multicapa, donde las neuronas se organizan en varias capas. Teniendo en cuenta el flujo de datos, podemos distinguir entre redes unidireccionales (feedforward) y redes recurrentes o realimentadas ( feedback). Mientras que en las redes unidireccionales la información circula en un único sentido, en las redes recurrentes o realimentadas la información puede circular entre las capas de neuronas en cualquier sentido, incluso en el de salida-entrada [15].

3.4 Neuronas Artificiales

(15)

La similitud en el diseño y funcionalidad entre una neurona artificial y una neurona biológica se puede ver en la Figura 2.2.1 y Figura 2.2.2, donde en el lado izquierdo de la figura se representa una red neuronal con su soma, dendritas y axón, y en el lado derecho de la figura se representa una neurona artificial con su entrada, pesos, función de transferencia (activación), bias y salida.

Figura 2.2.1: Diseño neurona biológica. Figura 2.2.2: Diseño neurona artificial. En el caso de las neurona biológicas la información entra a la neurona vía dendritas, el soma procesa la información y su salida es vía axón. En el caso de las neuronas artificiales la información entra en el cuerpo de una neurona artificial a través de entradas que se ponderan (cada entrada se puede multiplicar individualmente por un peso). El cuerpo de una neurona artificial suma las entradas ponderadas, bias y “procesa” la suma con una función de activación. Al final una neurona artificial pasa la información procesada a través de la salida. Los beneficios del modelo de una neurona artificial se puede ver en la Figura 2.3 .

y(K) = F(

m

(

K

) .

x

(

K

)

b

)

i=0

w

i i

+

Figura 2.3: Modelo matemático de una neurona artificial Donde:

● Xi(k) es el valor de entrada en el tiempo k, donde el valor i va de 0 a m. ● Wi(k) es el valor de peso en el tiempo k, donde el valor i va de 0 a m. ● b es bias.

(16)

2.5 Funciones de activación

En las neuronas artificiales las funciones de activación establecen los límites para la salida de las neuronas. Las redes neuronales pueden usar diferentes tipos de funciones de activación. La selección de una función de activación es una decisión importante, ya que puede afectar al formato que debe tener los datos de entrada. A continuación se presentan las funciones de activación más comúnmente utilizadas:

La más básica de las funciones de activación es la llamada función Linear. Esta no tiene uso práctico, sino más bien es un punto de partida.

(

x

)

x

ϕ

=

(

x

)

ϕ

= {1,

if

x

≥ 0

.5; 0,

otherside

}

Figura 2.4: intervalo de la función Linear

La función Linear está definida en el intervalo [0, 1], como expresa la Figura 2.4, emite el valor 1 para entradas de 0.5 o más y 0 para todos los demás valores.

La función sigmoide (ver Figura 2.5) es una de las funciones de activación que más se utiliza en las redes neuronales feedforward que necesitan producir sólo valores positivos. Está función cuya gráfica son curvas de forma “S” (ver Figura 2.7), aparecen en una gran variedad de contextos. Dicha función es la más simple de las funciones no lineales, poniendo en manifiesto un equilibrio entre el comportamiento lineal y no lineal. A pesar de su uso extensivo, la función tangente hiperbólica o la función de unidad rectificada lineal (RELU) son a menudo más adecuadas [16].

g

logistic(z ) =

1

1+

e

−z

Figura 2.5: Ecuación de la función Sigmoide.

El cálculo de la derivada (ver Figura 2.6) de la función sigmoidelogística hace uso de la regla de cociente y un truco inteligente que tanto añade y sustrae uno del numerador:

g'

logistic(z)

=

(

)

z

(17)

=

ez

(

chain rule

)

(1+e−z)2

=

1 + e(1+ez−1)2

z

=

(1+e1 + ez)z2

-

(

1+e1−z

)

2

=

1

-

(1+e−z)

(

)

1 1+e−z

2

= g

logistic(z) -

g

logistic

(

z

)

2

=

g

logistic(z) - (1 -

g

logistic(z))

Figura 2.6: Derivada de la función Sigmoide. La función está restringida entre 0 y 1.

Figura 2.7: Gráfica de función de activación Sigmoide

Puede resultar que la función sigmoide se “atasque” durante el entrenamiento, esto se debe en parte al hecho de que si se proporciona una entrada fuertemente negativa a la función sigmoide, produce valores muy cercanos a cero. Dado que las redes neuronales utilizan las activaciones feedforward para calcular los gradientes de los parámetros, esto puede generar que parámetros del modelo se actualicen en menor frecuencia de lo que se desearía, y por lo tanto se “atascan” en su estado actual [16].

(18)

g

tanh

(

z

) =

cosh(z)sinh(z)

=

eez− e+ez zz

Figura 2.8: Ecuación de la función tangente hiperbólica

Al igual que el sigmoide logístico, la función tangente hiperbólica (ver Figura 2.10) es también sigmoidal, pero en su lugar produce valores dentro del intervalo [-1, 1]. Por lo tanto, las entradas fuertemente negativas al tanh se asignan a salidas negativas. Además, sólo las entradas de valor cero se asignan a salidas casi cero. Estas propiedades hacen que la red tenga una menor probabilidad de que se "atasque" durante el entrenamiento. El cálculo del gradiente para la función tanh también utiliza la regla del cociente (ver Figura 2.9) [16].

=

(

z

)

g

tanh

z

sinh(z) cosh(z)

=

cosh2(z)

sinh(z) x cosh(z) − cosh(z) x sinh(z)

z ∂∂z

=

cosh2(z) cosh2(z) − sinh2(z)

= 1 -

coshsinh22(z)(z)

(19)

Figura 2.9: Derivada de la función tangente hiperbólica.

Figura 2.10: Gráfica de función de activación Tangente hiperbólica

Teh y Hinton (2000) introdujeron la unidad rectificada lineal RELU (ver Figura 2.11). Es simple y es una buena opción para las capas ocultas.

(

x

)

max

(0, )

ϕ

=

x

Figura 2.11: Ecuación de la función RELU

(20)

Figura 2.12: Gráfica de función de activación RELU.

La última función de activación a definir es softmax (ver Figura 2.13). La función lineal softmax se encuentra generalmente en la capa de salida de una red neuronal. El nodo que tiene el mayor valor reclama la entrada como un miembro de su clase. Debido a que es un método preferible por ser una versión suavizada o continua de la función “ winer-take-all”(el ganador se lleva todo) en el que la salida máxima se transforma a 1 y las demás a 0 , la función de activación de softmax

obliga a la salida de la red neuronal a representar la probabilidad de que la entrada caiga en cada una de las clases. Sin el softmax, las salidas del nodo son simplemente valores numéricos, con el mayor indicativo de la clase ganadora.

ϕ

i

=

ezi

jεgroup

ezj

Figura 2.13: Ecuación de la función Softmax

En la fórmula de la figura anterior, el valor i representa el índice del nodo de salida, el valor j representa los índices de todos los nodos del grupo o nivel. La variable z designa la matriz de los nodos de salida. Es importante señalar que

(21)

Cuando se ingresa un conjunto de datos a la red neuronal aplicando como función de activación Softmax, permite a la red dar la probabilidad de que estas mediciones pertenezcan a cada una de las clases. Por ejemplo, si se tienen tres clases cuyas probabilidades son 80%, 15% y 5%. Dado que estas son probabilidades, su suma debe ser igual a 100%. Los nodos de salida no especifican inherentemente las probabilidades de las clases. Por lo tanto, softmax es útil, cuando produce tales probabilidades.

Para ilustrar el concepto de softmax, se va a realizar un ejemplo concreto. Supongamos que se tiene un conjunto de entrenamiento que consta de 4 muestras de 3 clases diferentes (0, 1 y 2).

● x0 --> class 0 ● x1 --> class 1 ● x2 --> class 2 ● x3 --> class 3

En primer lugar, se realiza un codificación de las etiquetas de clase en un formato que podemos trabajar más fácilmente:

[[1. 0. 0.] [0. 1. 0.] [0. 0. 1.] [0. 0. 1.]]

Una muestra que pertenece a la clase 0 (primera fila) tiene un 1 en la primera celda, una muestra que pertenece a la clase 2 tiene un 1 en la segunda celda de su fila, y así sucesivamente.

A continuación, se define la matriz de características con las 4 muestras de entrenamiento. Aquí, se supone que el conjunto de datos consta de 2 funciones; por lo tanto, se crea una matriz dimensional 4x(2+1) (1 para el término de sesgo).

(22)

Para calcular la entrada a la red, se realiza la multiplicación entre la matriz de Entrada X con la matriz de Pesos.

Z = XW

Lo cual produce una matriz de salida de 4x3 (N_SAMPLES x n_classes).

Ahora es el momento de calcular la función de activación:

(23)

etiquetas de clase, se puede simplemente tomar la posición argmax índice de cada fila:

Como se puede ver la predicciones no son correctas, ya que las etiquetas de clase correcta son ‘[0,1,2,2]’. Por lo que se debería realizar un análisis sobre el clasificador con el fin de corregir el error actual [18].

2.6 Capas Neuronales

Por lo general, un algoritmo de aprendizaje es entrenado usando un conjunto de “datos de entrenamiento”, situaciones ejemplares para las cuales se conoce la salida deseada. El objetivo es que el algoritmo también se desempeñe bien en la predicción de la salida cuando los datos de entrada no sean conocidos durante el entrenamiento.

El sobreentrenamiento de un algoritmo de aprendizaje con ciertos datos para los que se conoce el resultado deseado, puede llevar a que el algoritmo quede ajustado a unas características muy específicas de los datos de entrenamiento, por lo que durante la fase de sobreajuste el éxito al responder las muestras de entrenamiento sigue incrementándose mientras que su actuación con muestras nuevas va empeorando, esta situación se conoce como Overfitting.

(24)

Figura 2.14.1: Red Neuronal Original Figura 2.14.2: Después de aplicar

Dropout

La elección de las unidades que deben “apagarse” es aleatorio. En el caso más simple, cada unidad conserva una probabilidad fija p independiente de otras unidades, donde p puede ser elegido usando un conjunto de validación o simplemente puede fijarse en 0.5, lo que parece ser cercano al óptimo para una amplia gama de redes y tareas. Para las unidades de entrada, sin embargo, la probabilidad óptima es usualmente más cercana a 1 que a 0.5.

Figura 2.15.1: En tiempo de entrenamiento Figura 2.15.2: En tiempo de prueba

Figura 2.15.1: Unidad en tiempo de entrenamiento que está presente con probabilidad p y está conectada a unidades en la siguiente capa con pesos w.

Figura 2.15.2: En el momento de prueba, la unidad siempre está presente y los pesos se multiplican por p. La salida en el tiempo de prueba es la misma que la salida esperada en el tiempo de entrenamiento.

(25)

una colección de 2^n posibles redes neuronales “delgadas”. Todas estas redes comparten pesos para que el número total de parámetros sea O(n^2), o menos. Para cada presentación de cada caso de entrenamiento, una nueva red “delgada” es muestreada y entrenada.

El entrenamiento de una red a la cual se le aplicó Dropout, y el uso de este método de promedio aproximado en el tiempo de prueba, conduce a un error de generalización significativamente menor a una amplia variedad de problemas de clasificación, en comparación con la formación de otros métodos de regularización [19].

Otro tipo de técnica es Embedding,la cual se ha convertido recientemente en la más dominante en términos de poder de expandir el significado de cada palabra, mediante el uso de sus estadísticas de co-concurrencia de cada palabra aprendida implícitamente por las redes neuronales. Normalmente, todas las redes neuronales del tipo Feedforward toman las palabras de un vocabulario como entrada y las mapean a vectores de menor dimensión, lo que puede ser visto como una codificación “única”, vectores compuestos de ceros y unos, que posteriormente se ajustan a través de la posterior propagación.

Para obtener el valor real asociado a cada palabra, se realiza una

multiplicación entre el vector codificado y una matriz Embedding , donde D es la dimensión de la matriz y V es el tamaño del vocabulario. Está operación se realiza en la capa Embedding.

Generalmente esta capa no es regularizada mediante la técnica de Dropout, ya que la matriz resultante está optimizada, con lo cual dicha regularización puede generar un sobreentrenamiento en la capa, por lo que es deseable postergar a etapas siguientes. El desempeño de esta capa puede ser fuertemente afectado por sus parámetros, lo que permite la búsqueda de parámetros para diferentes tareas. Sin embargo, la precisión de la resolución de analogías de palabras también varía enormemente para diferentes relaciones lingüísticas [20].

(26)

Figura 2.16: Estructura de la capa LSTM

En el diagrama de la Figura 2.16, cada línea recta lleva un vector entero, desde la salida de un nodo hasta la entrada de otros. Los círculos rosados representan operaciones puntuales, como la suma de vectores, mientras que las cajas amarillas son funciones de activación (Sigmoide, tangente hiperbólica, etc). Las líneas de fusión denotan concatenación, mientras que cada línea de bifurcación representan que su contenido se está copiando y las copias van a localizaciones diferentes. Por último el círculo rosado con las iniciales ht es denominado “estado de las celdas” que es donde se almacena la información para utilizarse con los próximos datos a procesar en la red.

Durante la transición de los datos por la red neuronal, las capas LSTM tienen la capacidad de eliminar o agregar cuidadosamente información al estado de las celdas, mediante el uso de “puertas”. Donde cada puerta está compuesta por una función de activación y una operación de multiplicación puntual. Las capas LSTM están compuestas de 3 puertas, para proteger y controlar el estado de las celdas.

La primera de las puertas denominada “puerta de olvido” es la encargada de determinar la cantidad información que se va a descartar del estado actual de la celda. Está decisión se hace mediante el uso de una función de activación sigmoide

la cual emite como salida números entre cero y uno, determinando la cantidad de información que debe dejar pasar la primer puerta. Un valor cero significa no dejar pasar información, mientras que el valor uno significa que se debe dejar pasar toda la información.

El siguiente paso es el encargado de decidir qué nueva información se va a almacenar en el estado de la celda. Esto tiene dos partes, en primer lugar una función sigmoide llamada “puerta de entrada” decide cuáles serán los valores a actualizar. A continuación, la función tanh crea un vector de nuevos valores candidatos, que podrían añadirse al estado. Por último se combinarán estos dos pasos para crear una actualización del estado.

(27)

Las capas tipo Dense o Fully-connected se caracteriza porque cada una de las neuronas que la componen están totalmente conectadas con cada una de las neuronas que componen las capas siguientes.

2.7 Métricas:

En la literatura existen multitud de métricas de evaluación empleadas para cuantificar el rendimiento de un clasificador. Estas métricas, además, se pueden emplear para comparar el comportamiento de dos o más clasificadores y para guiar a los usuarios en la modificación de los pesos que componen las redes neuronales.

Las métricas de rendimiento se pueden dividir en dos grupos: las métricas que emplean la matriz de confusión y las que se calculan sin hacer uso de ella [12].

Antes de comenzar a describir las distintas métricas, es necesario definir el concepto de matriz de confusión. Para esto se mostrará una matriz de confusión obtenida en problemas de clasificación binaria. En estos tipos de problemas una de las dos clases será considerada como la clase positiva, y la otra como negativa. La matriz de confusión M(g) de un clasificador binario g se define en la Figura 2.17.

Figura 2.17: Matriz de confusión. donde:

tp (verdaderos positivos, true positive): es el número de elementos pertenecientes a la clase positiva y que el clasificador ha predicho como positivos.

● fn (falsos negativos, false negative): es el número de elementos de la clase positiva que han sido clasificados como negativos.

● fp (falsos positivos, false positive): es el número de elementos pertenecientes a la clase negativa que han sido clasificados como positivos.

(28)

La Figura 2.18, permite ver de forma más clara la clasificación de los elementos mencionados anteriormente.

Figura 2.18: Especificación de la clasificación de los elementos.

Para un problema de Q clases y N patrones de entrenamiento, la matriz de confusión M(g), de tamaño Q x Q, se define de la siguiente forma:

En la Figura 2.19, se presenta una tabla de forma extendida. La matriz de

confusión M(g), donde representa el número de patrones predichos por el

(29)

Figura 2.19: Matriz de confusión para un problema con Q clases.

Dentro de las métricas más influyentes se destacan por hacer uso de la matriz de confusión:

Precision score: Métrica que permite medir el rendimiento global del

clasificador, es decir, porcentaje de patrones correctamente clasificados (ver Figura 2.20).

Figura 2.20: Fórmula de la métrica Precision Score.

El rango de salida de ésta métrica está definida entre los valores 0 y 1. Significando 1 que el clasificador predijo correctamente el total de las mismas. Mientras que valores cercanos a 0 indican que el clasificador tuvo mayor porcentaje de predicciones incorrectas que correctas.

Recall score: puede considerarse una medida de la completitud de los

clasificadores. Un recall bajo indica que se obtuvieron muchos falsos negativos (ver Figura 2.21).

Figura 2.21: Fórmula de la métrica Recall Score.

(30)

mientras que valores cercanos a 0 indican un valor muy bajo de aciertos sobre el total de elementos de una clase.

Accuracy Score: es la métrica más intuitiva y es simplemente una

proporción de las predicciones correctamente previstas con respecto al total de las predicciones. Se puede pensar que al tener un valor alto de Accuracy, entonces el modelo es bueno, sin embargo esto es verdadero sólo si se tienen conjuntos de datos simétricos donde los valores de falsos positivos y falsos negativos son similares (ver Figura 2.22).

Accuracy = TP + TN

TP + FP + FN + TN

Figura 2.22: Fórmula de la métrica Accuracy Score.

Esta métrica está definida dentro del rango de valores 0 y 1. El valor 1 indica un acierto total en las predicciones generadas por el clasificador sobre el total de elementos. Mientras que valores cercanos a 0 significa un mayor porcentaje de errores en la clasificación generada.

Zero one loss: Mediante esta métrica se determina si el clasificador cometió un error o no en su predicción. Cuando todas las etiquetas de la clase son etiquetados correctamente, el resultado de la clasificación correcta siempre produce un margen positivo ya que Z = yF(x) ambos comparten el mismo signo mientras que uno equivale a un margen negativo.

(31)

Capítulo 3: Trabajos Relacionados

En este capítulo se presentan diferentes aplicaciones cuyas funcionalidades son similares a las de NeuralPY. Primero se comenzará con una breve introducción de cada una de las aplicaciones, donde se incluye información sobre las bibliotecas que utilizan como backend. Continuando con un cuadro comparativo entre las mismas donde se puede reflejar su cumplimiento o no sobre diferentes tareas de consideración.

3.1 Descripción de aplicaciones

Las aplicaciones que se estudiarán son DIANNE, DARVIZ y NVIDIA DIGITS, éstas se encuentran en el mercado actual y poseen actualmente un gran número de usuarios, fueron creadas con la finalidad de ayudar en la capacitación y permitir la realización de pruebas rápidas con redes neuronales al igual que NeuralPY. Realizar una comparación con estas aplicaciones permitirá demostrar que tan cerca o lejos se encuentra NeuralPY de proyectos creados por investigadores de empresas y universidades de prestigio internacional. Además esta comparación permite destacar cuales son las nuevas funcionalidades que presenta NeuralPY a los usuarios.

3.1.1 DIANNE

DIANNE es un proyecto de investigación que se realizó en la Universidad de Ghent (Bélgica). Ésta es una aplicación modular para el diseño, entrenamiento y evaluación de redes neuronales convolucionales. Dependiendo del hardware, y arquitectura del dispositivo donde se esté ejecutando corre de manera automática sobre la CPU o GPU, utilizando como backend las bibliotecas Torch y CUDA

(32)

cuales envía su salida y uno o más módulos anteriores para propagar el gradiente en la entrada.

La arquitectura de una red neuronal construida en DIANNE, comienza con un módulo de entrada por el cual los datos ingresan en el modelo, y finaliza con un módulo de salida. Entre éstos dos, puede variar el número y tipo de módulos, para ésto DIANNE dispone de una gran variedad de módulos, por ejemplo presenta el módulo Linear, el cual permite calcular la suma de los pesos de entrada y puede ser combinado con alguno de los módulos de activación que se presenta, como por ejemplo Sigmoid o ReLu. A su vez la aplicación cuenta con módulos de clasificación como es el caso de Softmax. Otros de los módulos que presenta sonConvolution y

MaxPolling, los cuales son utilizados en la arquitectura de los modelos convolucionales más avanzados. También cuentan con módulos de división y combinación que permiten crear rutas paralelas en una red neuronal, a los mencionado anteriormente también cuenta con módulos de preprocesamiento que permiten normalizar el conjunto de datos de entrada.

DIANNE al ser una aplicación que permite la construcción de redes convolucionales, acepta como entrada diferentes estructuras de dataSet de imágenes, como es el caso de ImageNet, MNIST, CIFAR-10/100, entre otros, y también permite a los usuarios agregar su propia estructura.

DIANNE se ejecuta sobre el framework AIOLOS con el fin de permitir la ejecución de los módulos en entornos distribuidos, permitiendo la conexión entre los dispositivos mediante el mecanismo de llamada remota ofrecido por el framework.

DIANNE presenta un repositorio donde se almacenan diferentes conjuntos de redes neuronales ya configuradas, así como también diferentes conjuntos de pesos para dichas redes. En este repositorio se almacenan las estructuras de las redes neuronales en un archivo de formato JSON, conteniendo por cada una un mapeo de los módulos que componen la red junto con sus parámetros, los pesos de un módulo entrenado son almacenados en formato binario y los mismos pueden ser etiquetados, permitiéndole a los usuarios tener diferentes configuraciones de pesos. Este repositorio es utilizado durante el entrenamiento de los modelos, logrando de esta forma que el usuario almacene los diferentes pesos.

(33)

adecuada, el algoritmo presentado por la aplicación es el de gradiente descendiente, el conjunto de datos se puede dividir dinámicamente en tres subconjuntos de datos destinados al entrenamiento, validación y testeo de la red neuronal. Por último en la pestaña de ejecución, el usuario puede acoplar directamente la red neuronal a dispositivos de entrada y salida reales.

Figura 3.1: Interfaz de usuario de DIANNE, en la parte izquierda se puede ver los diferentes módulos disponibles, y en el centro se muestra la estructura de la red neuronal Overfeat [22].

(34)

Figura 3.2: Ejemplo de visualización del uso de Memoria y CPU actual durante la ejecución de la herramienta.

3.1.2 DARVIZ

La segunda aplicación que se presenta es DARVIZ (Deep Abstract Representation, Visualization and Verification of Deep Learning Models ) creada por investigadores de IBM y la cual continúa en desarrollo. DARVIZ es una aplicación que dispone de módulos independientes que permiten el manejo y procesamiento de datos, permitiendo la construcción desde cero de modelos de Deep Learning destinados a la clasificación de imágenes. Esta aplicación permite generar como salida la implementación en código Python de la red neuronal construida para que pueda ser ejecutada en CPU o GPU, utilizando como backend las bibliotecas TensorFlow o CAFFE.

La aplicación permite a los usuarios poder realizar todos los pasos que conlleva construir una red neuronal, comenzando por la elección del conjunto de datos a ser analizados por la red neuronal y su correspondiente procesamiento antes de ser ingresados. Para el diseño del modelo, se presenta una gran variedad de tipos de capas como son las capas convolucionales de 2 y 3 dimensiones, capas

Embedding, funciones de activación como por ejemplo ReLu, Sigmoid, Softmax, entre otras. Cómo así también funciones de normalización y pérdida, donde en cada uno de estos elementos el usuario podrá configurar sus correspondientes parámetros. Algunas de las estructuras de dataSet que soporta la aplicación son

imageNet, MNIST, CIFAR10, entre otras.

(35)

DARVIZ presenta una interfaz web (ver Figura 3.3), mediante la cual los usuarios pueden construir sus modelos de forma intuitiva simplemente seleccionando y conectando los elementos que componen su arquitectura.

Figura 3.3: Interfaz de usuario del framework DARVIZ.

En la actualidad existen varias plataformas para el diseño de redes neuronales, donde la diferencia que presentan son las bibliotecas que utilizan como backend. Con esta variedad surge el desafío de interoperabilidad de modelos entre plataformas. Por ejemplo, un escenario posible sería un modelo diseñado el cual ha sido pre-entrenado utilizando la biblioteca TensorFlow. Un grupo de investigadores que utilizan Torch, y desean trabajar sobre dicho modelo, se ven imposibilitados de hacerlo debido a que no existen aplicaciones que realicen esta conversión. Uno de los objetivos en los que está trabajando el equipo de investigación de DARVIZ es una solución a estas situaciones proponiendo un módulo de abstracción, mediante el cual los modelos ya implementados en cualquiera de las plataformas existentes podrían ser convertidos a una representación intermedia abstracta y de de dicha representación podría realizarse una nueva conversión a cualquier otra plataforma. Actualmente DARVIZ permite solamente la conversión de CAFFE a TensorFlow y se encuentran trabajando para incluir conversiones entre nuevas bibliotecas.

(36)

3.1.3 NVIDIA DIGITS

La tercera y última aplicación analizada es DIGITS (Deep Learning GPU training System) creada por NVIDIA, esta es una aplicación que permite el diseño, entrenamiento y visualización de redes neuronales profundas para clasificación de imágenes, utilizando como bibliotecas backend CAFFE, Torch y TensorFlow. Esta aplicación es de código abierto y se puede descargar desde su página oficial [24], estando disponible para Ubuntu y Windows. Una vez instalada se puede ver diferentes pestañas, mediante las cuales el usuario define los diferentes parámetros del modelo.

El primer paso que se realiza es la definición del dataSet de entrada, donde se debe especificar las características de las instancias (tamaño de las imágenes contenidas), determinar el porcentaje de elementos destinados a la validación y al testeo. Una vez definido es posible visualizar la cantidad de instancias que hay pertenecientes a cada clase mediante un gráfico.

Una vez configurados los parámetros del dataSet se comienza con la creación del modelo, la aplicación presenta modelos diseñados que pueden ser modificados por los usuarios o directamente entrenarlos y evaluarlos con el conjunto de instancias ingresadas por el usuario. También es posible definir un modelo desde cero, donde la aplicación presenta una gran variedad de tipos de capas y funciones de activación. Vale destacar que el diseño de modelos en DIGITS no es tan intuitivo como en las anteriores aplicaciones analizadas ya que se debe implementar mediante el uso de pequeñas sentencias de código (ver Figura 3.4) y por esto se debe contar con un conocimiento mayor en las funcionalidades y definición de parámetros de los diferentes tipos de capas.

(37)

Una vez diseñado el modelo la aplicación permite visualizar su arquitectura (ver Figura 3.5)

Figura 3.5: Visualización de la estructura de una red neuronal

La etapa de entrenamiento se presenta en una nueva pestaña donde se debe seleccionar el dataSet que se utilizará y setear los parámetros de configuración para el entrenamiento. Los parámetros que presenta son:

Training epochs: se indica el número de iteraciones durante el entrenamiento.

Snapshot interval: se indica cada cuantas iteraciones se almacena el estado del entrenamiento.

Batch Size: se indica el tamaño de los conjuntos de imágenes.

Solver type: se indica el tipo de criterio para calcular gradiente de salida. Los posibles criterios son: SGD, ADAGRAD y NAG.

(38)

Una vez definida la configuración de entrenamiento es posible monitorear en tiempo real el desempeño de la red (ver Figura 3.6), lo cual permite controlar cuidadosamente el proceso de capacitación, analizar visualmente el desempeño de cada epoch y detectar problemas de los conjuntos de datos de entrenamiento y validación, como así también la precisión obtenida en el conjunto de datos de validación durante las iteraciones de entrenamiento. Uno de los problemas que permite detectar estos gráficos es la existencia de Overfitting en la red.

Figura 3.6: Gráfico de representación de las métricas durante el entrenamiento del modelo.

Si se tiene más de una GPU, DIGITS permite entrenar varias redes en paralelo o se puede entrenar una red sobre múltiples GPUs. A su vez la aplicación permite ver en tiempo real la performance de la GPU, presentando información sobre la memoria utilizada, % de la GPU trabajando y temperatura de la misma.

Uno de los inconvenientes que presenta esta aplicación es la necesidad de contar con al menos una GPU para poder correr la misma, y la utilización de código para que los usuarios puedan implementar el diseño de sus redes neuronales, lo cual es poco intuitivo para las personas que comienzan a trabajar en esta área.

3.2 Comparación entre aplicaciones

(39)

Los puntajes de evaluación que se utilizan para medir el desempeño de cada criterio son:

1 - Malo o no aplica 2 - Regular

3 - Bueno 4 - Muy bueno

3.2.1 Criterios de evaluación:

a) Creación de RN: Medición del nivel didáctico que presenta la interfaz de usuario para poder realizar el diseño de los modelos.

b) Disponibilidad de componentes: Medición de la variedad de componentes que presenta a los usuarios la aplicación para la creación de los modelos.

c) Evaluación de hardware: Medición de la disponibilidad de métricas y estadísticas que permitan visualizar el comportamiento del hardware (GPU, memoria, CPU, entre otras) durante la ejecución de la aplicación.

d) Resultado entrenamiento/evaluación: Disponibilidad de métricas que permitan visualizar el desempeño del modelo creado.

3.2.2 Tabla comparativa:

NeuralPy

Darviz

Dianne

Nvidia Digits

a

3

3

4

2

b

3

4

4

3

c

1

2

3

1

d

2

3

1

3

(40)

3.2.3 Conclusiones:

Las redes neuronales están siendo aplicadas con éxito en diferentes ámbitos, por lo que crear una aplicación gráfica que permita explotar el potencial de las mismas es una tarea compleja. Por ejemplo ninguna de las aplicaciones presentadas anteriormente soporta algoritmos de transferencia de estilos, mediante los cuales se puede construir una nueva imagen combinando los objetos que componen una primera imagen con el estilo de una segunda. Otros de los algoritmos a los que no se da soporte son los GANs ( Generative Adversarial Nets), las cuales son redes neuronales que son entrenadas para generar datos que imitan algún tipo de distribución; ni tampoco algoritmos de Reinforcement Learning, los cuales permiten que los agentes de software, dependiendo del entorno, realicen acciones correctas.

Las aplicaciones que fueron presentadas son proyectos de universidades y empresas con alto prestigio a nivel internacional, NeuralPy se creó con la intención de poder aportar características que no han sido tratadas hasta la actualidad por estas aplicaciones. A partir de los valores presentados en la Tabla comparativa se puede concluir que NeuralPY dispone de varias funcionalidades que tienen un desempeño cercano o en algunos casos mejor al presentado actualmente por las aplicaciones a las que fue comparada, logrando obtener un buen puntaje final.

(41)

Capítulo 4: Diseño de la herramienta

4.1 Introducción

En este capítulo se describe cada una de las partes que componen la herramienta, como así también una breve definición de los diferentes componentes de software que se utilizaron durante la implementación de la misma.

4.2 Problemática actual

Deep Learning como se ha mencionado es un área de investigación que está en auge a nivel mundial, y mediante el cual se está alcanzando que las computadoras se desempeñen de manera similar o incluso en determinadas tareas mejor que el hombre.

Comenzar un proyecto de Deep Learning tiene una curva de aprendizaje elevada, es muy costoso en tiempo, requiriendo meses de estudio. Comprender el funcionamiento de las herramientas de Deep Learning, requiere tener un conocimiento básico de álgebra lineal, cálculo numérico, probabilidad, programación (conocimientos en lenguajes de programación como Python) y conocimientos básicos en los principios de Machine Learning. Otro factor que complejiza a los usuarios comenzar a usar Deep Learning, es la tecnología. Configurar una red neuronal requiere contar con un hardware “poderoso”, para obtener una mejor performance en el proceso de entrenamiento y ajuste de los parámetros de la red neuronal, por lo que muy pocas personas pueden acceder y aprender a utilizar herramientas que son muy potentes, pero que no están al alcance de todas las personas que desean procesar gran volumen de datos de propósito general.

4.3 Objetivo de la herramienta

(42)

lograr que sea un puente de acceso para los usuarios que estén interesados en adentrarse en dicha área.

4.4 Lenguaje de Programación y bibliotecas externas

Para la implementación de la herramienta se utilizó el lenguaje interpretado Python [25], un lenguaje de scripting independiente, multiplataforma y orientado a objetos que ofrece de manera muy sencilla crear programas con componentes reutilizables. Este lenguaje presenta la ventaja de que actualmente existe un gran número de bibliotecas externas para el desarrollo de redes neuronales que son compatibles con él. Para el desarrollo de la herramienta se utilizó la versión 2.7.13.

En la Figura 4.1 puede visualizarse la conexión entre las diferentes bibliotecas que permiten trabajar con redes neuronales.

Figura 4.1: Diagrama de Deployment que presenta la comunicación entre las diferentes bibliotecas externas que conforman la estructura de la herramienta.

(43)

para poder trabajar con las bibliotecas de Machine Learning. Las bibliotecas de soporte son Numpy, Scipy, Imbalanced.

Numpy [26] es un acrónico de “ Numeric Python”, biblioteca externa de Python que proporciona rápidas funciones matemáticas precompiladas. Además, agrega al lenguaje Python potentes estructuras multidimensionales, como así también una gran colección de rutinas para el procesamiento de estas estructuras multidimensionales.

Scipy [27] es una biblioteca externa de Python, de código abierto, que contiene varios algoritmos y funciones matemáticas, que amplían las capacidades presentadas por Numpy con una gran variedad de algoritmos útiles, como la minimización, transformaciones de Fourier, y otras técnicas matemáticas aplicadas. También presenta clases de alto nivel que permiten la manipulación y visualización de datos.

Imbalanced-learn [28], es una biblioteca de Python con código abierto, que proporciona una amplia variedad de métodos para reducir o eliminar los problemas de conjuntos de datos desequilibrados que se presenta de forma frecuente en el aprendizaje automático y reconocimiento de patrones. Los métodos más importantes que presenta se dividen en 4 grupos: Under-Sampling, Over-Sampling,

una combinación de Under-Sampling yOver-Sampling, y métodos de aprendizaje en conjunto.

PyQt [29] es un conjunto de herramientas para crear aplicaciones GUI. Ésta es una combinación de Python y la biblioteca Qt. Herramienta mediante la cual se realizó la interfaz gráfica de usuario.

Todas estas bibliotecas son utilizadas como soporte de las herramientas de Machine Learning: Keras, TensorFlow, CNTK, Theano y Sklearn.

CNTK [11] es una biblioteca en Python creada por Microsoft, la cual incluye un conjunto de capas de alto nivel que permite la composición y capacitación avanzada de redes neuronales, así como también permite cargar y evaluar modelos pre-entrenados en dispositivos específicos (CPU o GPU). Junto a esto proporciona diferentes maneras de preparar los datos de entrada y salida de los vectores denso. Esta librería de aprendizaje y lectura de datos es fácil de ampliar desde Python, permitiendo a los usuarios implementar fácilmente nuevos operadores, técnicas de aprendizaje y lectura de datos.

(44)

Theano[8] es una biblioteca de Python desarrollada en la Universidad de Montreal, Theano no proporciona modelos preconstruidos para el rápido entrenamiento de datos, sino que es una biblioteca matemática que proporciona las herramientas suficientes para la construcción de redes neuronales. Para ésto permite el manejo eficiente de expresiones matemáticas que involucran matrices multidimensionales. Theano permite la ejecución sobre GPU, lo que genera un incremento de velocidad al aprovecharse el procesamiento en paralelo.

Las tres bibliotecas mencionadas son modelos de computación simbólica, que proporcionan herramientas algorítmicas y métodos que permiten definir los grafos de computación, los cuales posteriormente son compilados utilizando el backend seleccionado y por último se realiza la ejecución del modelo creado.

Sklearn [30] es una biblioteca de Machine Learning de software libre para el lenguaje de programación Python. Esta biblioteca presenta una gran variedad de algoritmos de aprendizaje automático, supervisado y no supervisado, alguno de estos algoritmos son de clasificación, regresión y agrupamiento.

Las bibliotecas de Machine Learning anteriormente mencionadas, tienen un costo alto de aprendizaje para la mayoría de los usuarios de Python, por lo que es importante disponer de una biblioteca de alto nivel que permita trabajar con las mismas. Esta función la cumple la biblioteca Keras [31], esta biblioteca externa de Python es más intuitiva y permite construir redes neuronales de forma modular, considerando un modelo como una secuencia de uno o más módulos, que se pueden combinar de manera arbitraria. Los nuevos componentes son fáciles de agregar y modificar dentro del modelo diseñado, por lo tanto Keras permite crear una red neuronal con sólo unas pocas líneas de código. Ésta es una biblioteca que soporta redes neuronales recurrentes como son las convolucionales, lo cual permite que en un trabajo futuro se pueda extender la aplicación, pudiendo crear este tipo de modelos. Por último se puede mencionar que Keras se ejecuta sin problemas tanto en CPU como en GPU.

4.5 Diseño de la herramienta

(45)

Figura 4.2: El diagrama presenta el flujo de acciones internas de la aplicación NeuralPy.

(46)

4.6 Preproceso

Como se presenta en la Figura 4.2, uno de los componentes de entrada a la herramienta es el dataSet, el cual contiene el conjunto de instancias de las cuales una parte serán utilizadas durante la etapa de entrenamiento de la red neuronal y la otra parte será posteriormente evaluada por el modelo diseñado, actualmente la herramienta soporta dos estructuras de dataSet y está diseñada para poder incluir nuevas estructuras de manera sencilla. Se eligieron estos dos formatos de entrada ya que diferencian de forma explícita los elementos de importancia, instancias y clases, para este tipo de redes y porque demuestran que la herramienta permite trabajar con estructuras de entrada bien diferentes. En el primero, cada una de las partes que componen una instancia están dentro de comillas dobles y separados por comas, teniendo como primer elemento el tipo de la clase (etiqueta) a la que pertenece, seguido del texto de la instancia, en la Figura 4.3 se presenta dicha estructura.

“6”, “what is the best off-road motorcycle trail ?”, “long-distance trail

throughout CA”, “i hear that mojave road is amazing! <br />\nsearch for it online.

Figura 4.3: Estructura ejemplo de las instancias que componen el dataSet1. Cada instancia del segundo tipo de dataSet está formado por una estructura compuesta de tags que permiten diferenciar los elementos de la instancia, la información de mayor importancia se encuentra dentro de los tags <rating> y <review_text>, los cuales contienen los datos correspondientes al tipo de clase y el texto que ayudarán en el entrenamiento del modelo y que posteriormente será evaluado. En la Figura 4.4, se presenta un ejemplo de este tipo de estructura.

<review> <rating>

1.0 </rating> <title>

One of the Worst Magazines Around </title>

<date>

December 30, 2004 </date>

(47)

A Patriotic Professor “universityprofessor2293” </reviewer>

<reviewer_location> New York, NY </reviewer_location> <review_text>

If you want to keep yourself in delusions and in the dark about

what’s really going on in the world, read this magazine. National Review is for

people who sympathize with Christian jihadits and white supremacists. Wouldn’t

want to be in that camp if I were you. Read Time, Mother Jones, The nation, or th

American Prospect instead. </review_text> </review>

Figura 4.4: Estructura ejemplo de las instancias que componen el dataSet2. Las estructuras de los datos de entrada, que actualmente soporta la aplicación fueron implementadas mediante la creación de clases, las cuales tienen comportamientos en común, cada clase se encarga de redefinir el método readDataSet(). Este método se encarga de poder leer la estructura del dataSet extrayendo la información de importancia para la red neuronal.

Agregar nuevas estructuras de datos de entrada se puede hacer fácilmente mediante la implementación de una nueva clase, en la cual se redefina el método readDataSet() y estableciendo dicha estructura como una nueva entrada posible. En la Figura 4.5 se presenta la estructura utilizada en la implementación mencionada.

Figura 4.5: Diagrama de clases del diseño de los tipos de dataSet.

Referencias

Documento similar

9 Aplicar el plan de pruebas diseñado en este trabajo a otros libros electrónicos, incorporando o disminuyendo casos de prueba, en función de la aplicación a probar, propiciando

Por PEDRO A. EUROPEIZACIÓN DEL DERECHO PRIVADO. Re- laciones entre el Derecho privado y el ordenamiento comunitario. Ca- racterización del Derecho privado comunitario. A) Mecanismos

En el capítulo de desventajas o posibles inconvenientes que ofrece la forma del Organismo autónomo figura la rigidez de su régimen jurídico, absorbentemente de Derecho público por

La prueba confesional deberá desahogarse por la parte absolvente ante el juez competente. En este sentido, las personas físicas que sean parte en el juicio sólo están vinculadas

En los tiempos

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

The part I assessment is coordinated involving all MSCs and led by the RMS who prepares a draft assessment report, sends the request for information (RFI) with considerations,

Ciaurriz quien, durante su primer arlo de estancia en Loyola 40 , catalogó sus fondos siguiendo la división previa a la que nos hemos referido; y si esta labor fue de