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.
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:
El curso está dirigido a estudiantes de grado o posgrado, ingenierxs e investigadores que busquen un conocimiento sólido del aprendizaje profundo.
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.
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.
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.
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.
Tendrías que sentirte bien derivando, operando con vectores y matrices, y entendiendo la notación.
Deberías saber lo básico de probabilidades, distribución gaussiana, promedio, desviación estándar, etcétera.
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.
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.
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).
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.
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.
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.
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.
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.
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.
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.
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.
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.
Fecha | Descripción | Libro | ||
---|---|---|---|---|
Clase 1 | Lunes 15 de marzo |
Introducción, motivación y bienvenida
|
Capítulo 1 "Introduction" |
Presentación Video |
Clase 2 | Miércoles 17 de marzo |
Implementación de modelos
|
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
|
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
|
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
|
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
|
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
|
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)
|
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
|
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
|
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
|
Capítulo 13 "Computer Vision" (secciones 13.3 a 13.8) |
Presentación Video |
Clase 12 | Miércoles 28 de abril |
Upsampling
|
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 transferenciaNotebook GANs |
|
Clase 13 | Miércoles 12 de mayo |
Redes recurrentes (RNNs)
|
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
|
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
|
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
|
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
|
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
|
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
|
Capítulo 10 "Attention Mechanisms" (sección 10.7) |
Presentación Video |
Clase 20 | Miércoles 9 de junio |
Transformers bidireccionales: BERT
|
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
|
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
|
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 SQuADRobust QA Dataset Stanford Question AnsweringRecursos Consejos para el proyecto finalMetodología práctica Arquitecturas QA |
|
Clase 23 | Miércoles 23 de junio |
Sistemas de recomendación II
|
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 artificialpor 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 |
¿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.
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