Curso de Deep Learning
(fleuret.org)- Materiales de clases abiertas de deep learning organizados para el curso 14x050 de la Universidad de Ginebra, donde se pueden ver en un solo lugar las diapositivas, handouts y videos grabados de François Fleuret
- Basado en ejemplos de PyTorch, cubre un rango amplio para principiantes, desde operaciones con tensores, diferenciación automática y descenso por gradiente hasta modelos generativos, recurrentes y de atención
- El archivo PDF completo tiene una escala de 1107 diapositivas, y los subtítulos de los screencasts se ofrecen como un archivo ZIP generado automáticamente con OpenAI Whisper
- También se incluyen Practical 1~6, código de soluciones y un Python prologue común, para usar de inmediato en prácticas de carga y preprocesamiento de MNIST/CIFAR10
- Requiere álgebra lineal, cálculo, Python, probabilidad y estadística, optimización, algoritmos y fundamentos de procesamiento de señales, y el material se distribuye bajo CC BY-NC-SA 4.0
Resumen del curso
- Deep Learning Course es una página que reúne las diapositivas y materiales grabados del curso 14x050 de deep learning de la Universidad de Ginebra impartido por François Fleuret
- Está compuesto como un curso de introducción al deep learning que incluye ejemplos con el framework PyTorch
- El alcance del curso sigue estos ejes
- objetivos del machine learning y tareas principales
- operaciones con tensores
- diferenciación automática y descenso por gradiente
- técnicas específicas de deep learning
- modelos generativos, recurrentes y de atención
- También ofrece por separado "The Little Book of Deep Learning"
- Es una breve introducción al deep learning en formato móvil para lectores con formación STEM
- Este curso se desarrolló por primera vez en 2018 en Idiap Research Institute y se dictó hasta 2022 en École Polytechnique Fédérale de Lausanne como EE-559
Formato del material y descargas
- El PDF de diapositivas para clase usa orientación horizontal y overlays pensados para la presentación
- El PDF de handouts se compila en orientación vertical, incluye notas adicionales y no usa efectos de overlay
- Los screencasts pueden verse por streaming en el navegador o descargarse como archivos mp4
- El archivo PDF completo puede descargarse en los siguientes archivos
- dlc-handout-all.zip: 101.7Mb
- dlc-slides-all.zip: 101.7Mb
- Los subtítulos de los screencasts fueron generados automáticamente con Whisper de OpenAI, y el archivo dlc-video-subtitles.zip pesa 502.1Kb
Flujo de las 13 unidades
- Todo el material del curso está compuesto por 13 grandes unidades, y en cada una se indican la cantidad de diapositivas y la duración del video
- La parte inicial se enfoca en establecer los conceptos básicos de deep learning y machine learning
- Introduction: de redes neuronales a deep learning, aplicaciones actuales y casos de éxito, fundamentos de tensores y regresión lineal, tensores de alta dimensión, estructura interna de los tensores
- Machine learning fundamentals: pérdida y riesgo, sobreajuste y subajuste, dilema sesgo-varianza, protocolos de evaluación, clustering y embeddings
- Multi-layer perceptron and back-propagation: perceptrón, perspectiva probabilística de clasificadores lineales, separabilidad lineal, MLP, descenso por gradiente, backpropagation
- La parte intermedia pasa al uso de PyTorch y a capas y técnicas de entrenamiento para deep learning
- Graphs of operators, autograd, and convolutional layers: redes DAG, Autograd, módulos de PyTorch y procesamiento por lotes, convolución, pooling, escritura de módulos PyTorch
- Initialization and optimization: pérdida de entropía cruzada, descenso por gradiente estocástico, optimizer de PyTorch, penalización L2/L1, inicialización de parámetros, selección de arquitectura y protocolos de entrenamiento, escritura de funciones de Autograd
- Going deeper: ventajas de la profundidad, Rectifier, Dropout, Batch Normalization, Residual Network, uso de GPU
- La parte final se expande a modelos generativos, visión por computadora, análisis interno de modelos y modelos de secuencia
- Autoencoders: Transposed convolution, Deep Autoencoder, Denoising Autoencoder, Variational Autoencoder
- El screencast de VAE no está actualizado, por lo que hay que revisar las diapositivas
- Computer vision: tareas de visión por computadora, redes de clasificación de imágenes, redes de detección de objetos, redes de segmentación semántica, DataLoader y neuro-surgery
- Under the hood: visualización de parámetros, visualización de activaciones, visualización del procesamiento desde la entrada, optimización de entrada
- Autoregression and Normalizing Flows: autorregresión, Causal convolution, Non-volume preserving network
- Generative Adversarial Networks: GAN, Wasserstein GAN, Conditional GAN y traducción de imágenes, persistencia del modelo y checkpoints
- Recurrent models and NLP: RNN, LSTM y GRU, embeddings de palabras y traducción
- Attention models: atención para memoria y traducción de secuencias, mecanismo de atención, Transformer Network
- El screencast de la unidad de atención no está actualizado, por lo que hay que revisar las diapositivas
- Autoencoders: Transposed convolution, Deep Autoencoder, Denoising Autoencoder, Variational Autoencoder
Material práctico y Python prologue
- Las prácticas se ofrecen como Practical 1~6, y cada PDF está enlazado junto con su código de solución
- El Python prologue para las prácticas se ofrece como dlc_practical_prologue.py
- El prologue procesa argumentos de línea de comandos
--full: usar el dataset completo--tiny: usar un dataset muy pequeño para verificaciones rápidas--seed SEED: especificar la semilla aleatoria; si es menor que 0, no se aplica seeding--cifar: usar el dataset CIFAR en lugar de MNIST--data_dir DATA_DIR: especificar la ubicación de los datos de PyTorch; el valor predeterminado es$PYTORCH_DATA_DIRo./data
- La función
load_data(cifar=None, one_hot_labels=False, normalize=False, flatten=True)descarga los datos si hace falta y, siflattenes verdadero, convierte las imágenes en vectores unidimensionales - Los valores devueltos son cuatro tensores:
train_data,train_target,test_data,test_target - Si
cifar=True, usa CIFAR10; si esFalse, usa MNIST; si esNone, sigue el argumento--cifar - Si
one_hot_labels=True, convierte los targets en untorch.Tensor2D con una columna por clase, pone 1 solo en la posición correcta y -1 en el resto - Si
normalize=True, normaliza los tensores de datos con base en la media y varianza de los datos de entrenamiento - Si
flatten=True, los datos quedan como un tensor 2DN × D; si es falso, quedan como un tensor 4DN × C × H × W - El ejemplo predeterminado usa MNIST y, si no se incluye
--full, se reduce a 1000 muestras de entrenamiento y 1000 de prueba, con tamaño de entradatorch.Size([1000, 784])
Conocimientos previos y documentación de referencia
- Los conocimientos previos incluyen las siguientes áreas
- álgebra lineal: vectores, matrices, espacio euclidiano
- cálculo: Jacobian, Hessian, Chain rule
- programación en Python
- fundamentos de probabilidad y estadística: distribuciones discretas y continuas, ley de los grandes números, probabilidad condicional, Bayes, PCA
- fundamentos de optimización: concepto de mínimo, descenso por gradiente
- fundamentos de algoritmos: costo computacional
- fundamentos de procesamiento de señales: Fourier transform, wavelet
- Como documentación de referencia, se pueden consultar los documentos de Python, Jupyter notebook y PyTorch
Licencia de uso
- Los materiales propios de la página se distribuyen bajo la licencia Creative Commons BY-NC-SA 4.0 International License
- Se especifica que se permite su uso para fines de educación académica formal, pero con la condición de no usarlos en libros, YouTube con mucha publicidad u otros modelos de monetización
2 comentarios
Es una lástima que las clases no tengan subtítulos...
Opiniones en Hacker News
También vale la pena ver el canal de YouTube de Stanford. Subieron una serie completa de clases de machine learning con 19 videos
https://m.youtube.com/playlist?list=PLoROMvodv4rNyWOpJg_Yh4NSqI4Z4vOYy
Si entras al canal, hay bastantes clases de ciencias de la computación subidas, y la calidad también es bastante buena
Se publicaron muchos buenos recursos, pero parece que en la lista falta Understanding Deep Learning
Creo que Simon J.D. Prince hizo un trabajo realmente impresionante con este libro. No solo por el contenido principal: las notas de cada capítulo llevan directamente a bibliografía avanzada, y además ofrece ejercicios que ponen a prueba de verdad la comprensión y excelentes notebooks que implementan los conceptos en código real
Si enseñara una clase de deep learning, también sería buen material gratuito de práctica para darles a los estudiantes, aunque probablemente esta comunidad no sea su público principal
[0] https://udlbook.github.io/udlbook/
Si te interesa este curso, también vale mucho la pena revisar Little Book of Deep Learning, del mismo autor
https://fleuret.org/francois/lbdl.html
Otro buen recurso es el curso NYU Deep Learning de Yann LeCun y Alfredo Canziani, y se puede ver completo en YouTube
https://atcold.github.io/NYU-DLSP20/
https://www.youtube.com/playlist?list=PLLHTzKZzVU9eaEyErdV26ikyolxOsz6mq
Practical Deep Learning for Coders también es una buena referencia
https://course.fast.ai/
¿Hay algún buen curso profundo que no requiera ver videos?
Estoy armando un curso con un poco menos de teoría y un poco más de aplicación: https://github.com/VikParuchuri/zero_to_gpt
Todos los videos son opcionales y cubren el mismo contenido que el texto
También recomiendo este conjunto de clases de Andrej Karpathy. La primera clase es bastante accesible incluso desde una perspectiva de principiante
https://karpathy.ai/zero-to-hero.html
Este curso de Sebastian Raschka también es bastante accesible en general. Si sabes un poco de Python o un lenguaje similar, puedes seguirlo
https://youtube.com/playlist?list=PLTKMiZHVd_2KJtIXOW0zFhFfBaJJilH51&si=ocsN2zSPN7YsrGiY
Como desarrollador full-stack de hace algunos años, ya algo oxidado, me gustaría meterme en este campo, pero no tengo ninguna idea de si con 6 meses de estudio se puede entrar en alguna medida
La pendiente de entrada no es tan empinada, pero el tiempo total puede ser mayor, así que se parece más a un maratón que a un sprint