CNNs

O que são CNNs?

Redes Neurais Convolucionais (Convolutional Neural Networks, CNNs) são uma família de arquiteturas de aprendizado profundo (deep learning) projetadas para processar dados com uma estrutura em grade, mais notoriamente imagens (grades 2D de pixels), mas também áudio (sinais temporais 1D), vídeos (grades espaciotemporais 3D) e alguns dados científicos.

As CNNs se tornaram a abordagem dominante para visão computacional (computer vision) nos anos 2010 porque embutem várias suposições úteis — vieses indutivos (inductive biases) — sobre imagens naturais: pixels próximos são relacionados, padrões se repetem ao longo da imagem e objetos podem aparecer em diferentes posições. Esses vieses tornam as CNNs eficientes em parâmetros, eficientes em dados e eficientes computacionalmente em relação a redes totalmente conectadas (fully-connected) para visão.

As CNNs são uma arquitetura central ao lado de Perceptrons Multicamadas (multilayer perceptrons, MLPs), RNNs/LSTMs (recurrent neural networks/Long Short-Term Memory), e Transformadores (Transformers) no espaço mais amplo de Redes Neurais (Neural Networks).

A operação central: convolução (convolution) (e o que as bibliotecas de aprendizado profundo realmente computam)

Convolução vs. correlação cruzada (cross-correlation)

No processamento clássico de sinais, uma convolução 2D inverte o kernel (kernel) antes de deslizá-lo. Na maioria dos frameworks (frameworks) de aprendizado profundo, Conv2d implementa correlação cruzada (sem inverter o kernel). A diferença raramente importa no aprendizado porque os pesos do kernel são aprendidos.

A matemática básica (caso 2D)

Seja uma imagem/mapa de características (feature map) de entrada (X \in \mathbb{R}^{H \times W \times C_{in}}) e um conjunto de filtros (filters) aprendíveis (W \in \mathbb{R}^{k_h \times k_w \times C_{in} \times C_{out}}). A saída é (Y \in \mathbb{R}^{H' \times W' \times C_{out}}):

[ Y[i,j,o] = \sum_{u=0}^{k_h-1}\sum_{v=0}^{k_w-1}\sum_{c=0}^{C_{in}-1} W[u,v,c,o]\cdot X[i+u, j+v, c] + b[o] ]

Hiperparâmetros-chave:

  • Tamanho do kernel ((k_h, k_w)): por exemplo, 3×3, 5×5
  • Passo (stride) (s): tamanho do deslocamento ao deslizar o kernel (controla a subamostragem)
  • Preenchimento (padding) (p): adiciona pixels de borda (frequentemente zeros) para controlar o tamanho da saída
  • Dilatação (dilation) (d): espaça os pontos do kernel para ampliar o campo receptivo sem aumentar parâmetros
  • Grupos (groups): particiona canais; inclui convolução depthwise como caso especial

Por que a convolução é eficiente

Uma camada densa (fully-connected) de uma imagem (H \times W \times C) para (M) unidades ocultas teria ((HWC)\cdot M) parâmetros. Uma camada convolucional usa compartilhamento de pesos (weight sharing): o mesmo kernel pequeno é reutilizado em cada posição espacial. A contagem de parâmetros passa a ser:

[ (k_h \cdot k_w \cdot C_{in}) \cdot C_{out} ]

Por exemplo, uma convolução 3×3 de 64→128 canais tem (3\cdot3\cdot64\cdot128 \approx 73k) pesos — independente da resolução da imagem.

Viés indutivo das CNNs: por que elas funcionam bem em imagens

Um viés indutivo é uma suposição arquitetural que direciona o aprendizado para funções com maior probabilidade de generalizar bem em um domínio.

As CNNs codificam vários vieses poderosos:

Localidade (pixels próximos importam)

Camadas iniciais olham para pequenas vizinhanças (por exemplo, 3×3). Isso combina com imagens naturais, onde bordas, texturas e cantos são locais.

Equivariança à translação (translation equivariance) (desloca a entrada → desloca a saída)

Se você desloca a imagem de entrada, o mapa de características se desloca da mesma forma (aproximadamente, dependendo do preenchimento e de efeitos de borda). Isso se chama equivariança (equivariance).

A equivariança importa porque objetos podem aparecer em qualquer lugar do quadro. Em vez de aprender “pesos de detector” separados para cada posição, as CNNs reutilizam o mesmo detector em todo lugar.

Composicionalidade (características constroem sobre características)

Empilhar camadas convolucionais faz crescer o campo receptivo (receptive field):

  • camadas iniciais detectam bordas/texturas
  • camadas intermediárias detectam partes (rodas, olhos)
  • camadas profundas detectam objetos ou conceitos de alto nível

