Tensor Cores, Triton, redes residuais e transformers de visão

Entre 2015 e hoje, o aprendizado profundo evoluiu do código C++ para GPU ajustado manualmente e das redes convolucionais para mecanismos matriciais acelerados por hardware e arquiteturas Transformer. Estes três marcos definem como os modelos modernos de IA são projetados e ampliados.
1. A evolução moderna do CUDA: Tensor Cores e OpenAI Triton
Em 2012, Alex Krizhevsky escreveu CUDA C++ de baixo nível (cuda-convnet) para calcular operações individuais de ponto flutuante em núcleos CUDA padrão. Hoje, o aprendizado profundo depende de hardware matricial especializado e compiladores de alto nível.
- Dos núcleos CUDA aos Tensor Cores. Os núcleos CUDA tradicionais executam uma multiplicação e uma adição escalares por ciclo de clock. A partir da arquitetura Volta (2017), a NVIDIA introduziu os Tensor Cores, que multiplicam pequenas matrizes inteiras (como blocos 4×4 ou 16×16) em um único ciclo de clock. Os Tensor Cores modernos usam formatos de precisão mista como FP16, BF16 e FP8, oferecendo ganhos de velocidade de uma ordem de grandeza nas multiplicações de matrizes.
- cuDNN e seleção automática de kernels. Em vez de os pesquisadores escreverem convoluções C++ personalizadas, a biblioteca cuDNN da NVIDIA agora contém centenas de kernels assembly pré-compilados. Em tempo de execução, frameworks como PyTorch comparam o desempenho de diferentes algoritmos para o formato exato do tensor e escolhem automaticamente a rotina de Tensor Core mais rápida.
- OpenAI Triton (programação de GPU baseada em Python). Escrever diretamente em CUDA C++ exige gerenciar manualmente a indexação de threads, os conflitos entre bancos de memória compartilhada e a sincronização de warps. Lançado pela OpenAI, o Triton permite que pesquisadores escrevam kernels de alto desempenho para GPU diretamente em Python. Você define operações no nível do bloco (blocos de dados), e o compilador Triton cuida automaticamente da coalescência de memória, da divisão em blocos na memória compartilhada e do escalonamento dos Tensor Cores, muitas vezes igualando ou superando CUDA C++ ajustado manualmente.
2. Conexões de salto do ResNet e fluxo de retropropagação
Antes do ResNet (2015), empilhar mais de ~20 camadas convolucionais fazia o erro de treinamento disparar. À medida que os gradientes percorriam para trás dezenas de etapas de multiplicação, encolhiam em direção a zero (desaparecimento dos gradientes) ou se tornavam instáveis.
- Aprender resíduos em vez de saídas brutas. Em um bloco de rede padrão, as camadas empilhadas tentam aprender um mapeamento direto H(x) a partir da entrada x. O ResNet introduz uma conexão de salto (atalho de identidade) que soma a entrada original x diretamente à saída do bloco:
y=F(x)+x
Aqui, F(x) representa as camadas convolucionais empilhadas. Em vez de reconstruir toda a representação do zero, as camadas só precisam aprender o resíduo (o pequeno ajuste F(x) = y - x). Se uma camada não for necessária, a rede pode facilmente levar F(x) a zero, deixando uma passagem de identidade sem alterações.
- Uma via ininterrupta para os gradientes. Durante a retropropagação, a regra da cadeia calcula o gradiente da perda (L) em relação à entrada x:
(∂ L)/(∂ x)=(∂ L)/(∂ y)((∂ F(x))/(∂ x)+1)
Por causa do termo + 1 criado pelo atalho de identidade, o gradiente a montante ((∂ L)/(∂ y)) flui diretamente para trás até as camadas anteriores sem ser reduzido pelas pequenas matrizes de pesos em (∂ F(x))/(∂ x). Isso permite que os gradientes se propaguem sem obstáculos por mais de 100 ou até mais de 1.000 camadas.
3. A mudança das CNNs para os Vision Transformers (ViT)
Por quase uma década após o AlexNet, as redes neurais convolucionais (CNNs) dominaram a visão computacional deslizando pequenos filtros locais sobre as imagens. Em 2020, o Google introduziu o Vision Transformer (ViT), adaptando a arquitetura Transformer do processamento de linguagem natural às imagens.
| Característica | Redes neurais convolucionais (CNNs) | Vision Transformers (ViT) |
|---|---|---|
| Processamento da entrada | Processa toda a grade 2D da imagem usando filtros deslizantes (por exemplo, 3×3). | Divide a imagem em regiões de tamanho fixo (por exemplo, 16×16 pixels) e as achata em uma sequência de tokens. |
| Campo receptivo | Local primeiro. As camadas iniciais veem apenas os pixels vizinhos; o contexto global se forma lentamente nas camadas profundas. | Global imediatamente. A autoatenção conecta cada região da imagem a todas as outras já a partir da camada 1. |
| Viés indutivo | Alto. Pressupostos incorporados sobre invariância à translação e localidade espacial 2D ajudam as CNNs a aprender bem em conjuntos de dados menores. | Baixo. Não tem regras espaciais 2D incorporadas (depende de embeddings posicionais), exigindo conjuntos de dados enormes para aprender a estrutura visual. |
| Escalabilidade do hardware | Depende de kernels de convolução especializados e padrões complexos de acesso à memória. | Depende quase inteiramente de multiplicações de matrizes densas (GEMMs), que saturam os Tensor Cores das GPUs modernas com eficiência máxima. |
- Por que os ViTs assumiram a liderança na IA moderna. Embora as CNNs continuem eficientes para dispositivos móveis e de borda leves, os Vision Transformers escalam muito melhor quando treinados com centenas de milhões de imagens. Além disso, como os ViTs representam imagens como sequências de tokens, exatamente o mesmo formato usado para texto e áudio, eles permitiram que modelos modernos de IA multimodal (como GPT-4o e Gemini) processassem visão e linguagem em uma única arquitetura unificada.