MIT Introduction to Deep Learning (2024) | 6.S191

MIT Introduction to Deep Learning (2024) | 6.S191

Introducción al curso de Deep Learning

Presentación del curso

  • El instructor Alexander Amini da la bienvenida a los estudiantes al curso MIT 6.S191, junto con su colega Ava. Se destaca que el curso es intensivo y rápido.
  • Se menciona que el campo de la inteligencia artificial (IA) y el aprendizaje profundo ha evolucionado rápidamente en los últimos años, revolucionando diversas áreas como matemáticas y física.

Evolución de la IA

  • Amini señala que problemas antes considerados irresolubles ahora son abordados por la IA, superando incluso el rendimiento humano.
  • La dificultad para enseñar este curso aumenta cada año debido a los rápidos cambios en el campo; las lecciones introductorias deben actualizarse constantemente.

Impacto del aprendizaje profundo

  • Se recuerda cómo se introdujo el curso hace unos años, destacando que un video creado con IA se volvió viral, sorprendiendo a muchos por su realismo.
  • El video mencionado alcanzó más de un millón de vistas en pocos meses, lo que demuestra la capacidad sorprendente de la IA para generar contenido hiperrealista.

Avances tecnológicos recientes

  • A medida que avanza el tiempo, las capacidades de generación de contenido por parte de la IA se han vuelto comunes y accesibles.
  • Hoy en día, herramientas avanzadas permiten crear contenido sin necesidad de codificación previa; modelos actuales pueden generar medios hiperrealistas directamente desde instrucciones en inglés.

Creación automatizada y educación

  • Los modelos actuales no solo generan código funcional sino que también educan al usuario sobre cada parte del mismo.
  • Amini enfatiza que el objetivo del curso es enseñar las bases necesarias para entender cómo se crean estos modelos innovadores y cómo los estudiantes pueden desarrollar sus propios proyectos.

Futuro del aprendizaje profundo

Introducción al Aprendizaje Profundo

Fundamentos del Aprendizaje Profundo

  • Se comienza abordando los fundamentos del aprendizaje profundo, destacando la importancia de entender cómo se relaciona con otros conceptos científicos previamente aprendidos.
  • La inteligencia se define como la capacidad de procesar información que influye en la toma de decisiones futuras, un proceso que los humanos realizan diariamente.
  • La inteligencia artificial (IA) permite a las computadoras replicar esta capacidad humana de procesamiento y toma de decisiones basadas en datos.

Diferencias entre IA, Aprendizaje Automático y Aprendizaje Profundo

  • El aprendizaje automático es un subconjunto de la IA que se centra en enseñar a las computadoras a procesar información y tomar decisiones a partir de datos sin codificar reglas manualmente.
  • El aprendizaje profundo es una subcategoría del aprendizaje automático que utiliza redes neuronales para procesar grandes conjuntos de datos no estructurados.

Estructura del Curso

  • El curso está diseñado para enseñar cómo las máquinas pueden procesar datos e informar sobre capacidades decisionales, con una combinación de conferencias técnicas y laboratorios prácticos.
  • Las clases incluirán actualizaciones sobre avances en IA y culminarán con conferencias invitadas por líderes industriales.

Laboratorios Prácticos

  • Los laboratorios están diseñados para reforzar el aprendizaje teórico; comenzando con generación musical mediante redes neuronales.
  • Habrá un laboratorio sobre visión por computadora donde se desarrollará un sistema de detección facial utilizando redes neuronales convolucionales.

Proyectos Finales y Recursos

  • Al final del curso, los estudiantes participarán en una competencia tipo "Shark Tank" para presentar sus proyectos, lo cual incluye premios atractivos.

¿Por qué es importante el aprendizaje profundo?

Introducción al Aprendizaje Profundo

  • El presentador inicia preguntando por qué es relevante el aprendizaje profundo y la motivación detrás de este curso.
  • Se menciona que el aprendizaje automático tradicional se basaba en definir características manualmente, lo cual era frágil y dependía del ingenio humano.

Cambio de Paradigma en el Aprendizaje Automático

  • Se discute un cambio hacia aprender características directamente desde datos sin procesar, buscando patrones que permitan tomar decisiones interesantes.
  • Ejemplo de detección de rostros: los humanos identifican patrones como ojos y narices; las computadoras deben hacer algo similar.

Factores Clave para el Auge del Aprendizaje Profundo

  • Tres factores impulsan el crecimiento del aprendizaje profundo:
  • La abundancia de datos disponibles hoy en día.
  • Algoritmos que requieren gran capacidad computacional, beneficiándose del hardware paralelo (GPUs).
  • Herramientas de software de código abierto que facilitan la implementación y comprensión de modelos.

