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

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

Introdução ao Curso de Deep Learning

  • O curso é apresentado por Alexander Amini e Ava, com foco em um campo em rápida evolução.
  • A inteligência artificial (IA) e o aprendizado profundo têm revolucionado diversas áreas da ciência nos últimos anos.
  • O ensino do curso se torna mais desafiador devido às rápidas mudanças no campo da IA.

Evolução do Ensino de Deep Learning

  • O primeiro dia do curso deve cobrir fundamentos que mudam rapidamente, diferente de outras disciplinas.
  • Anteriormente, a introdução ao deep learning era feita com vídeos que geravam grande impacto viral.
  • Um vídeo criado com IA surpreendeu pela sua realismo e viralizou rapidamente.

Avanços Recentes em Deep Learning

  • O custo para gerar conteúdo realista com IA caiu significativamente nos últimos anos.
  • Hoje, a geração de conteúdo hiper-realista é comum e acessível a todos.
  • As capacidades da IA evoluíram para realizar tarefas muito mais complexas do que antes.

Capacidades Atuais da Inteligência Artificial

  • Modelos atuais podem criar conteúdos inteiros apenas a partir de comandos em inglês, sem necessidade de codificação.
  • É possível solicitar que redes neurais escrevam código para treinar outras redes neurais.
  • Os modelos não apenas produzem código, mas também educam o usuário sobre cada parte dele.

Objetivos do Curso

  • O curso visa ensinar as bases dos modelos de deep learning desde o início até os avanços mais recentes.
  • A natureza dinâmica do campo torna o ensino cada vez mais desafiador ano após ano.

Introdução ao Aprendizado Profundo

  • O aprendizado profundo é um conceito importante que se relaciona com outras áreas da ciência.
  • Inteligência, em sua essência, é a capacidade de processar informações para tomar decisões futuras.
  • A inteligência artificial permite que computadores processem informações e tomem decisões.

Diferenças entre IA, Aprendizado de Máquina e Aprendizado Profundo

  • O aprendizado de máquina é um subconjunto da inteligência artificial focado em ensinar computadores a processar dados.
  • Em vez de programar regras fixas, o aprendizado de máquina utiliza dados para informar decisões.
  • O aprendizado profundo usa redes neurais para processar grandes conjuntos de dados não estruturados.

Estrutura do Curso

  • O curso combina palestras técnicas e laboratórios práticos para reforçar o aprendizado.
  • A primeira palestra aborda os fundamentos das redes neurais, começando pelo perceptron.
  • Haverá palestras convidadas de patrocinadores da indústria ao longo do curso.

Experiência Prática e Projetos

  • Após cada aula, os alunos terão experiências práticas em software e construção de projetos.
  • O primeiro laboratório será sobre geração musical usando redes neurais.
  • Os alunos aprenderão a construir sistemas de detecção facial no segundo laboratório.

Desafios Finais e Recursos

  • Um laboratório final focará em modelos linguísticos grandes e chatbots assistivos.
  • Haverá uma competição final onde equipes apresentarão seus projetos por até 5 minutos.

Por que nos importamos com Deep Learning?

  • A importância do aprendizado profundo é discutida, questionando por que estamos aqui para aprender sobre isso.
  • O aprendizado de máquina tradicional envolve a definição manual de características, o que pode ser frágil.
  • A mudança de paradigma busca aprender diretamente das informações brutas, em vez de depender da engenharia manual.

Detecção de Faces e Padrões

  • Para detectar rostos, os computadores buscam padrões como olhos e narizes em imagens.
  • Deep learning permite identificar esses padrões automaticamente a partir dos dados brutos.
  • As bases para deep learning existem há décadas, mas agora estão se expandindo devido a três fatores principais.

Fatores que Impulsionam o Aprendizado Profundo

  • A disponibilidade massiva de dados é um fator crucial; modelos precisam de muitos dados para funcionar bem.
  • Algoritmos são exigentes em termos computacionais e se beneficiam do hardware paralelo, como GPUs.
  • Ferramentas open source facilitam o desenvolvimento e implementação desses modelos.