Invariância aproximada via pooling e passo

A classificação (classification) frequentemente se beneficia de invariância (invariance): pequenos deslocamentos/distorções não deveriam mudar o rótulo. As CNNs tipicamente introduzem invariância reduzindo a resolução espacial por meio de:

  • Pooling máximo (max pooling)/pooling médio (average pooling)
  • Convoluções com passo
  • Pooling médio global (global average pooling, GAP) perto do final

O pooling não é o único caminho para invariância, e algumas CNNs modernas reduzem ou removem pooling em favor de convoluções com passo cuidadosamente projetadas.

Os blocos de construção de uma CNN

Camadas convolucionais

Padrões comuns:

  • Convolução 3×3: um padrão default (bom equilíbrio entre custo computacional e expressividade)
  • Convolução 1×1: mistura canais sem misturar vizinhos espaciais (usada para gargalos e projeções)
  • Convolução com passo (strided conv): subamostra enquanto aprende características
  • Convolução dilatada (dilated conv): aumenta o campo receptivo para segmentação/áudio sem subamostrar

Não linearidades

As CNNs alternam convolução linear com ativação não linear, comumente:

  • ReLU, GELU, SiLU (Swish)

Sem não linearidades, camadas convolucionais empilhadas colapsam em uma única operação linear.

Normalização

A normalização estabiliza o treinamento ao controlar estatísticas das ativações:

  • Normalização em lote (BatchNorm) é historicamente comum em CNNs
  • Normalização por camada (LayerNorm)/normalização por grupo (GroupNorm) é frequentemente usada em regimes de lotes pequenos (por exemplo, detecção/segmentação)

Pooling

  • Pooling máximo: mantém a resposta mais forte; historicamente popular
  • Pooling médio: mais suave
  • Pooling médio global: faz a média de cada canal ao longo das dimensões espaciais; reduz parâmetros vs. classificadores densos

Conexões residuais (residual connections) (conexões de atalho (skip connections))

Introduzidas nas ResNets, conexões residuais permitem treinar CNNs muito profundas ao melhorar o fluxo de gradiente (veja Retropropagação (Backpropagation)).

Um bloco residual calcula: [ y = x + F(x) ] Isso torna “não fazer nada” (identidade) uma solução fácil se camadas mais profundas não forem necessárias.

Famílias comuns de arquiteturas CNN (e o que elas contribuíram)

LeNet → AlexNet: primeiros avanços

  • LeNet-5 (anos 1990): CNN inicial para reconhecimento de dígitos
  • AlexNet (2012): popularizou CNNs profundas para o ImageNet com GPUs, ReLU, dropout (dropout) e aumento de dados (data augmentation)

VGG: profundidade com simplicidade

  • Blocos repetidos de convolução 3×3
  • Fácil de entender, mas computacionalmente pesada

Inception: processamento multiescala (multi-scale)

Módulos Inception processam múltiplos tamanhos de kernel em paralelo (por exemplo, 1×1, 3×3, 5×5) para capturar padrões em diferentes escalas de forma eficiente.

ResNet: redes muito profundas

  • Conexões residuais permitiram CNNs de 50/101/152 camadas treinarem de forma confiável
  • Tornou-se um backbone (backbone) para muitas tarefas de visão (classificação, detecção, segmentação)

MobileNet / EfficientNet: eficiência e escalonamento

  • Convoluções separáveis em profundidade (depthwise separable convolutions) (MobileNet): fatoram uma convolução em:
    • convolução em profundidade (depthwise convolution) (filtragem espacial por canal)
    • convolução pontual 1×1 (pointwise convolution) (mistura de canais)
  • EfficientNet: escalonamento composto (compound scaling) fundamentado de profundidade/largura/resolução

ConvNeXt: CNNs “modernizadas”

O ConvNeXt revisita CNNs com escolhas de projeto inspiradas por Transformadores (por exemplo, kernels maiores, diferentes posicionamentos de normalização/ativação) e mostra que CNNs podem permanecer altamente competitivas em benchmarks de visão (vision benchmarks).

Exemplo prático: uma pequena CNN em PyTorch

Abaixo está uma CNN compacta para classificação de imagens (por exemplo, CIFAR-10). Ela demonstra ingredientes típicos: blocos convolucionais, normalização, subamostragem e pooling global.

import torch
import torch.nn as nn
import torch.nn.functional as F