¿Qué es un Perceptrón?

Fundamentos de una Red Neuronal

  • Un perceptrón es la unidad básica en una red neuronal, similar a un neurona individual.
  • Se explica cómo los perceptrones procesan información mediante la propagación hacia adelante, ingiriendo múltiples entradas.

Proceso de Cálculo en un Perceptrón

  • Cada entrada se multiplica por un peso correspondiente; estos pesos son parte integral del funcionamiento del neurona.
  • Después de multiplicar las entradas por sus pesos, se suman para generar una salida final tras pasar por una función de activación no lineal.

Término Adicional: Sesgo

  • Se introduce el término "sesgo", que permite ajustar la función de activación horizontalmente, mejorando así la flexibilidad del modelo.

Introducción a la Función de Activación en Redes Neuronales

Conceptos Básicos de Entradas y Pesos

  • Se describe un vector de entradas X que abarca todos los inputs desde X_1 hasta X_M, y un vector de pesos W que incluye W_1 hasta W_M.
  • La entrada se obtiene mediante el producto punto entre los vectores X y W, lo que implica multiplicaciones elemento a elemento seguidas de una suma.

Término de Sesgo y No Linealidad

  • Se introduce el término de sesgo, denotado como w_0, que se añade al resultado del producto punto antes de aplicar la función no lineal.
  • La función no lineal, o función de activación, es crucial para entender cómo las redes neuronales procesan información.

Funciones de Activación Comunes

  • Un ejemplo común es la función sigmoide, que transforma cualquier número real en un valor entre 0 y 1, útil para distribuciones probabilísticas.
  • Existen diversas funciones no lineales utilizadas en redes neuronales; la sigmoide es solo una opción popular.

Comparativa entre Funciones Sigmoide y ReLU

  • La función sigmoide se muestra como popular por su capacidad para manejar distribuciones probabilísticas.
  • La función ReLU (Unidad Lineal Rectificada), muy utilizada actualmente, es lineal excepto en el punto donde x = 0, lo cual introduce una discontinuidad.

Importancia de la No Linealidad

  • Las funciones no lineales son necesarias para permitir que las redes neuronales manejen datos no lineales, reflejando mejor la complejidad del mundo real.
  • Sin funciones no lineales, incluso una red neuronal profunda seguiría siendo esencialmente una función lineal incapaz de resolver problemas complejos como separar puntos en un gráfico.

Ejemplo Práctico con Red Neuronal Entrenada

  • Se presenta un ejemplo práctico donde se muestran los pesos entrenados (w_0 = 1, W = [3, 2]) junto con dos entradas (X_1, X_2).
  • El proceso para obtener la salida consiste en realizar el producto punto entre las entradas y los pesos, añadir el sesgo y aplicar la no linealidad repetidamente.

¿Cómo funciona un perceptrón?

Visualización del espacio de características

  • Se está graficando la línea que define el comportamiento de una neurona en un espacio bidimensional, donde se puede observar cómo un nuevo punto de datos (X1 = -1, X2 = 2) se posiciona respecto a esta línea.
  • La posición del punto determina el signo y el valor de la respuesta. Al introducir los valores en la ecuación, se obtiene un resultado negativo (-6), que al aplicarle la función no lineal G produce una salida final de 0.2.

Función sigmoide y división del espacio

  • La función sigmoide divide el espacio en dos partes: valores menores a 0.5 y mayores a 0.5, dependiendo si x es menor o mayor que cero.
  • Si la entrada cae en el lado izquierdo de la línea (x < z), la salida será menor a 0.5; si está en el lado derecho (x > z), será mayor a 0.5.

Complejidad de las redes neuronales

  • Se menciona que este ejemplo es muy simple, ya que solo involucra una neurona con dos entradas; las redes neuronales reales pueden tener millones o incluso miles de millones de parámetros.
  • Dibujo complicado: A medida que aumenta la complejidad con más parámetros, visualizar estos espacios se vuelve mucho más desafiante e incluso imposible.

Importancia del perceptrón

  • Es crucial recordar cómo funciona un perceptrón: producto punto con las entradas, añadir un sesgo y aplicar una no linealidad son los pasos fundamentales para entender clases futuras.
  • El resultado Z antes de aplicar la no linealidad es simplemente una suma ponderada; después se aplica G(Z), que es la función activa o no lineal.

