viernes, 5 de junio de 2020

El Deep Learning explicado por Jordi Torres

En 'Python Deep Learning' nos encontramos con una muy buena introducción al campo del Deep Learning, una introducción muy didáctica en que todo el desarrollo teórico, que se realiza con bastante simplicidad, se acompaña de ejemplos reales realizados, como se indica en el subtítulo de la obra, usando las librerías Keras y TensorFlow 2.

El libro se estructura en catorce capítulos agrupados en cuatro partes, como sigue:
  • 'PARTE I: INTRODUCCIÓN': Una primera parte todavía muy introductoria centrada en aportar algunas definiciones y en poner en marcha las herramientas de trabajo

    • 'Capítulo 1: ¿Qué es el Deep Leaning?': Comienza explicando lo que es Inteligencia Aritifical y sus clases y situando al Machine Learning y al Deep learning en ese contexto. Luego introduce el Machine Learning y los tipos de aprendizaje para pasar a continuación a presentar el concepto de redes neuronales y sus tipos principales. Y finaliza el capítulo dando algunas de las razones que explican el auge actual del deep learning.

    • 'Capítulo 2: Entorno de trabajo': Un capítulo práctico para explicar cómo disponer de un entorno en Google Colab y Jupyter Notebook incluyendo TensorFlow y Keras.

    • 'Capítulo 3: Python y sus librerías': Otro capítulo un poco de apoyo para hablar de Python explicando sus fundamentos y la librería NumPy.


  • 'PARTE II: FUNDAMENTOS DEL DEEP LEARNING': Explica los fundamentos nucleares de las redes neuronales y el deep learning

    • 'Capítulo 4: Redes neuronales densamente conectadas': Comienza por el principio, explicando las neuronas artificiales y de forma muysimple los algoritmos de regresión. A continuación habla del perceptrón y el perceptrón multicapa y cómo se usa en problemas de clasificación. De cara a su aplicación en clasificación, también introduce la función de activación 'softmax'. Y todo ello lo aplica al caso de reconocimiento de dígitos escritos a mano usando la base MNIST.

    • 'Capítulo 5: Redes neuronales en Keras': Una vez entendidos los conceptos, en este capítulo los traslada a la librería Keras. Apoyándose en el caso de reconocimiento de dígitos manuscritos, explica la precarga de datos, la definición del modelo (cómo añadir capas y definir la función de activación), cómo configurar el proceso de aprendizaje, cómo evaluar el modelo y, finalmente, como hacer predicciones.

    • 'Capítulo 6: Cómo se entrena una red neuronal': Primero explica un esquema general de red neuronal y su aprendizaje donde se ven con claridad elementos como la red propiamente dicha, la función de pérdida, los optimizadores y los parámetros. También plantea un modelo general del aprendizaje de una red. Luego explica el algoritmo de descenso del gradiente y cómo se implementa en Keras. A continuación se centra en la función de pérdida para cerrar con los optimizadores.

    • 'Capítulo 7: Parámetros e hiperparámetros en redes neuronales': Empieza explicando por qué son necesarios los parámetros y la diferencia entre parámetros e hiperparámetros y los dos tipos de hiperparámetros existentes (de estructura y de algoritmo de aprendizaje). Comienza por explicar los hiperparámetros relacionados con el aprendizaje como el número de 'epochs', el tamaño del batch, la tasa de aprendizaje ('learning rate') y el decaimiento de la tasa de aprendizaje ('learning rate decay'), el momento ('momentum') y la inicialización de los pesos. Luego pasa a las funciones de activación y comenta, en concreto, la lineal, la sigmoide, la tangente hiperbólica, la 'softmax' y la ReLU. Finaliza con un caso práctico de clasificación binaria y cómo se maneja TensorFlow Playground.

    • 'Capítulo 8: redes neuronales convolucionales': Capítulo dedicado a explicar este tipo de redes tan usadas en visión artificial. Primero explica un poco el concepto de red convolucional y sus componentes básicos empezando por detallar cómo funciona la operación de convolución, incluyendo el 'pooling'. A continuaición explica cómo hacer una red en Keras, detallando la parte estructural, la eleccción de hiperparámetros y su aplicación al caso de la base de datos de moda 'Fashion - MNIST'. Al hilo del ejemplo explica algunos detalles más avanzado como el 'dropout' y la normalización.


  • 'PARTE III: TÉCNICAS DEL DEEP LEARNING': Una parte menos conceptual y más de aplicación

    • 'Capítulo 9: Etapas de un proyecto de Deep Learning': Nos propone un modelo de etapas para realizar un proyecto de deep learning. Empezando por la Definición del problema, nos habla de la preparación de datos donde nos explica, por ejemplo, la diferencia y criterios para la separación en datos de entrenamiento, validación y prueba y algunas estrategias posibles de validación. En la segunda fase, Desarrollar el modelo vemos cómo definirlo, configurarlo en cuanto a función de pérdida y optimizador y cómo entrenar al modelo. La tercera fase sería la Evaluación donde comienza por indicarnos cómo visualizar un modelo y nos habla del sobre-ajuste (over-fitting'), la detención temprana ('early stopping' y la evaluación.

    • 'Capítulo 10: Datos para entrenar redes neuronales': Trata de los datos de entrenamiento y nos indica, para empezar, dónde conseguir datos públicos, cómo descargarlos y usarlos y detalla, a modo de ejemplo, los datos de imágenes 'Dogs vs. Cats' de Kaggle. Nos habla también, y aplicado a este caso, el objeto ImageDataGenerator. Nos comenta también cómo solucionar problemas de sobre-ajsute y algunas ideas para construir modelos cuando se dispone de pocos datos.

    • 'Capítulo 11: Data augmentation y Transfer Learning': Dos técnicas relacionadas con el entrenamiento. La primera, 'Data Augmentation' tiene que ver con generar más datos a partir de los disponibles para entrenamiento como una forma de soluciones el sobre-ajuste. Lo explica con un caso de imágenes explicando formas de obtener nuevas imágenes a partir de las existentes mediante rotación, volteo, etc y cómo configurar ImageGenerator. Luego salta al 'Transfer Learning' que tiene que ver con el uso de redes pre-entrenadas como punto de partida y, así, nos habla de la extracción de características y del ajuste fino.

    • 'Capítulo 12: Arquitecturas avanzadas de redes neuronales': Presenta soluciones más avanzadas. Comienza por hablar del API funcional de Keras que, aunque algo menos sencilla que el API básica, permite cualquier tipo de modelos, incluyendo los más avanzados. Luego aborda las redes neuronales preentrenadas con nombre propio como AlexNet, VGG o ResNet y cómo acceder a ellas y usarlas en Keras.


  • 'PARTE IV: DEEP LEARNING GENERATIVO': Una última parte con, quizá, una de las áreas más avanzadas y espectaculares del deep learning, las redes capaces de 'crear' nuevos contenidos: texto, imágenes, etc

    • 'Capítulo 13: Redes neuronales recurrentes': Explica las redes neuronales recurrentes (RNN), unas redes que tienen en cuenta la historia anterior lo que las faculta para disponer de una cierta memoria y poder tratar series temporales. Nos explica cómo sería una célula de memoria, cómo se hace la retropropagación en el tiempo y alguna problemática como los 'exploding gradients' y los 'vanishing gradients' en que los gradientes resultan demasiado grandes y demasiado pequeños respectivamente. Nos habla también de las redes LSTM y de cómo vectorizar texto para el caso en que vayamos a utilizar las redes recurrentes en el procesamiento de texto, con técnicas como 'one-hot' o el 'embedding' de palabras. Luego propone un ejemplo de generación de texto usando una red recurrente

    • 'Capítulo 14: Generative Adversarial Networks': Finaliza con el caso de las redes adversarias. Explica las motivaciones y arquitecturas y el modo de entrenamiento y luego construye en Keras una red adversaria específica.
Tras los capítulos, cierra con una 'Clausura' breve y luego aporta cuatro apéndices:
  • 'Apéndice A: Traducción de los principales términos': Una útil correspondencia de términos en Inglés y Castellano.

  • 'Apéndice B: Tutorial de Google Colaboratory: ': Un poco más de detalle sobre el uso del entorno en Google Colaboratory y Jupyter Notebook propuesto en el segundo capítulo.

  • 'Apéndice C: Breve tutorial de TensorFlow Playground': Otro tutorial, en este caso sobre la herramienta TensorFlow Playground para la visualización de redes sencillas.

  • 'Apéndice D: Arquitectura de ResNet50': Detalle de la arquitectura de una de las redes con nombre propio mencionadas en el capítulo 12.
'Python Deep Learning' es un muy buen libro, con explicaciones claras y abundancia de ejemplos prácticos. Un libro con un equilibrio muy conseguido entre la aportación de conceptos y su aplicación práctica y también con un nivel de dificultad muy acertado, que permite su lectura sin excesivos conocimientos previos pero que, a pesar de ello, llega a un nivel de explicación y profundidad bastante razonable.

Muy recomendable.

Jordi Torres

(Fuente: Adaptación de la biografía en su página oficial)

Jordi Torres
Estudió Informática en la Facultat d’Informàtica de Barcelona de la Universitat Politècnica de Catalunya (UPC Barcelona Tech, 1988). Posteriormente realizó el doctorado en la misma UPC (siendo merecedor del premio a la mejor tesis de Informática de la UPC en el año 1993). Actualmente, es catedrático a tiempo completo en el Departamento de Arquitectura de Computadores de la UPC. Además, ha estado en el Center for Supercomputing Research & Development en Urbana-Champaign (Illinois, EE. UU., 1992) como investigador visitante.

Ha participado en más de 180 publicaciones de investigación en revistas, conferencias y capítulos de libros y colaborado en numerosa conferencias de las asociaciones IEEE y ACM siendo miembro del Comité de Programa en más de 50 de estas además de ocupar, en varias de ellas, cargos como Poster Chair, Program Chair, Publicity Chair, Steering Committee. También ha sido revisor de revistas relevantes en el área como IEEE Transactions on Computers, IEEE Transactions on Parallel and Distributed Systems, Concurrency, and Computation-Practice and Experience, Journal of Parallel and Distributed Computing, International Journal of Autonomic Computing, entre otras.

En 2005 se fundó el Barcelona Supercomputing Center – Centro Nacional de Supercomputación (BSC) siendo nombrado responsable de la línea de investigación Autonomic Systems and eBusiness Platforms dentro del departamento de Computer Sciencedel BSC. Este grupo de investigación generó más de 120 artículos de investigación y 11 tesis doctorales, así como componentes de software que se pueden aplicar a nivel de middleware de los sistemas informáticos para mejorar su adaptabilidad, eficiencia y productividad. El grupo de investigación centró su trabajo de investigación en los middleware de plataformas de ejecución de supercomputación compuestas por sistemas de múltiples cores de alta productividad con aceleradores y arquitecturas de almacenamiento avanzadas e implementadas en entornos distribuidos a gran escala. El grupo creció hasta llegar a 30 personas y fue el momento de reorganizar el grupo en nuevos grupos dentro del departamento de Computer Scienceen BSC. Ahora tengo el encargo de explorar nuevas oportunidades para aplicar la tecnología de Supercomputación al campo de la Inteligencia Artificial. Así se ha creado el nuevo grupo de investigación Emerging Technologies for Artificial Intelligence el cual dirige.

su actividad actual en esta área se reparte en diferentes frentes, destacando los trabajos incluidos en el convenio CaixaBank-BSC, que aplica la computación cognitiva al sector bancario. A lo largo de estos años con su grupo de investigación ha participado en una veintena de proyectos en convocatorias competitivas, y muchos de ellos implicaron transferencia de tecnología entre la universidad y la industria. El grupo de investigación también ha participado en Redes de Excelencia como la European Network of Excellence on High Performance and Embedded Architecture and Compilation(HiPEAC), la Partnership for Advanced Computing in Europe(PRACE) o la European Technology Platform for High-Performance Computing(ETP4HPC).

Ha estado dando clases durante más de 30 años en temas fundamentales de la informática como son los sistemas operativos, arquitectura de computadores, redes informáticas o evaluación del rendimiento de sistemas. Actualmente imparte asignaturas en el máster de Ingeniería Informática (máster MEI) y en el de Innovación e Investigación en Informática (master MIRI) acerca de temas relacionados con Cloud Computing, Big Data, Inteligencia Artificial o Deep Learning. En la actualidad también está colaborando con otras entidades como la UPC School of Professional & Executive Developmento ESADE. En el pasado fue miembro de la Cátedra Telefónica-UPC durante varios años donde trabajó en innovación docente.

Una porción de su tiempo tiene un rol consultivo y estratégico con tareas visionarias relacionadas con la tecnología de próxima generación y su impacto. Actualmente es miembro del consejo de administración de la empresa iThinkUPC actuando además de asesor en el departamento de Analítica de datos. Durante muchos años ha actuado como experto en estos temas para diversas organizaciones, empresas y ayudando a emprendedores. Ha sido miembro del consejo de administración de UPCnet (2011-2013), miembro del consejo asesor en el Centro de Excelencia de Big Data de Barcelona (2015-2016) y miembro del BSC Access Committee core team, entre otros. Ha participado como experto independiente por la European Commission(Information Society and Media Directorate) en 2010, para Friends of Europe’s Greening Europe Forum en2011, y para la Swiss Academy of Engineering Science durante 2012-2013. Actúa periódicamente como evaluador para el Ministerio de Ciencia y Tecnología de España, para la Dirección General de Investigación de la comunidad de Madrid, para la Universitat Jaume I de Castelló, para el Departament d’Universitat i Recerca de la Generalitat de Catalunya, para la Fundación La Caixa, o la Ireland science Foundation, entre otras instituciones. En el 2010 fué elegido por la Fundació Centre Tècnològic de Catalunya como miembro del equipo de expertos para elaborar el libro blanco La contribución de las TIC a la transición a un modelo energético más sostenible y en 2012 la Comisión Europea le invitó a contribuir en la agenda de la Second Digital Assembly.

Está comprometido con la divulgación de la ciencia y la técnica para llevarla fuera de las aulas universitarias al público en general. Por ello colabora con diversos medios de comunicación, radio y televisión desde hace años. En paralelo ha realizado numerosas conferencias para todo tipo de audiencias. También ha publicado varios libros acerca de ciencia y tecnología para un público general.

Antes de crearse el Barcelona Supercomputing Center, fué miembro del Centro Europeo de Paralelismo de Barcelona (CEPBA) (1994-2004) y miembro del board of managers del CEPBA-IBM Research Institute(CIRI) (2000- 2004). Ha sido Vicedecano de Relaciones Institucionales en la Facultat d’Informàtica de Barcelona (1998-2001). También ha sido miembro del Claustro de UPC varias épocas y miembro de la Junta de gobierno (2011-2013) participando activamente en varias de sus comisiones. Durante 30 años ha participado en numerosas actividades de gestión académica y representación institucional de la UPC.

Durante su carrera académica ha recibido algunos reconocimientos. Recientemente el Best Paper Award del workshop DeepVision en CVPR 2019 por el trabajo de nuestra doctorando Míriam Bellver. La “Menció FIBER” en el 2015 en el Camp del Barça, concedido por la mejor asociación de Alumni de la FIB. También tiene reconocidos 4 “tramos de investigación” por la “Comisión Nacional Evaluadora de la Actividad Investigadora”. Premio a la mejor tesis de informática de la UPC del curso 1993-94. Accésit al 1er Concurso de ideas medioambientales de la UPC (1998) concedido juntamente con Josep R. Herrero. Premio OLIVETTI-UPC en forma de beca (1992) o una beca de doctorado de la UPC (1991).

Es miembro de diferentes asociaciones como IEEE, ACM o ISOC. Es uno de los organizadores del Barcelona Spark Meetup y el Barcelona Data Science and Machine Learning Meetup.

Puedes saber más del autor visitando su página oficial o siguiéndole en twitter donde se identifica como @JordiTorresAI.

1 comentario: