Aprendizaje profundo

por Datitos / Otoño 2021

En los últimos cinco años el aprendizaje profundo ha tomado al mundo por sorpresa, impulsando un rápido progreso en campos tan diversos como la visión por computadora, el procesamiento del lenguaje natural, el reconocimiento automático del habla, el aprendizaje por refuerzos y el modelado estadístico.


Tapa del libro Dive into Deep Learning

Hemos elegido basar el curso en el libro Dive into Deep Learning, consideramos que ofrece un enfoque práctico, amplio y moderno, incluye matemáticas y código, y sus contenidos son actuales.

Este curso representa nuestro intento de hacer que el aprendizaje profundo sea accesible, enseñándote los conceptos, el contexto y el código. Nos propusimos crear un recurso que simultáneamente pudiera:

Instructores

Clases

Comienzan en marzo y se extienden hasta junio.

Los videos de las clases son publicados los lunes y los miércoles a las 8:00 en este canal de YouTube.

Consultas

Los horarios de consulta son jueves de 17:00 a 19:00 y viernes de 8:00 a 10:00.

Usaremos este servidor de Discord como canal de comunicación para las consultas, grupos de estudio, noticias y demás.

Formato

  • 24 clases
  • 8 prácticos
  • 2 exámenes
  • Proyecto final

Prerequisitos

Debido a que explicamos cada concepto desde cero, no requerimos conocimientos previos en aprendizaje profundo ni aprendizaje automático. Explicar completamente los métodos de aprendizaje profundo requiere de matemáticas y programación, pero intentaremos que el curso sea lo más autocontenido posible.

Programación en Python

Vamos a programar mucho. Si tenés experiencia programando pero en un lenguaje diferente probablemente estés bien. ¿Dónde aprender Python? Internet está llena de recursos; algunas recomendaciones:

También requerimos algo de familiaridad con NumPy y Pandas, dos librerías de Python muy usadas en ciencia de datos.

Cálculo de una variable, cálculo vectorial, álgebra lineal

Tendrías que sentirte bien derivando, operando con vectores y matrices, y entendiendo la notación.

Conocimiento básico de probabilidad y estadística

Deberías saber lo básico de probabilidades, distribución gaussiana, promedio, desviación estándar, etcétera.

Contenidos

El curso provee una introducción práctica al aprendizaje profundo, incluyendo motivaciones teóricas y cómo llevarlas a la práctica. A lo largo del mismo haremos énfasis en implementaciones eficientes, optimización y escalabilidad; en la utilización de múltiples GPUs y múltiples computadoras. El objetivo es que obtengas tanto buen entendimiento como buena habilidad para construir modelos modernos.

Unidad 1: Aprendizaje automático

En la primera parte veremos conceptos y técnicas básicas del aprendizaje automático y del aprendizaje profundo.

Temas de esta unidad son regresión lineal, funciones de pérdida, técnicas de regularización, perceptrón multicapa, algoritmo de backpropagation, diferenciación automática, descenso por el gradiente estocástico, algoritmos de optimización.

Unidad 2: Visión por computadora

A partir de la segunda unidad nos enfocaremos en técnicas modernas de aprendizaje profundo. Vamos a introducir las redes neuronales convolucionales (CNNs) para el procesamiento de imágenes, empezando por la simple LeNet hacia arquitecturas más recientes como ResNet.

Durante esta parte veremos varios componentes clave que establecen las bases para implementar modelos más complejos. Tópicos de esta unidad también son las técnicas de transfer learning y fine-tuning.

Llegaremos a ver algo de redes generativas antagónicas (GANs).

Unidad 3: Procesamiento de lenguaje natural

En esta unidad introduciremos las redes neuronales recurrentes (RNNs), modelos que explotan la estructura temporal o secuencial de los datos, usados comúnmente para el procesamiento de lenguaje natural y la predicción de series temporales.

Una nueva clase de modelos que emplean una técnica llamada mecanismos de atención han desplazado a las RNNs en el procesamiento de lenguaje natural — les dedicaremos una buena parte de esta unidad.

Unidad 4: Sistemas de recomendación

Finalmente en una unidad breve, veremos sistemas de recomendación —necesidad frecuente de la industria— y de cómo el aprendizaje profundo habilita la factorización de matrices de grandes proporciones.

Material de referencia

Organización y condiciones de cursado

Libro

El material de referencia principal es el libro Dive into Deep Learning, también conocido como D2L. Es fundamental para hacer el curso que leas el libro casi en su totalidad. En el calendario te proponemos un orden y un ritmo de lectura.

Clases

A medida que vayan siendo publicadas, las clases quedarán disponibles en el canal de YouTube para que estudies de manera asincrónica. Es muy recomendable que te suscribas al canal y que por medio de Discord interactúes con otres estudiantes.

Consultas

Las horas de consulta servirán para que el equipo docente resuelva dudas tanto conceptuales como de aplicación de manera sincrónica. Servirán también para hacer puestas en común, resolver ejercicios, discutir otras alternativas de solución, proponer sugerencias, promover la discusión de los temas del curso.

La asistencia a consulta no es de carácter obligatorio, sin embargo, recomendamos que asistas para un mejor desempeño durante el cursado.

Trabajos prácticos

Habrá diez guías de trabajos prácticos. Estas en general tendrán dos partes.

Las fechas de entrega para los trabajos prácticos están estipuladas en el calendario.

Exámenes

Al final de cada sección del libro del curso hay algunos ejercicios, mayormente preguntas conceptuales acerca del tema de la sección. Las preguntas de los dos exámenes parciales consistirán en tales ejercicios y en otros muy similares. Es buen material para llevar a las consultas.

Proyecto final

Para aprobar el curso deberás presentar un proyecto final sobre alguno de los temas discutidos durante el cursado. Estos proyectos finales serán trabajos grupales que los mismos grupos propondrán.

Código de conducta

Datitos se dedica a proporcionar una experiencia libre de acoso. No toleramos el acoso en ninguna de las formas posibles.

Los trabajos a entregar deben ser una producción original.

Cualquier persona que viole este código de conducta será sancionada o expulsada de este espacio a discreción del equipo organizador.

Calendario

Fecha Descripción Libro
Clase 1 Lunes 15 de marzo

Introducción, motivación y bienvenida

  • Definición de componentes claves
  • Tipo de problemas de aprendizaje
  • Aprendizaje profundo en la vida cotidiana
Capítulo 1 "Introduction" Presentación
Video
Clase 2 Miércoles 17 de marzo

Implementación de modelos

  • Frameworks de aprendizaje profundo
  • Entornos de ejecución
  • Manipulación y preprocesamiento de datos
  • Cálculo automático de gradientes
Capítulo 2 "Preliminaries" Presentación
Video
Trabajo práctico 1 Miércoles 17 de marzo Habilitado para resolución Notebook
Consulta Pablo Marinozi Jueves 18 de marzo 17:00 a 19:00
Consulta Luciano Robino Viernes 19 de marzo 8:00 a 10:00
Clase 3 Lunes 22 de marzo

Redes neuronales de una capa

  • Regresión lineal
  • Regresión softmax
  • Implementación desde cero
  • Implementación usando frameworks
Capítulo 3 "Linear Neural Networks" Presentación
Video
Consulta Pablo Marinozi Jueves 25 de marzo 17:00 a 19:00
Consulta Luciano Robino Viernes 26 de marzo 8:00 a 10:00
Clase 4 Lunes 29 de marzo

Redes neuronales de multicapa

  • Perceptrón multicapa (MLP)
  • Propagación directa
  • Propagación hacia atrás
  • Implementación desde cero
  • Implementación usando frameworks
Capítulo 4 "Multilayer Perceptrons" (secciones 4.1, 4.2, 4.3, 4.7, 4.8) Presentación
Video
Trabajo práctico 1 Domingo 4 de abril ENTREGA Devoluciones
Clase 5 Lunes 5 de abril

MLP a medida

  • Capas y bloques
  • Capas diseñadas a medida
  • Inicialización y manejo de parámetros
  • Operaciones de I/O
  • GPU
Capítulo 5 "Deep Learning Computation" Presentación
Video
Trabajo práctico 2 Lunes 5 de abril Habilitado para resolución Competencia Kaggle
Clase 6 Miércoles 7 de abril

Selección de modelos

  • Underfitting
  • Overfitting
  • Regularización de los pesos
  • Dropout
Capítulo 4 "Multilayer Perceptrons" (secciones 4.4, 4.5, 4.6, 4.10) Presentación
Video
Consulta Pablo Marinozi Jueves 8 de abril 17:00 a 19:00
Consulta Luciano Robino Viernes 9 de abril 8:00 a 10:00
Clase 7 Lunes 12 de abril

Algoritmos de optimización

  • Descenso por gradiente
  • Descenso por gradiente estocástico
  • Momento
  • ADAGRAD
  • ADAM
Capítulo 11 "Optimization Algorithms" Presentación
Video
Trabajo práctico 3 Lunes 12 de abril Habilitado para resolución Notebook
Clase 8 Miércoles 14 de abril

Redes convolucionales (CNNs)

  • Convoluciones en imágenes
  • Pooling
  • Padding y striding
  • Arquitectura LeNet
  • Implementación de LeNet
Capítulo 6 "Convolutional Neural Networks" Presentación
Video
Consulta Pablo Marinozi Jueves 15 de abril 17:00 a 19:00
Consulta Luciano Robino Viernes 16 de abril 8:00 a 10:00
Trabajo práctico 2 Domingo 18 de abril ENTREGA
Clase 9 Lunes 19 de abril

Arquitecturas CNNs modernas

  • AlexNet e ImageNet
  • Bloques VGG
  • Bloques NiN
  • GoogLeNet y el bloque Inception
  • Normalización por lote
  • Conexiones residuales: ResNet
  • Bloques densos: DenseNet
Capítulo 7 "Modern Convolutional Neural Networks" Presentación
Video
Trabajo práctico 4 Lunes 19 de abril Habilitado para resolución Notebook
Clase 10 Miércoles 21 de abril

Transferencia de conocimiento

  • Redes preentrenadas
  • Fine-tuning
  • Aplicación: Transferencia de estilos
Capítulo 13 "Computer Vision" (secciones 13.1, 13.2, 13.12) Presentación
Video
Consulta Pablo Marinozi Jueves 22 de abril 17:00 a 19:00
Consulta Luciano Robino Viernes 23 de abril 8:00 a 10:00
Trabajo práctico 3 Domingo 25 de abril ENTREGA Devoluciones
Clase 11 Lunes 26 de abril

Detección de objetos

  • Bounding boxes
  • Detección multiescala: SSD
  • Detección basada en regiones: R-CNN
Capítulo 13 "Computer Vision" (secciones 13.3 a 13.8) Presentación
Video
Clase 12 Miércoles 28 de abril

Upsampling

  • Convolución traspuesta
  • Segmentación semática: FCN
  • Modelos generativos: GANs
Capítulo 13 "Computer Vision" (secciones 13.9, 13.10, 13.11) y capítulo 17 "Generative Adversarial Networks" Presentación
Video
Consulta Pablo Marinozi Jueves 29 de abril 17:00 a 19:00
Consulta Luciano Robino Viernes 30 de abril 8:00 a 10:00
Trabajo práctico 4 Domingo 2 de mayo ENTREGA Devoluciones
Parcial 1 Miércoles 5 de mayo Conceptos teóricos unidades 1 y 2 Examen de ejemplo
Examen
Parcial 1 Domingo 9 de mayo ENTREGA Devoluciones
Trabajo práctico 5 Lunes 10 de mayo Habilitado para resolución

Elegir uno

Notebook transferencia
Notebook GANs
Clase 13 Miércoles 12 de mayo