Implementación programática

  • Para crear funciones multi-salida, se pueden usar múltiples neuronas donde cada una tiene sus propios pesos y líneas independientes pero pueden comunicarse si hay otra capa presente.
  • Se discute cómo implementar esto programáticamente creando una función "call" para definir cómo propagar información a través de la red neuronal.
  • Cada neurona tiene pesos y sesgos definidos; al multiplicar matrices o realizar productos punto con las entradas y pesos, luego se añade un sesgo y finalmente se aplica una no linealidad para formar una red neuronal simple.

¿Cómo se construye una red neuronal densa?

Inicialización de la Capa Densa

  • Se presenta un ejemplo de cómo inicializar una capa densa con dos neuronas, permitiendo la entrada de un conjunto arbitrario de entradas.
  • La red neuronal tiene ahora una capa oculta entre las capas de entrada y salida, aumentando progresivamente la complejidad del modelo.

Capas Ocultas y Matrices de Peso

  • La red cuenta con dos matrices de peso: W1 para la capa oculta y W2 para la transformación a la capa de salida.
  • Cada capa oculta incluye no linealidades; sin ellas, el modelo sería solo una función lineal grande.

Unidades en la Capa Oculta

  • Se analiza una unidad específica en la capa oculta (Z2), calculando su respuesta mediante el producto punto entre pesos e inputs, añadiendo un sesgo y aplicando no linealidad.
  • Se introduce el concepto de "capa completamente conectada", donde cada entrada está conectada a cada salida.

Definición del Modelo en Código

  • En código, es sencillo definir capas densas utilizando TensorFlow; se pueden crear múltiples capas ocultas y de salida.
  • Las funciones no lineales entre capas no necesitan ser las mismas; a menudo son diferentes por conveniencia o necesidad específica.

¿Cómo construir redes neuronales profundas?

Apilamiento de Capas

  • Para crear redes neuronales profundas, se apilan capas unas sobre otras, formando un modelo jerárquico que permite cálculos más complejos.

Comprensión del Flujo de Información

  • Es fundamental entender cómo fluye la información desde las entradas hasta las salidas a través del modelo completo.

Aplicación Práctica: ¿Pasaré esta clase?

Definición del Problema

  • Se plantea el problema práctico: construir un sistema AI que determine si un estudiante pasará o no una clase basándose en ciertos factores.

Características del Modelo

  • Las características consideradas son: número de clases asistidas y horas dedicadas al proyecto final.

¿Cómo funciona una red neuronal para predecir el éxito académico?

Introducción a la red neuronal

  • Se presenta un problema de predicción utilizando una red neuronal, donde se evalúa la probabilidad de aprobar o no una clase basándose en dos entradas: asistencia a clases y horas dedicadas al proyecto final.
  • La red neuronal simple tiene una capa oculta con tres unidades y predice que la probabilidad de aprobar es del 10%, lo cual es un resultado desfavorable.

Problemas en la predicción

  • A pesar de los datos positivos (asistir a 4 de 5 clases y dedicar 5 horas al proyecto), la red falla en su predicción. Esto se debe a que no ha sido entrenada adecuadamente.
  • Se compara el aprendizaje de las redes neuronales con el aprendizaje humano; antes de recibir datos, no tienen expectativas ni conocimientos previos.

Entrenamiento de la red neuronal

  • Para entrenar correctamente la red, es crucial informarle cuando comete errores, permitiendo así que aprenda y mejore sus respuestas.
  • Se introduce el concepto de "pérdida" (loss), que mide cuán cerca está la predicción del valor real. Cuanto más cerca estén, menor será la pérdida.

Uso de datos múltiples

  • En lugar de usar solo un estudiante, se incorpora información sobre muchos estudiantes para evaluar cómo se desempeña la red en general durante el proceso de entrenamiento.
  • El objetivo es minimizar la pérdida empírica entre las predicciones y los resultados reales promediando sobre todos los inputs vistos por el modelo.

Clasificación binaria y funciones de pérdida

  • Se discute cómo abordar problemas de clasificación binaria (aprobar/no aprobar), utilizando funciones como softmax o cross entropy para evaluar si las respuestas son correctas o incorrectas.
  • Si se desea predecir un valor real (como una calificación), se utiliza otra función de pérdida, como el error cuadrático medio (mean squared error).

Unificando el problema

  • La meta es encontrar una solución unificada para entrenar efectivamente nuestra red neuronal mediante ajustes en los pesos del modelo.
  • Se busca determinar qué valores deben tener estos pesos (vector W), basado en todos los datos disponibles para optimizar las predicciones.