Compreendendo o Perceptron

  • O perceptron é a unidade básica das redes neurais; cada rede é composta por múltiplos perceptrons.
  • Um perceptron processa informações através da multiplicação dos inputs por pesos correspondentes.

Propagação Direta e Função de Ativação

  • Neurônios podem ingerir múltiplas entradas, cada uma multiplicada por um peso específico.
  • Os resultados são somados e passados por uma função de ativação não linear para gerar a saída final.

Introdução aos Vetores e Pesos

  • Os inputs são representados por um vetor X, enquanto os pesos são descritos por W.
  • Um termo de bias (w0) é adicionado antes da aplicação da função de ativação.
  • A função de ativação, como a sigmoid, transforma entradas em valores entre 0 e 1.

Funções de Ativação Não Lineares

  • Existem várias funções de ativação não lineares utilizadas em redes neurais.
  • A função sigmoid é popular para distribuições de probabilidade.
  • A função ReLU (Rectified Linear Unit) é amplamente utilizada devido à sua simplicidade computacional.

Importância das Não Linearidades

  • As funções de ativação introduzem não linearidades necessárias para lidar com dados complexos.
  • Redes neurais precisam ser capazes de separar dados não lineares, como pontos verdes e vermelhos.
  • Sem não linearidades, uma rede neural permanece linear, limitando sua capacidade.

Exemplo Prático com Rede Neural Treinada

  • Uma rede neural treinada possui pesos definidos que influenciam suas saídas.
  • O processo envolve produto escalar dos inputs com os pesos, adição do bias e aplicação da não linearidade.

Como um Neurônio Funciona?

  • O neurônio é representado graficamente, onde a linha que define sua função é plotada.
  • A posição de um novo ponto de dados em relação à linha determina o resultado e seu sinal.
  • A função sigmoide divide o espaço em duas partes, com base no valor da entrada.

Espaço de Características do Neurônio

  • Dependendo do lado da linha, a saída será menor ou maior que 0.5.
  • O espaço de características pode ser visualizado para entender como o neurônio responde a diferentes entradas.
  • Este exemplo é simplificado; redes neurais reais têm milhões ou bilhões de parâmetros.

Construindo Redes Neurais

  • Compreender como funciona um perceptron é crucial para aulas futuras; envolve produto escalar, adição de viés e não linearidade.
  • Cada linha no diagrama representa um peso associado ao neurônio; o viés é considerado implícito.
  • O resultado antes da não linearidade é uma soma ponderada dos inputs.

Funções Multi-Saída em Redes Neurais

  • Para múltiplas saídas, adicionamos mais neurônios na rede, cada um prevendo resultados independentes.
  • Cada neurônio possui seus próprios pesos e linhas que se conectam apenas a ele.
  • É possível programar uma rede neural desde o início definindo como as informações são propagadas.

Implementação Prática de Redes Neurais

  • Definimos os pesos e viéses para cada neurônio na rede neural durante a implementação.
  • A função "call" permite passar informações pela camada da rede neural criada.

Inicialização de Camadas Densas

  • Exemplo de criação de uma camada densa com dois neurônios, recebendo três entradas.
  • Introdução à rede neural de camada única, aumentando a complexidade gradualmente.
  • A camada oculta não é observada diretamente e aumenta a capacidade de aprendizado da rede.

Matrizes de Peso em Redes Neurais

  • Agora temos duas matrizes de peso: W1 para a camada oculta e W2 para a saída.
  • Importância da não linearidade nas camadas ocultas para evitar funções lineares grandes.
  • Cálculo do neurônio Z2 através do produto escalar dos pesos com as entradas.

Representação Visual das Camadas Conectadas

  • Limpeza da representação visual substituindo linhas por caixas que representam camadas totalmente conectadas.
  • Transformações em código são simples, definindo duas camadas densas no TensorFlow.
  • Funções de não linearidade podem ser diferentes entre as camadas, dependendo da conveniência.