class SmallCNN(nn.Module):
    def __init__(self, num_classes=10):
        super().__init__()
        self.features = nn.Sequential(
            # 3x32x32 -> 64x32x32
            nn.Conv2d(3, 64, kernel_size=3, padding=1),
            nn.BatchNorm2d(64),
            nn.ReLU(inplace=True),

            # 64x32x32 -> 128x16x16 (downsample)
            nn.Conv2d(64, 128, kernel_size=3, stride=2, padding=1),
            nn.BatchNorm2d(128),
            nn.ReLU(inplace=True),

            # 128x16x16 -> 256x8x8 (downsample)
            nn.Conv2d(128, 256, kernel_size=3, stride=2, padding=1),
            nn.BatchNorm2d(256),
            nn.ReLU(inplace=True),
        )

        self.classifier = nn.Sequential(
            nn.AdaptiveAvgPool2d((1, 1)),  # 256x1x1
            nn.Flatten(),                  # 256
            nn.Linear(256, num_classes)
        )

    def forward(self, x):
        x = self.features(x)
        return self.classifier(x)

model = SmallCNN(num_classes=10)
x = torch.randn(8, 3, 32, 32)
logits = model(x)
print(logits.shape)  # torch.Size([8, 10])

Notas práticas:

  • Convolução com passo é usada em vez de pooling máximo para subamostragem (comum em CNNs modernas).
  • AdaptiveAvgPool2d((1,1)) torna o modelo robusto a diferentes tamanhos de entrada (dentro do razoável).

CNNs além da classificação: aplicações centradas em visão

CNNs são amplamente usadas como arquiteturas-base (backbones) (extratores de características) e integradas a cabeças (heads) específicas de tarefa.

Detecção de objetos (object detection)

Detecção exige prever o que e onde:

  • Detectores de duas etapas (two-stage detectors) (por exemplo, Faster R-CNN) usam propostas de região (region proposals) + classificação
  • Detectores de uma etapa (one-stage detectors) (por exemplo, YOLO, RetinaNet) predizem caixas/classes de forma densa

CNNs fornecem mapas de características multiescala (por exemplo, via Redes de Pirâmide de Características (Feature Pyramid Networks)) porque objetos aparecem em tamanhos diferentes.

Segmentação semântica e por instância (semantic and instance segmentation)

Segmentação prediz rótulos por pixel:

  • U-Net: codificador-decodificador (encoder-decoder) com conexões de atalho, popular em imagens médicas
  • DeepLab: usa convoluções dilatadas e módulos de contexto multiescala

Conexões de atalho ajudam a recuperar detalhes finos perdidos durante a subamostragem.

Detecção de pontos-chave (keypoint detection) e estimativa de pose (pose estimation)

CNNs podem produzir mapas de calor (heatmaps) para articulações (por exemplo, cotovelos, joelhos). Representações de alta resolução e características multiescala são especialmente importantes.

Restauração e geração de imagens

CNNs são fortes para:

  • remoção de ruído, deblurring
  • super-resolução (por exemplo, modelos no estilo SRResNet)
  • componentes de U-Nets de modelos de difusão (diffusion model) (frequentemente misturados com blocos de atenção (attention blocks))

CNNs fora de imagens: convoluções 1D e 3D

CNNs 1D (áudio, séries temporais)

Uma convolução 1D desliza ao longo do tempo:

  • detecção de palavras-chave (keyword spotting)
  • classificação de ECG/EEG
  • previsão de séries temporais (time series forecasting) em geral (às vezes junto com Modelos de Espaço de Estados (State Space Models) ou Transformadores)

CNNs 1D dilatadas podem modelar contexto longo de forma eficiente (por exemplo, designs no estilo WaveNet (WaveNet-style)).

CNNs 3D (vídeo e dados volumétricos)

Convoluções 3D operam ao longo do tempo e do espaço 2D:

  • reconhecimento de ações
  • volumes médicos de TC/RM (CT/MRI) Elas são poderosas, mas computacionalmente caras; muitos sistemas usam abordagens fatoradas ou híbridas.

Treinando CNNs bem: considerações práticas

Pré-processamento e aumento de dados

Como as CNNs assumem translação e localidade, elas ainda se beneficiam enormemente de aumento de dados:

  • recorte/redimensionamento aleatório
  • espelhamento horizontal
  • jitter de cor
  • mixup/cutmix (frequentemente eficaz para classificação)

O aumento de dados atua como um viés indutivo adicional: “essas transformações não deveriam mudar o rótulo.”

Otimização

CNNs tipicamente são treinadas com variantes de Descida do Gradiente (Gradient Descent):

  • SGD + momentum (clássico e forte para visão)
  • AdamW (comum em configurações modernas, especialmente com receitas de treinamento no estilo de Transformadores)