Visualización del paisaje de pérdidas

  • El vector W representa un conjunto extenso de números que corresponden a cada capa y neurona dentro de la red.

¿Cómo encontrar el mínimo de pérdida en un espacio de pesos?

Introducción al problema de la pérdida

  • Se busca determinar los pesos W1 y W2 que minimizan la pérdida en un gráfico, donde una menor pérdida indica un mejor rendimiento del modelo.
  • Comenzamos en un punto aleatorio del espacio de pesos y calculamos el gradiente para entender cómo se comporta la pendiente en ese lugar.

Proceso de descenso por gradiente

  • Al calcular el gradiente, podemos identificar la dirección en la que debemos movernos para reducir la pérdida. Esto implica dar pasos pequeños en dirección opuesta a donde la pendiente está aumentando.
  • Este método se conoce como "descenso por gradiente", que garantiza convergencia hacia un mínimo local, aunque no necesariamente global.

Resumen del algoritmo

  • El algoritmo comienza con una inicialización aleatoria de los pesos, seguido del cálculo del gradiente respecto a esos pesos.
  • Se repite este proceso hasta que se alcanza una convergencia, es decir, cuando ya no hay cambios significativos en los valores.

Implementación práctica

  • En código, se inicializan los pesos aleatoriamente y se ejecuta un bucle continuo para calcular pérdidas y gradientes sin detenerse hasta alcanzar una solución óptima.
  • La tasa de aprendizaje (LR), o tamaño del paso pequeño, es crucial para determinar cuán rápido nos movemos hacia el mínimo.

Propagación hacia atrás

  • Para calcular el gradiente necesitamos entender cómo cambia nuestra función de pérdida respecto a cada peso; esto se realiza mediante un proceso llamado retropropagación.
  • Comenzamos con una red neuronal simple compuesta por un solo neurona y analizamos cómo pequeñas variaciones en los pesos afectan la pérdida.

Cálculo del gradiente

  • Utilizamos la regla de cadena para descomponer el cálculo del derivado respecto a cada peso. Esto permite evaluar cómo afecta cada peso individualmente a nuestra función de pérdida.
  • Repetimos este proceso para todos los pesos involucrados hasta obtener las derivadas necesarias para ajustar adecuadamente nuestro modelo.

Diferencias terminológicas: Neurona vs Perceptrón

  • Los términos "neurona" y "perceptrón" son intercambiables; ambos describen unidades básicas dentro de redes neuronales.

¿Cómo funciona el algoritmo de retropropagación?

Teoría del algoritmo de retropropagación

  • El algoritmo de retropropagación se basa en la regla de la cadena, lo que permite ajustar los pesos en una red neuronal para mejorar la pérdida. Es un concepto teórico relativamente simple.
  • Aunque la teoría es sencilla, su implementación práctica puede ser complicada y requiere un alto poder computacional.

Desafíos en la optimización de redes neuronales

  • La optimización de redes neuronales es compleja y no siempre directa; a menudo implica lidiar con paisajes de pérdida complicados.
  • Los paisajes de pérdida en redes neuronales profundas son multidimensionales y pueden parecer desordenados, lo que dificulta encontrar soluciones globales efectivas.

Importancia de la inicialización

  • La forma en que se inicializan los parámetros afecta significativamente el resultado final; comenzar desde un mal punto puede llevar a soluciones subóptimas.
  • Se deben construir redes neuronales con paisajes de pérdida más favorables para facilitar su optimización.

Ajuste del tasa de aprendizaje

  • La tasa de aprendizaje es crucial: si es demasiado pequeña, el modelo puede quedar atrapado en mínimos locales; si es demasiado grande, puede divergir.
  • Idealmente, se busca una tasa que permita evitar mínimos locales pero que también conduzca al mínimo global sin divergencias.

Estrategias para establecer tasas de aprendizaje

  • Una estrategia básica consiste en probar diferentes tasas y observar cuál funciona mejor. Esto es común entre los practicantes.
  • Se pueden diseñar algoritmos adaptativos que ajusten las tasas según las características del modelo y los datos, permitiendo una mayor flexibilidad durante el entrenamiento.

Complejidad del espacio de búsqueda

  • No se puede simplemente buscar cada peso posible debido a la infinitud del espacio dimensional; esto complica aún más el proceso práctico.

Optimización y Entrenamiento de Redes Neuronales

Definición del Optimizador

  • El modelo se refiere al optimizador, que se denomina "descenso de gradiente estocástico" (SGD). Se puede intercambiar por otros optimizadores adaptativos para evaluar su impacto en el procedimiento de entrenamiento.