Redes recurrentes (RNNs)

  • Modelos secuenciales
  • Variables ocultas
  • Perplejidad, verosimilitud y entropia
  • Propagación hacia atrás con dependencia temporal
  • Implementación desde cero
  • Implementación usando frameworks
Capítulo 8 "Recurrent Neural Networks" Presentación
Video
Consulta Pablo Marinozi Jueves 13 de mayo 17:00 a 19:00
Consulta Luciano Robino Viernes 14 de mayo 8:00 a 10:00
Trabajo práctico 5 Domingo 16 de mayo ENTREGA Devoluciones
Clase 14 Lunes 17 de mayo

Arquitecturas RNNs modernas

  • Recurrencia con compuertas: GRU
  • Recurrencia con memoria: LSTM
  • Recurrencia bidireccional
Capítulo 9 "Modern Recurrent Neural Networks" (secciones 9.1 a 9.4) Presentación
Video
Trabajo práctico 6 Lunes 17 de mayo Habilitado para resolución Notebook
Clase 15 Miércoles 19 de mayo

Embeddings

  • Embeddings de palabras: Word2Vec
  • Embeddings de palabras: GloVe
  • Embeddings de morfemas: fastText
Capítulo 14 "Natural Language Processing Pretraining" (secciones 14.1 a 14.6) Presentación
Video
Consulta Pablo Marinozi Jueves 20 de mayo 17:00 a 19:00
Consulta Luciano Robino Viernes 21 de mayo 8:00 a 10:00
Clase 16 Miércoles 26 de mayo

Aplicaciones de RNN

  • Análisis de sentimiento
  • Problemas de secuencia a secuecia: Seq2Seq
  • Traducción automática
Capítulo 9 "Modern Recurrent Neural Networks" (secciones 9.5 a 9.8) y capítulo 15 "Natural Language Processing Applications" (secciones 15.1, 15.2, 15.3) Presentación
Video
Consulta Pablo Marinozi Jueves 27 de mayo 17:00 a 19:00
Consulta Luciano Robino Viernes 28 de mayo 8:00 a 10:00
Trabajo práctico 6 Domingo 30 de mayo ENTREGA Devoluciones
Clase 17 Lunes 31 de mayo

Mecanismos de atención

  • Concepto de atención
  • Pooling de atención
  • Métricas de atención
Capítulo 10 "Attention Mechanisms" (secciones 10.1, 10.2, 10.3) Presentación
Video
Trabajo práctico 7 Lunes 31 de mayo Habilitado para resolución Notebook
Clase 18 Miércoles 2 de junio

Atención en RNNs

  • Modelo de Bahdanau
  • Multiples cabezales
  • Autoatención
Capítulo 10 "Attention Mechanisms" (secciones 10.4, 10.5, 10.6) Presentación
Video
Consulta Pablo Marinozi Jueves 3 de junio 17:00 a 19:00
Consulta Luciano Robino Viernes 4 de junio 8:00 a 10:00
Clase 19 Lunes 7 de junio

Transformers

  • MLP sensible a la posición
  • Normalización por capas
  • Atención con máscaras
  • Codificación posicional
Capítulo 10 "Attention Mechanisms" (sección 10.7) Presentación
Video
Clase 20 Miércoles 9 de junio

Transformers bidireccionales: BERT

  • Embeddings sensibles al contexto
  • Arquitectura independiete de la tarea
  • Modelado del lenguaje con máscaras
Capítulo 14 "Natural Language Processing Pretraining" (secciones 14.8, 14.9, 14.10) Presentación
Video
Consulta Pablo Marinozi Jueves 10 de junio 17:00 a 19:00
Consulta Luciano Robino Viernes 11 de junio 8:00 a 10:00
Trabajo práctico 7 Domingo 13 de junio ENTREGA Devoluciones
Clase 21 Lunes 14 de junio

Aplicaciones de BERT

  • Predicción de próximas oraciones
  • Etiquetado automático
  • Respuesta automatizada a preguntas
  • Inferencia del lenguaje