Construindo Redes Neurais Profundas

  • Adição de múltiplas camadas cria um modelo hierárquico mais profundo na rede neural.
  • O entendimento básico sobre definição e funcionamento das redes neurais é estabelecido.
  • Compreensão do fluxo de informações desde a entrada até a saída na rede neural.

Aplicação Prática: Sistema AI para Aprovação em Classe

  • Problema prático: construir um sistema AI para prever se o aluno passará na classe.
  • Consideração das características: número de aulas assistidas e horas dedicadas ao projeto final.

Como as Redes Neurais Podem Prever Resultados?

Introdução à Rede Neural

  • A rede neural ajuda a entender a probabilidade de passar ou falhar na aula, usando dois inputs: número de aulas assistidas e horas dedicadas ao projeto final.

Resultados da Predição

  • A saída prevista para passar na aula é 0.1 (10%), enquanto a probabilidade real é 1 (100%) devido à presença em quatro das cinco aulas.

Problemas com o Treinamento

  • A rede neural não foi treinada adequadamente, pois não recebeu dados suficientes para aprender sobre o problema.

Importância do Feedback

  • É crucial informar à rede quando suas decisões estão erradas para que ela possa aprender e melhorar suas previsões.

Cálculo da Perda

  • O cálculo da perda é feito comparando a previsão com o valor real; quanto mais próximo, menor a perda e mais precisa a rede.

Dados de Múltiplos Estudantes

  • Ao incluir dados de vários alunos, podemos avaliar como a rede se comporta em diferentes situações durante o treinamento.

Minimização da Perda Empírica

  • O objetivo é encontrar uma rede que minimize a perda empírica entre as previsões e os resultados reais em média.

Classificação Binária

  • Para problemas de classificação binária, utiliza-se a função softmax para determinar se as respostas estão corretas ou incorretas.

Predição de Valores Reais

  • Para prever valores reais, como notas, usa-se uma função de perda diferente, como erro quadrático médio, já que os outputs não são distribuições de probabilidade.

Unificação do Problema de Treinamento

  • O desafio é encontrar um vetor W que represente os pesos da rede neural com base nos dados disponíveis.

Avaliação do Desempenho da Rede Neural

Função de Perda e Paisagem de Perda

  • A função de perda é uma função simples dos pesos em uma rede neural, permitindo plotar a paisagem de perda em um espaço bidimensional.
  • O objetivo é encontrar o ponto mais baixo na paisagem, onde a perda é mínima, indicando os melhores pesos para a rede.
  • Começamos em um ponto aleatório e calculamos o gradiente da paisagem nesse ponto para entender a direção do aumento ou diminuição da perda.

Descendo pela Gradiente

  • Ao seguir o gradiente negativo, podemos ajustar os pesos para reduzir a perda, repetindo esse processo até convergir para um mínimo local.
  • O algoritmo utilizado para isso é chamado de descida do gradiente; começamos com uma localização aleatória e iteramos até a convergência.
  • Continuamos ajustando os pesos até que não haja mais movimento significativo na rede neural.

Implementação do Algoritmo

  • Inicializamos aleatoriamente os pesos e usamos um loop para calcular continuamente a perda e o gradiente.
  • Multiplicamos o gradiente por uma taxa de aprendizado (learning rate), que determina o tamanho do passo na direção oposta ao gradiente.
  • O termo "gradiente" indica como nossa perda muda em relação aos pesos da rede.

Retropropagação

  • A retropropagação é o processo usado para calcular como pequenas mudanças nos pesos afetam a perda total da rede neural.
  • Começamos com uma rede neural simples com um único neurônio e calculamos o gradiente da perda em relação ao peso W2.
  • Usando a regra da cadeia, decompondo as derivadas, conseguimos propagar os gradientes desde a saída até as entradas.

Cálculo dos Gradientes

  • Repetimos o processo de retropropagação para todos os pesos, garantindo que entendemos como cada peso individualmente afeta a perda total.