Importancia del Batching

  • Se introduce el concepto de "batching", que implica no utilizar todos los datos a la vez, sino trabajar con lotes más pequeños para mejorar la eficiencia del entrenamiento.

Algoritmo de Descenso de Gradiente

  • El algoritmo de descenso de gradiente es computacionalmente costoso, especialmente cuando se calcula sobre todo el conjunto de datos. Esto puede ser inviable debido al tamaño grande de los conjuntos de datos.

Descenso Estocástico

  • En lugar de calcular el gradiente sobre todo el conjunto, se propone usar un solo punto de entrenamiento. Aunque esto es más fácil, resulta ruidoso y menos preciso.

Mini Batches como Solución Intermedia

  • La solución intermedia consiste en usar mini batches (por ejemplo, 32 muestras), lo que permite estimar el verdadero gradiente y mejora la velocidad y precisión del cálculo en comparación con SGD.

Ventajas del Uso de Mini Batches

  • Los mini batches permiten una convergencia más rápida hacia la solución gracias a una mejor estimación del gradiente. Además, facilitan la paralelización en arquitecturas GPU.

Problema del Overfitting

  • Se aborda el problema del overfitting, que afecta a todos los modelos de aprendizaje automático. Este ocurre cuando un modelo funciona bien en los datos entrenados pero mal en nuevos datos no vistos.

Generalización vs. Memorization

  • El objetivo es construir modelos que aprendan representaciones útiles a partir de los datos entrenados y generalicen bien a nuevos puntos no vistos durante el entrenamiento.

Balance entre Overfitting y Underfitting

Regularización en Modelos de Aprendizaje Automático

Concepto de Regularización

  • La regularización es una técnica que se utiliza para evitar que un modelo aprenda detalles innecesarios o "ruido" en los datos de entrenamiento. Es fundamental para mejorar la capacidad de generalización del modelo.

Técnica de Dropout

  • El Dropout es una técnica popular de regularización donde, durante el entrenamiento, se establece aleatoriamente a cero algunas activaciones (salidas) de las neuronas con una probabilidad determinada (por ejemplo, 50%).
  • Al aplicar Dropout, aproximadamente el 50% de las neuronas se desactivan en cada pasada hacia adelante, lo que obliga al modelo a aprender diferentes caminos entre la entrada y la salida.
  • Esta técnica reduce dinámicamente la capacidad del modelo y evita que dependa demasiado de características específicas presentes en los datos de entrenamiento.

Técnica de Early Stopping

  • El Early Stopping es otra técnica de regularización que puede aplicarse a cualquier tipo de modelo siempre que haya un conjunto de prueba disponible.
  • Se define el sobreajuste como cuando el rendimiento del modelo comienza a empeorar en el conjunto de prueba mientras sigue mejorando en el conjunto de entrenamiento. Esto se puede visualizar graficando las pérdidas durante el entrenamiento.

Identificación del Sobreajuste

  • Durante el entrenamiento, tanto la pérdida del conjunto de entrenamiento como la del conjunto de prueba disminuyen inicialmente. Sin embargo, eventualmente la pérdida del conjunto de prueba se estabiliza y comienza a aumentar mientras que la pérdida del conjunto de entrenamiento continúa disminuyendo.
  • Es crucial identificar este punto donde se debe detener el entrenamiento para evitar sobreajuste; esto ocurre justo antes del aumento en la pérdida del conjunto de prueba.

Resumen y Conclusiones

  • En esta clase se han cubierto conceptos fundamentales sobre redes neuronales desde un solo perceptrón hasta redes jerárquicas y técnicas prácticas para su implementación.
Video description

MIT Introduction to Deep Learning 6.S191: Lecture 1 * 2024 Edition* Foundations of Deep Learning Lecturer: Alexander Amini For all lectures, slides, and lab materials: http://introtodeeplearning.com/ Lecture Outline 0:00​ - Introduction 7:25​ - Course information 13:37​ - Why deep learning? 17:20​ - The perceptron 24:30​ - Perceptron example 31;16​ - From perceptrons to neural networks 37:51​ - Applying neural networks 41:12​ - Loss functions 44:22​ - Training and gradient descent 49:52​ - Backpropagation 54:57​ - Setting the learning rate 58:54​ - Batched gradient descent 1:02:28​ - Regularization: dropout and early stopping 1:08:47 - Summary Subscribe to stay up to date with new deep learning lectures at MIT, or follow us on @MITDeepLearning on Twitter and Instagram to stay fully-connected!!