Capítulo 15 "Natural Language Processing Applications" (secciones 15.4 a 15.7) Presentación
Video
Trabajo práctico 8 Lunes 14 de junio Habilitado para resolución Notebook
Clase 22 Miércoles 16 de junio

Sistemas de recomendación con datos explícitos

  • Factorización de matrices
  • Factorización con MLP: NeuMF
  • Autoencoders en recomendación
  • Muestreo negativo
  • Máquinas de factorización
  • Máquinas de factorización profundas
Capítulo 16 "Recommender Systems" (secciones 16.1 a 16.4, 16.6, 16.9, 16.10) Presentación
Video
Consulta Pablo Marinozi Jueves 17 de junio 17:00 a 19:00
Consulta Luciano Robino Viernes 18 de junio 8:00 a 10:00
Trabajo práctico 8 Lunes 21 de junio ENTREGA Devoluciones
Proyecto final Martes 22 de junio Propuestas de proyectos Instrucciones

Elegir uno

SQuAD
Robust QA

Dataset

Stanford Question Answering

Recursos

Consejos para el proyecto final
Metodología práctica
Arquitecturas QA
Clase 23 Miércoles 23 de junio

Sistemas de recomendación II

  • CNNs en recomendación Caser
  • Clasificación binaria en sistemas de recomendación
  • Matrices de confusión y métricas
  • Muestreo negativo: funciones de pérdida para ranking
Capítulo 16 "Recommender Systems" (secciones 16.5 y 16.7) Presentación
Video
Consulta Pablo Marinozi Jueves 24 de junio 17:00 a 19:00
Consulta Luciano Robino Viernes 25 de junio 8:00 a 10:00
Clase 24 Lunes 28 de junio

Ética en la inteligencia artificial

por Ariadna Luján Martínez y Sol Pino
Presentación
Video
Mini curso Kaggle
Consulta Pablo Marinozi Jueves 1 de julio 17:00 a 19:00
Consulta Luciano Robino Viernes 2 de julio 8:00 a 10:00
Parcial 2 Miércoles 7 de julio Conceptos teóricos unidades 3 y 4 Examen
Parcial 2 Domingo 11 de julio ENTREGA Devoluciones
Consulta Pablo Marinozi Jueves 15 de julio 17:00 a 19:00
Consulta Luciano Robino Viernes 16 de julio 8:00 a 10:00
Consulta Pablo Marinozi Jueves 22 de julio 17:00 a 19:00
Consulta Luciano Robino Viernes 23 de julio 8:00 a 10:00
Proyecto final Miércoles 28 de julio ENTREGA Presentaciones
Informes

FAQ

¿Entregarán certificados a quienes aprueben el curso?

Es un curso independiente, los certificados no tendrían ninguna validez académica. Estamos pensando en dejar una nómina de personas que lograron concluirlo en esta misma página, por si sirve de algo.

Tengo dudas acerca de si cumplo con los prerrequisitos, ¿cómo saber si podré hacer el curso?

La mejor manera es ojear el libro del curso, especialmente el capítulo 2, y llegar a una conclusión personalmente.

¿Cuál es la diferencia entre este curso y otros disponibles en internet, como los citados en "material de referencia"?

No mucha, la verdad — prácticamente todo el contenido viene del material de referencia. Hacemos este curso por si todavía no has hecho los otros, a ver si por medio de la iniciativa y el acompañamiento local te motivamos a hacer este. Sabemos lo difícil que es no colgar un curso en línea que nadie te pidió hacer.

¿Qué es Datitos?

Es un grupo de científicxs de datos que viven y trabajan en Mendoza, Argentina. Nos ayudamos mutuamente y le damos una mano a quienes desean meterse en este mundo. Co-organizamos los eventos locales de ciencia de datos.

¿Quién es Luciano Robino?

Es licenciado en física egresado de Instituto Balseiro. Mágister en física emitido por la misma institución. Actualmente cursa la carrera de licenciatura en computación en Facultad de Ingeniería, UNCuyo. Ha trabajado en el módulo de Matemática del ingreso a la Facultad de Ciencias Económicas, UNCuyo. En sus ratos libres estudia japonés.