Diferença Funcional entre Neurônio e Perceptron

  • A diferença funcional entre neurônios e perceptrons é a mesma; ambos os termos são frequentemente usados de forma intercambiável.
  • O algoritmo de retropropagação é simples, baseado na regra da cadeia, e as bibliotecas de deep learning o implementam automaticamente.
  • A otimização de redes neurais na prática é complexa e intensiva em computação.

Paisagens de Perda em Redes Neurais Profundas

  • Visualizar paisagens de perda em redes neurais profundas revela que elas são extremamente confusas e multidimensionais.
  • A inicialização dos parâmetros é crucial; começar em um ponto ruim pode impedir a convergência para a solução global.
  • Técnicas podem ser aplicadas para suavizar as paisagens de perda, facilitando a otimização.

Importância da Taxa de Aprendizado

  • Definir a taxa de aprendizado correta é desafiador; uma taxa muito pequena pode levar ao aprisionamento em mínimos locais.
  • Uma taxa muito alta pode causar divergência, resultando na explosão do modelo sem encontrar mínimos adequados.
  • Idealmente, queremos taxas que evitem mínimos locais mas ainda permitam convergir para o mínimo global.

Estratégias para Ajuste da Taxa de Aprendizado

  • Testar diferentes taxas de aprendizado pode ser eficaz; essa abordagem é comum na prática.
  • Algoritmos adaptativos podem ajustar a taxa com base nas características do modelo e dados observados.
  • Existem várias metodologias amplamente utilizadas para definir taxas de aprendizado durante experimentos práticos.

Desafios na Busca por Mínimos Absolutos

  • O espaço das soluções não é fechado; cada peso pode variar infinitamente, complicando a busca por mínimos absolutos.

Configuração e Otimizadores

  • A configuração da rede neural define o modelo e o otimizador, como o SGD (Stochastic Gradient Descent).
  • Testar diferentes otimizadores pode impactar significativamente o procedimento de treinamento.
  • Importante focar em dicas práticas para treinar redes neurais.

Batching de Dados

  • O algoritmo de gradiente é computacionalmente caro; a abordagem tradicional não é viável para grandes conjuntos de dados.
  • O SGD calcula o gradiente usando um único ponto de treinamento, mas isso gera ruído.
  • Usar mini-batches permite estimar o gradiente com mais precisão e velocidade.

Vantagens dos Mini-Batches

  • Mini-batches aumentam a precisão do cálculo do gradiente, permitindo convergir mais rapidamente.
  • Essa técnica também possibilita paralelizar os cálculos, melhorando a eficiência em arquiteturas GPU.

Problema do Overfitting

  • Overfitting ocorre quando um modelo se ajusta bem aos dados de treinamento, mas falha nos testes.
  • É crucial que os modelos generalizem bem para novos dados não vistos durante o treinamento.

Equilíbrio entre Overfitting e Underfitting

  • O objetivo é encontrar um equilíbrio onde o modelo não memorize detalhes excessivos dos dados de treinamento.

Regularização em Redes Neurais

  • A regularização é uma técnica para evitar que o modelo aprenda nuances do conjunto de dados de treinamento.
  • A técnica mais popular é o Dropout, que desativa aleatoriamente neurônios durante o treinamento.
  • O Dropout força a rede a encontrar diferentes caminhos entre entrada e saída, reduzindo a dependência de partes específicas dos dados.

Técnica de Early Stopping

  • O overfitting ocorre quando o desempenho no conjunto de teste piora enquanto o desempenho no conjunto de treinamento melhora.
  • É importante monitorar a perda durante o treinamento e parar quando a precisão do teste começa a cair.
  • O objetivo é encontrar um equilíbrio onde não se utilize toda a capacidade do modelo sem causar overfitting.

Resumo da Aula

  • Aprendemos sobre os blocos fundamentais das redes neurais, começando com um neurônio (perceptron).
  • Discutimos como empilhar sistemas para criar redes hierárquicas e otimizar matematicamente esses sistemas.
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!!