Agendas de taxa de aprendizado (learning-rate schedules) (decaimento cossenoidal, decaimento em degraus, aquecimento (warmup)) frequentemente importam tanto quanto ajustes arquiteturais.

Regularização (regularization)

  • decaimento de pesos (weight decay)
  • dropout (menos comum em backbones convolucionais do que em cabeças de MLP)
  • suavização de rótulos (label smoothing)

Campo receptivo vs. resolução

Para tarefas que exigem localização precisa (segmentação, detecção), subamostrar demais pode prejudicar o desempenho. Estratégias comuns:

  • preservar por mais tempo uma resolução maior do mapa de características
  • usar convoluções dilatadas para aumentar o campo receptivo sem subamostrar
  • usar arquiteturas codificador-decodificador com conexões de atalho

Eficiência e implantação: por que CNNs continuam importantes

CNNs se mapeiam bem para hardware:

  • Convoluções podem ser implementadas de forma eficiente em GPUs/TPUs via kernels otimizados.
  • Convoluções separáveis em profundidade reduzem FLOPs (operações de ponto flutuante) e largura de banda de memória (ótimo para mobile).
  • Quantização (quantization) (por exemplo, INT8) geralmente é direta e eficaz.

Técnicas comuns de eficiência:

  • Convolução separável em profundidade
  • Gargalos (bottlenecks) (1×1 reduz → 3×3 processa → 1×1 expande)
  • Poda estruturada (structured pruning) e afinamento de canais
  • Destilação de conhecimento (knowledge distillation) a partir de um modelo maior

Limitações das CNNs (e como modelos modernos as abordam)

Contexto global limitado por padrão

Uma camada convolucional padrão vê apenas uma vizinhança local. Pilhas profundas aumentam o campo receptivo, mas capturar relações globais ainda pode ser mais difícil do que em modelos baseados em atenção (attention-based models).

Mitigações:

  • kernels maiores (por exemplo, 7×7, 11×11 em alguns designs)
  • convoluções dilatadas
  • adicionar blocos de atenção (backbones híbridos CNN-atenção)
  • módulos de pooling/contexto global (blocos de Espremer-e-Excitar, SE (Squeeze-and-Excitation, SE), blocos não locais (non-local blocks))

Vieses embutidos podem ser uma faca de dois gumes

Os mesmos vieses que ajudam em imagens naturais podem atrapalhar quando:

  • dependências de longo alcance dominam
  • os dados não são estacionários por translação
  • a tarefa exige raciocínio global flexível

Esse é um motivo pelo qual Transformadores ganharam popularidade em visão: atenção fornece interações globais dependentes do conteúdo, embora frequentemente exija mais dados/cálculo para brilhar.

Variantes e extensões que vale conhecer

  • Convolução agrupada (grouped convolution): divide canais em grupos (usada no ResNeXt)
  • Convolução em profundidade (depthwise convolution): grupos = número de canais (MobileNet)
  • Convolução deformável (deformable convolution): aprende deslocamentos de amostragem (sampling offsets) para se adaptar à geometria (útil em detecção)
  • Convolução dinâmica (dynamic convolution): pesos dependem da entrada (comportamento tipo mistura)
  • Espremer-e-Excitar (Squeeze-and-Excitation, SE): atenção/mecanismo de porta (gating) por canal para reponderar características

Todas essas são formas de aumentar a expressividade sem abandonar a eficiência da convolução.

Quando escolher uma CNN hoje

CNNs costumam ser um forte padrão quando você quer:

  • alta acurácia com inferência (inference) eficiente (especialmente em dispositivos de borda (edge devices))
  • forte desempenho com poucos dados de treinamento (graças ao viés indutivo)
  • comportamento de treinamento bem compreendido e ferramentas maduras

Transformadores e híbridos são frequentemente escolhidos quando:

  • há pré-treinamento (pretraining) em grande escala disponível
  • contexto global e interações flexíveis importam muito
  • você está construindo sistemas multimodais (multimodal) unificados (visão-linguagem (vision-language))

Na prática, muitos sistemas de ponta combinam ambos: convolução para processamento local eficiente e atenção para raciocínio global.

Resumo

CNNs são arquiteturas centradas em visão construídas sobre convoluções, codificando vieses indutivos — localidade, equivariança à translação e hierarquias composicionais de características — que se alinham bem com imagens. Elas permanecem altamente relevantes devido à sua eficiência, forte desempenho e compatibilidade com restrições de implantação. Embora modelos baseados em atenção tenham ampliado o espaço de design, CNNs modernas (e híbridos CNN-atenção) continuam sendo fundamentais em classificação, detecção, segmentação, vídeo e modelagem generativa.