Redes neurais profundas: como eram há 33 anos e como ficaram 33 anos depois (2022)
(karpathy.github.io)- O artigo sobre reconhecimento de CEPs manuscritos de Yann LeCun e outros, de 1989, é um exemplo inicial importante de aplicação prática de redes neurais treinadas de ponta a ponta com retropropagação, e seu dataset, arquitetura, função de perda, otimização e forma de relatar taxa de erro lembram artigos modernos de deep learning
- A reimplementação em PyTorch usou 7.291 imagens de dígitos em tons de cinza de 16x16 e uma rede pequena com cerca de 1.000 neurônios, e o treinamento de 3 dias do artigo original caiu para cerca de 90 segundos em uma CPU de MacBook Air M1
- O artigo original reportava erro de treinamento de 0,14% e erro de teste de 5,00%; a reprodução não ficou exatamente igual por usar um dataset alternativo baseado em MNIST reduzido para 16x16, mas chegou a erro de treinamento de 0,62% e erro de teste de 4,09%
- Ao aplicar técnicas de 2022 como entropia cruzada, AdamW, aumento de dados, Dropout e ReLU, o erro de teste caiu de 4,09% para 1,59%; o tempo de treinamento aumentou cerca de 4 vezes, mas a latência de inferência não mudou
- Ao longo de 33 anos, a estrutura macro mudou pouco, mas a escala de dados, modelos e computação cresceu de forma avassaladora, e o fluxo de foundation models com fine-tuning está tornando rapidamente obsoleta a ideia de treinar redes neurais do zero para tarefas específicas
Por que reimplementar um artigo de 1989 em 2022
- O artigo de 1989 de Yann LeCun e outros, Backpropagation Applied to Handwritten Zip Code Recognition, é um caso inicial historicamente importante de aplicação prática baseada em retropropagação
- É considerado um dos primeiros artigos a aplicar redes neurais treinadas de ponta a ponta com retropropagação a um problema real
- Na época, o dataset tinha 7.291 imagens de dígitos em tons de cinza de 16x16, e a rede tinha cerca de 1.000 neurônios
- A estrutura do artigo é muito parecida com a de artigos modernos de deep learning
- Define o dataset
- Explica a arquitetura da rede neural
- Trata da função de perda e da otimização
- Reporta a taxa de erro de classificação nos conjuntos de treino e teste
- O código da reimplementação foi escrito em PyTorch e publicado em karpathy/lecun1989-repro
- A rede original foi implementada em Lisp e usava o simulador de retropropagação SN, de 1988, de Bottou e LeCun
- O design das bibliotecas modernas de deep learning costuma se dividir em três partes
- Uma biblioteca de tensores rápida baseada em C/CUDA
- Um motor de autograd que rastreia o grafo de computação do forward e gera as operações de retropropagação
- Uma API de alto nível programável em Python, com camadas, arquiteturas, otimizadores e funções de perda
Velocidade de treinamento e limites da reprodução
- O treinamento original fazia 23 passagens por 7.291 exemplos de treino, apresentando ao todo 167.693 pares de entrada/rótulo à rede
- A rede de 1989 foi treinada por 3 dias em uma workstation SUN-4/260
- A reimplementação em PyTorch levou cerca de 90 segundos em uma CPU de MacBook Air M1, ficando cerca de 3.000 vezes mais rápida em comparação simples
- O conda usava build
arm64nativo, não emulação Rosetta - Se o PyTorch tivesse aproveitado totalmente a GPU e a NPU do M1, o ganho de velocidade poderia ter sido ainda maior
- O conda usava build
- Rodar de forma direta em uma GPU A100 foi, na verdade, mais lento
- A rede é muito pequena: um convnet de 4 camadas, no máximo 12 canais, 9.760 parâmetros no total, 64K MACs e 1K ativações
- O SGD usava uma estrutura com apenas um exemplo por vez
- Para aproveitar bem A100, CUDA e PyTorch, seria preciso aumentar a utilização da GPU com treinamento full-batch em vez de SGD por exemplo
- O desempenho reportado no artigo original foi o seguinte
- Treino: loss 2.5e-3, erro 0,14%, miss 10
- Teste: loss 1.8e-2, erro 5,00%, miss 102
- O resultado da 23ª passagem no script de reprodução foi o seguinte
- Treino: loss 4.073383e-03, erro 0,62%, miss 45
- Teste: loss 2.838382e-02, erro 4,09%, miss 82
- Uma reprodução exata é difícil por vários motivos
- O dataset original aparentemente se perdeu com o tempo
- Em seu lugar, usou-se o MNIST: dígitos 28x28 reduzidos para 16x16 com interpolação bilinear e amostragem aleatória sem reposição na quantidade necessária
- A explicação da inicialização dos pesos é abstrata, e problemas de formatação no PDF podem ter feito desaparecer pontos ou símbolos de raiz quadrada
- A estrutura de conexões esparsas entre H1 e H2 não é tratada em detalhe no artigo, então foi necessário fazer estimativas razoáveis
- Havia receio de que o
tanhdo artigo fosse na verdade o normalized tanh, comum na época - O artigo original usava um algoritmo especial de Newton com aproximação diagonal positiva da Hessiana, mas a reimplementação usou SGD mais simples
Redução da taxa de erro com técnicas de 33 anos depois
- A primeira mudança foi trocar a formulação de regressão com MSE por uma formulação moderna de classificação multiclasse
- Originalmente, a classificação em 10 classes era modelada como regressão com MSELoss para alvos em -1 ou +1
- Removeu-se o
tanhda camada de saída para produzir logits de classe e aplicou-se CrossEntropyLoss - Isso permitiu sobreajustar completamente o conjunto de treino, chegando a erro de treino de 0,00% e erro de teste de 4,38%
- Em seguida, aplicou-se a família Adam no lugar de SGD
- Foi usado AdamW com learning rate inicial de 3e-4, reduzido para 1e-4 durante o treinamento
- O resultado foi erro de treino de 0,00% e erro de teste de 3,59%
- O weight decay dos parâmetros padrão também ajudou a reduzir o sobreajuste
- O aumento de dados consistiu em deslocar a imagem de entrada em até 1 pixel na horizontal ou vertical
- Como isso simula aumento do tamanho do dataset, o número de passagens subiu de 23 para 60
- Apenas aumentar o número de passagens na configuração original não trouxe grande melhora
- O resultado foi erro de treino de 1,70% e erro de teste de 2,19%
- A combinação de Dropout e ReLU trouxe melhorias adicionais
- Foi adicionado um Dropout leve de 0,25 logo antes da camada H3, a de maior número de parâmetros
- Como o Dropout zera ativações, considerou-se que ele combina melhor com ReLU do que com
tanh, cuja faixa de ativação é [-1, 1] - Todas as não linearidades foram trocadas de
tanhpara ReLU, e o número de passagens aumentou para 80 - O resultado foi erro de treino de 1,47%, erro de teste de 1,59% e miss 32 no teste
- Apenas trocar
tanhpor ReLU não trouxe grande melhoria; a maior parte do ganho veio da adição de Dropout - Se essas técnicas pudessem ser levadas a 1989, o número de erros poderia cair de cerca de 80 para cerca de 30, com taxa de erro de teste em torno de 1,5%
- Em troca, o tempo de treinamento quase quadruplicaria, de 3 dias para quase 12 dias no contexto de 1989
- A latência de inferência não seria afetada
Antes de modelos maiores, quem mais ajudou foi ampliar os dados
- Depois disso, o espaço para melhorias fáceis foi diminuindo
- Técnicas adicionais, como weight normalization, não trouxeram grande melhora
- Um “micro-ViT” com número parecido de parâmetros e operações também não alcançou o desempenho do convnet
- Houve muitas inovações nos últimos 33 anos, mas algumas fazem mais diferença principalmente em modelos muito maiores
- residual connection, layer normalization e batch normalization têm mais relação com estabilizar a otimização em larga escala
- Melhorias grandes adicionais provavelmente viriam do aumento do tamanho da rede, mas isso elevaria a latência de inferência no teste
- Aumentar os dados também melhorou o desempenho
- Usando o MNIST completo, o conjunto de treino foi ampliado de 7.291 para 50.000 exemplos, cerca de 7 vezes mais
- Ao rodar o baseline de treinamento existente por 100 passagens, o erro de teste melhorou para 2,74%, com miss 54
- O melhor resultado veio da combinação entre expansão de dados e técnicas modernas
- Erro de treino de 1,07%, erro de teste de 1,25%, miss 24 no teste
- Em 1989, apenas ampliar o dataset já poderia elevar o desempenho do sistema sem aumentar a latência de inferência
Observações que ligam 1989 a 2022 e a 2055
- Em 33 anos, a estrutura macroscópica não mudou tanto
- Ainda se constrói uma arquitetura de rede neural diferenciável em camadas e se faz otimização de ponta a ponta com retropropagação e descida de gradiente estocástica
- A diferença é que a escala na época era muito menor
- O dataset e o modelo de 1989 são muito pequenos para os padrões atuais
- O conjunto de treino tinha apenas 7.291 imagens em tons de cinza de 16x16
- Datasets modernos de visão usam até centenas de milhões de imagens coloridas em alta resolução coletadas na web
- Há exemplos como o OpenAI CLIP, treinado com 400M imagens, e o Google JFT-300M
- Calcula-se que isso representa algo como 100.000.000 vezes mais dados em termos de pixels de entrada
- A rede de 1989 tinha cerca de 9.760 parâmetros, 64K MACs e 1K ativações
- Redes neurais modernas de visão chegam à escala de bilhões de parâmetros e cerca de 1e12 MACs
- Modelos de linguagem natural podem chegar à casa dos trilhões de parâmetros
- Ao olhar para 2022 a partir de 2055, supõe-se que um padrão parecido possa se repetir
- As redes neurais de 2055 poderiam ser, em termos macro, quase iguais às de 2022, apenas maiores
- Os datasets e modelos de hoje poderiam parecer cerca de 10.000.000 vezes menores
- É possível imaginar que até modelos de ponta de 2022 possam ser treinados em cerca de 1 minuto em um dispositivo pessoal, como um projeto de fim de semana
- Supõe-se também que apenas mudar detalhes de modelo, função de perda, aumento de dados e otimizador possa reduzir o erro pela metade
- A ideia de treinar uma rede neural do zero para uma tarefa específica está envelhecendo rapidamente
- Foundation models como o GPT são treinados por poucas instituições com grande capacidade computacional
- A maior parte das aplicações pode ser implementada com fine-tuning leve de parte da rede, prompt engineering ou destilação de dados/modelo para pequenas redes de inferência especializadas
- Num cenário extremo, em 2055 um usuário poderia apenas falar ou pensar em inglês para um neural net “megabrain” 10.000.000 vezes maior e pedir uma tarefa, reduzindo ainda mais a necessidade de treinar redes neurais diretamente
1 comentários
Opiniões no Hacker News
Há mais um ponto interessante. Originalmente, o treinamento levou 3 dias em uma workstation Sun 4/260; não consegui encontrar as especificações exatas, mas, sendo da era das primeiras workstations SPARC, o consumo total de energia provavelmente era algo em torno de 200 W.
A CPU em si não consumia tanta energia, mas é bem provável que o sistema inteiro, incluindo disco e monitor, chegasse a esse nível. Então 200 W × 72 horas = 14.400 Wh.
Karpathy rodou um treinamento do mesmo nível em um MacBook, e ainda sem utilizá-lo totalmente, em 90 segundos. Se for algo como 20 W × 0,025 hora = 0,5 Wh, isso significa uma melhora de quase 30.000 vezes na eficiência energética.
O texto foi realmente muito bom. Só achei uma pena que a previsão para 2055 seja meta-linear. Ele evita o erro comum de pegar a tecnologia atual e fazer uma regressão linear dos números até 33 anos no futuro, mas ainda parece pressupor uma espécie de simetria de linha de mundo tendo o presente como origem.
Como o horizonte temporal é longo o bastante, avanços e obstáculos inesperados podem fazer com que nenhuma dessas previsões acerte. Alguém pode descobrir uma estrutura de base muito mais simples do que “perceptron++”; todos podem estar treinando nuvens gaussianas 3D; ou computadores quânticos podem finalmente decolar, a ponto de ainda nem termos os substantivos para chamar os componentes que usaremos.
Por outro lado, podemos esbarrar em limites de escala que ainda não vimos em hardware ou treinamento, ou pode haver um retrocesso civilizacional. Ainda assim, se eu fosse apostar, não apostaria exatamente contra a conclusão do texto. Se extrapolarmos conhecendo apenas o passado e o presente, acho que ela provavelmente está perto da melhor conclusão possível.
Eu me inclino para um lado em que a mudança será mais dramática. Não apenas por recursos, mas porque há muito espaço para melhorias algorítmicas.
Pelo lado mais óbvio, a maioria das bibliotecas ainda não aproveita suficientemente várias técnicas conhecidas de otimização por gradiente. Como foi fácil demais simplesmente acrescentar mais dados e throughput, ainda há um estoque de ferramentas a aplicar.
E os grandes modelos bem-sucedidos estão dando pistas importantes. Por exemplo, modelos de linguagem estão aprendendo uma espécie de lógica da linguagem parecida com a forma como processamos pensamentos, e está claro que conseguem conectar informações muito heterogêneas de modo plausível.
Quando algum dia entendermos a essência desse processamento, o processamento de linguagem poderá se simplificar drasticamente. Essa é apenas uma das oportunidades de avanços radicais em arquitetura e algoritmos, e seria de fato revolucionária.
Então, nos próximos 33 anos, basta fazer a mesma coisa, só aumentando dados e poder computacional? Se levarmos logicamente adiante o entusiasmo do tipo “finalmente estou vendo isso acontecer em vida” de quando os LLMs apareceram, junto com o clima de “é só aumentar o modelo e os dados”, chegamos a essa conclusão. Mas será que força bruta sozinha realmente nos leva até AGI?
Há 33 anos, “IA conexionista” não era o paradigma dominante, e “IA simbólica” tampouco era a única abordagem alternativa. Também havia abordagens como o “funcionalismo robótico”, segundo o qual não se pode ter inteligência verdadeira sem interagir com o mundo físico.
Daqui a 33 anos, essas outras abordagens podem ressurgir combinadas com o conexionismo, ou uma abordagem totalmente nova pode aparecer.
Excelente texto. Vivi pessoalmente os primeiros tempos das redes neurais artificiais. Em meados dos anos 1980, fiz parte do painel consultivo de ferramentas de redes neurais da DARPA, escrevi a primeira versão do produto comercial SAIC ANSim e também criei um modelo simples de backpropagation implantado em um detector de bombas que a empresa fez sob contrato com a FAA.
Há 5 ou 6 anos, também gerenciei uma equipe de deep learning “tradicional” na Capital One. Os últimos 18 meses foram realmente empolgantes. Tenho usado o máximo de tempo possível explorando LLMs auto-hospedados e APIs da Hugging Face, OpenAI etc.
Só de pensar na tecnologia daqui a 33 anos, minha cabeça quase explode.
A mudança mais fundamental está na diferença de com o que os modelos são treinados.
Pequenas imagens de caracteres são mais próximas de um problema de quiz, e são completamente diferentes de treinar, na prática, toda a comunicação linguística e visual da humanidade.
Mesmo que os recursos computacionais continuem a escalar pelos próximos 33 anos, não ficaremos presos à etapa de treinar modelos que imitam o comportamento e o conhecimento humanos. Esse problema — isto é, nós mesmos — já terá sido reduzido a um problema de brinquedo muito antes disso.
A qualidade não vai cair, porque haverá muito esforço em filtragem de dados e garantia de diversidade. É sempre possível melhorar dando mais tempo ao modelo.
A arquitetura do modelo não é importante em comparação com o dataset. Qualquer modelo da mesma família pode aprender as mesmas capacidades com os mesmos dados, mas, se você mudar os dados, as capacidades de todos mudam. A inteligência está nos dados.
O futuro não é projetar arquiteturas de modelo, e sim engenharia de dados. Por analogia, a cultura humana evolui mais rápido que a biologia humana. Os dados estão evoluindo mais rápido que os modelos.
Na IA recente, vemos uma queda acentuada em novas arquiteturas e um movimento em que datasets variados são aplicados aos mesmos modelos Transformer. Mesmo dentro dos Transformers, as variantes amplamente usadas são muito poucas, enquanto milhares foram descartadas.
Gosto de pensar que o verdadeiro motor da inteligência é a evolução da linguagem por meio de memes. Nós e a IA estamos juntos surfando o crescimento exponencial da linguagem.
Não está claro se a capacidade computacional continuará escalando nos próximos 33 anos como antes. Mas ela também não precisa necessariamente fazer isso
Enquanto lia o texto, pensei: “Nossa, lembro que naquele fim de semana usei MSE em um projeto de machine learning por hobby e não deu certo. Eu tinha escolhido a função de perda errada”
Os LLMs atuais, ou os LLMs do ano que vem, provavelmente serão capazes de me dizer bem como melhorar meu código e meus gráficos. Isso me permitiria aplicar técnicas de nível especialista que, de outra forma, estariam inacessíveis para mim por exigirem 50 mil horas de acúmulo de habilidade
Uma parte de mim diz que os humanos acabaram e que, daqui a 33 anos, teremos criado um mundo em que os humanos serão irrelevantes. Mas outra parte diz que, se evitarmos esse destino e todas as outras formas de ruína, o futuro poderá ser bastante promissor
Aplicar os LLMs de hoje a todo tipo de problema não vai acabar conosco. Mas uma AGI consciente e capaz de planejar pode surgir em poucos anos, e não sabemos qual é o limite superior de quão inteligentes poderemos torná-las
Vejo que somos responsáveis por todo ser inteligente que trazemos ao mundo. Há quem lamente que não exista uma prova para se tornar pai ou mãe; então e quanto a criar um milhão de cópias de cérebros virtuais totalmente novos? Além disso, eles nasceriam, na prática, para uma vida inteira de trabalho forçado
Foi realmente excelente. Embora não tenha sido tratado explicitamente, acho que a diferença daqui a 33 anos estará nas entradas que os modelos processam. Em 1989, os modelos de ponta usavam imagens em escala de cinza de 16×16; hoje temos imagens coloridas de alguns megapixels
Daqui a 30 anos, um desktop talvez consiga treinar o CLIP em 90 segundos, mas com o que os modelos de ponta daquela época serão treinados?
Para isso, seriam necessárias de bilhões a trilhões de horas de vídeo e áudio de pessoas diversas realizando todo tipo de atividade humana, e provavelmente muitos outros tipos de entrada
Por enquanto, parece melhor gastar o orçamento computacional em um “cérebro” maior do que em “olhos” melhores
Não sei exatamente o que será capturado, mas deve ser possível treinar modelos com uma combinação de várias entradas, como áudio, vídeo, informações espaciais e íris
É interessante que, durante esse período, o interesse por redes neurais tenha sido quase completamente perdido e depois tenha voltado
Hoje, certamente há pessoas encadeando LLMs para fazê-los realizar raciocínio direto e reverso
Ainda assim, o Turing Award também é bastante excelente
É surpreendente, ao mesmo tempo, o quanto mudou pouco e o quanto mudou muito. Lembro de como foi revelador ler “A eficácia irracional dos RNNs”, e hoje parece que vivemos em um mundo completamente diferente
A nova tecnologia é muito melhor, e suas implicações futuras são grandes. Mas, para quem já prestava atenção desde aquela época, havia um ponto de referência em que “ficou absurdamente melhor” não levava imediatamente a “está fora de controle”
É verdade que ficou muito melhor
Os textos de Andrej Karpathy são sempre revigorantes. Quanto mais ele sabe, mais explora de forma direta e simples os fundamentos da ciência de machine learning
Esta área está cheia de papers que propõem novas estruturas complexas para pequenas melhorias difíceis até de reproduzir e que, na esperança de superar o estado da arte, enchem 50 páginas inúteis para fazer seu trabalho parecer “sério”