Si la propuesta del curso es estudiar del libro, ¿para qué están las clases?

Es posible hacer el curso sin ver las clases, solo leyendo el libro. Lo inverso, ver las clases y no leer el libro o hacerlo parcialmente no te será de gran ayuda.

La intención de las clases es facilitarte la lectura del libro. El equipo docente prepara las clases en base al mismo intentando ponerse en tu lugar, determinando qué partes requieren explicaciones más amplias o desde otro punto de vista. Si al equipo docente le parece que el tema está muy claro en el libro, lo más probable es que ni sea tocado en clase.

¿Es necesario saber inglés?

Como el libro está en inglés, cierto nivel de comprensión lectora es necesaria. Quizás con la ayuda de traducciones automáticas sea posible superar la barrera del idioma.

El libro tiene implementaciones en código en varios frameworks de redes neuronales: TensorFlow, PyTorch, MXNet. ¿Hay alguna preferencia?

Son todos excelentes frameworks. Por una cuestión de practicidad en el dictado de las clases y en la corrección de trabajos prácticos, nos enfocamos solo en PyTorch.

¿En necesario instalar programas en mi computadora?

Para los prácticos usamos Google Colab, un servicio gratuito de la nube de Google basado en Jupyter Notebooks. En principio, no necesitás correr código en tu propia máquina para hacer el curso, simplemente trabajar en Colab.

¿Dónde enviar los trabajos prácticos?

Al correo datitos-aprendizaje-profundo@googlegroups.com. Es importante que lo hagas desde la misma dirección que utilizaste para la inscripción. En el caso de trabajos hechos en Google Colab, descargar una copia del notebook en formato .ipynb y enviarlo adjunto.

¿Hasta qué hora del día de entrega es posible presentar el trabajo práctico?

Hasta las 23:59:59. Si el envío llega al día siguiente, consideraremos que has entregado tarde.

¿Qué pasa si entrego tarde un trabajo práctico?

Dependiendo del número de personas inscriptas al curso puede que dejemos de hacerte seguimiento, en otras palabras, podrías perder la regularidad; todavía lo estamos estudiando. En promedio habrán 14 días entre la habilitación para resolución y la entrega de un trabajo práctico, que no serán demasiado extensos, por lo que consideramos tiempo más que suficiente para hacer presentaciones a tiempo.

¿Puedo hacer los trabajos prácticos en grupo?

Incentivamos la conformación de grupos de estudio. En este sentido podés discutir la resolución de los prácticos con otras personas, sin embargo las respuestas deben ser personales. Siempre que presentes un trabajo en el que te has apoyado en un conjunto, deberás incluir el nombre de todas las personas del grupo.

¿Es necesario inscribirme para poder hacer el curso?

En lo absoluto. La inscripción —que es gratuita— es para obtener seguimiento por parte del equipo docente: corrección de trabajos prácticos, exámenes, proyecto final. Aunque no te inscribas todos estos recursos estarán a tu disposición: las clases en YouTube, el servidor de Discord para interactuar con el equipo docente (consultas) y otres participantes (grupos de estudio), aquí mismo colgaremos trabajos prácticos y exámenes, incluyendo las respuestas a los exámenes.

Inscripción (cerrada)

Dado el tamaño del equipo docente, la capacidad de corrección y seguimiento es limitada, por lo que existe un cupo de inscripción. Para la selección priorizaremos:

El material del curso es de acceso libre y gratuito, independientemente del resultado de la selección. Te contactaremos por correo para avisarte del resultado de la pre-inscripción.


Actualización 29 de marzo: La inscripción para el año 2021 cerró, podés anotarte igual para mostrarnos tu interés en el curso. Te contactaremos en el 2022.

Actualización 5 de mayo: Anunciamos la versión distendida del curso. Consiste en la primera mitad del curso (unidades 1 y 2) con fechas de entrega extendidas. Más información en este anuncio en el servidor de Discord.

Ir al formulario