Você treinou um modelo com 98% de acurácia, mas ele demora uma eternidade para rodar em produção. E agora?
Esse é um dos problemas mais comuns quando modelos de deep learning saem do notebook e vão para o mundo real. A verdade é que treinar um modelo é apenas metade do trabalho. A outra metade é fazer esse modelo rodar de forma eficiente, com baixa latência e consumo de memória aceitável, seja na nuvem ou em dispositivos com recursos limitados.
É aí que entra a compressão de modelos (model compression). Um conjunto de técnicas que permite reduzir drasticamente o tamanho de redes neurais, mantendo a maior parte da acurácia original.
Por que comprimir modelos?
A evolução do deep learning trouxe modelos cada vez mais poderosos e, inevitavelmente, cada vez maiores. Para ter uma ideia da escala:
- A AlexNet (2012) tinha aproximadamente 240 MB de parâmetros
- A VGG-16 ultrapassou 500 MB, exigindo cerca de 30 bilhões de operações de ponto flutuante (FLOPs) para classificar uma única imagem de 224×224 pixels
- Os Large Language Models atuais, como o LLaMA 2 com 130 bilhões de parâmetros, exigem cerca de 260 GB de memória em precisão float16
Esses requisitos criam barreiras enormes para o deploy, especialmente em cenários que exigem:
- Dispositivos edge: celulares, sensores IoT, sistemas embarcados com memória e processamento limitados
- Inferência em tempo real: detecção de fraude, recomendação de conteúdo, veículos autônomos
- Eficiência energética: aplicações que não podem drenar baterias rapidamente
O princípio por trás da compressão: redundância
Um achado fundamental da pesquisa em deep learning é que modelos treinados contêm uma quantidade enorme de redundância. Um estudo seminal de Han et al. (2015) demonstrou que é possível atingir mais de 71% de compressão sacrificando apenas 0,1% de acurácia em redes como AlexNet e VGG-16.
Essa redundância existe tanto nas camadas fully connected quanto nas camadas convolucionais. O motivo é simples: o grande número de parâmetros é fundamental durante o treinamento, pois contribui para a capacidade de aprendizado e generalização. Porém, muitos desses parâmetros tornam-se dispensáveis durante a inferência.
Você precisa de muitos parâmetros para aprender os padrões, mas não precisa de muitos parâmetros para inferir. — Han et al. (2015)
Esse princípio foi reforçado pelo paper *The Lottery Ticket Hypothesis* (Frankle & Carlin, 2019), que mostrou que dentro de redes neurais grandes existem sub-redes menores (os winning tickets) que, quando treinadas isoladamente com a inicialização correta, atingem acurácia comparável ao modelo completo.
As quatro técnicas de compressão
A literatura consolida quatro abordagens principais para compressão de modelos. Para uma visão abrangente, recomendo o paper *A Survey of Model Compression and Acceleration for Deep Neural Networks* (2018, atualizado em 2020).
1. Pruning (Poda)
O pruning tem raízes nos algoritmos clássicos de árvore de decisão, onde se removem ramificações que contribuem pouco para a classificação final. No contexto de deep learning, a ideia é a mesma: identificar e eliminar componentes que contribuem minimamente para o desempenho do modelo.
Existem dois tipos de pruning:
- Structured pruning: remove neurônios, filtros convolucionais ou camadas inteiras. Isso muda a arquitetura do modelo, reduzindo o número total de parâmetros. O resultado é uma rede fisicamente menor.
- Unstructured pruning (poda de pesos): identifica pesos individuais que são menos úteis e os define como zero. A arquitetura permanece a mesma, mas a rede se torna mais esparsa. Com bibliotecas especializadas e hardware apropriado, matrizes esparsas ocupam menos memória e permitem inferências mais rápidas.
Um contraponto interessante vem do paper *Rethinking the Value of Network Pruning* (Liu et al., 2019), que argumenta que o real valor do pruning não está nos pesos herdados do modelo original, mas na arquitetura podada em si. Segundo os autores, treinar a arquitetura podada do zero frequentemente alcança desempenho comparável ou até superior.
2. Low-Rank Factorization (Decomposição de Tensores)
Essa técnica usa álgebra linear para substituir tensores de alta dimensionalidade por tensores de menor dimensionalidade. O conceito central é o rank de uma matriz: se linhas ou colunas são linearmente dependentes, elas carregam informação redundante que pode ser eliminada.
Na prática, um filtro convolucional de dimensão
pode ser decomposto em operações sequenciais menores. A AlexNet, por exemplo, consegue manter o mesmo desempenho com 50 vezes menos parâmetros usando essa abordagem.
A desvantagem é que essa técnica é mais específica: funciona bem com redes convolucionais, mas tem aplicação limitada em Transformers. Também não é plug and play como quantização ou pruning, exigindo conhecimento mais profundo da arquitetura.
3. Knowledge Distillation (Destilação de Conhecimento)
Na destilação de conhecimento, um modelo pequeno (o aluno) é treinado para imitar um modelo maior (o professor). O aluno não aprende apenas a tarefa em si, mas também as soft predictions do professor, que são as probabilidades completas que contêm informação valiosa sobre a estrutura do problema.
A transferência acontece através da predição, não da arquitetura. Isso significa que professor e aluno podem ter estruturas completamente diferentes.
O caso de sucesso mais conhecido é o DistilBERT (Sanh et al., 2019):
- 40% menor que o BERT original
- Manteve 97% da performance
- 60% mais rápido
A principal desvantagem é a dependência de um professor pré-treinado. Se não existir um modelo grande disponível, será necessário treinar um do zero, o que anula parte do benefício.
4. Quantização
A quantização é a técnica mais popular e a mais perguntada em entrevistas técnicas de machine learning engineering. A ideia é simples: reduzir a precisão numérica dos pesos e ativações do modelo.
Durante o treinamento, modelos operam tipicamente em float32 (32 bits: 1 de sinal, 8 de expoente, 23 de mantissa). A quantização mapeia esses valores para representações com menos bits, como float16 ou int8.
Os ganhos são significativos:
- Redução de ~4x no tamanho do modelo (float32 → int8)
- Inferências mais rápidas (operações inteiras são mais eficientes)
- Menor consumo de energia (crítico para dispositivos edge)
- Redução de banda na transferência de dados
Quantização simétrica vs. assimétrica
A quantização simétrica é o padrão na indústria. Ela mapeia o range de valores de forma centrada no zero, eliminando a necessidade de um ponto zero adicional (zero-point), o que reduz o overhead computacional.
A quantização assimétrica (affine) usa uma função com ponto zero, permitindo mapear ranges que não são centrados no zero. É mais precisa, mas computacionalmente mais custosa.
Desafios da quantização
Apesar da simplicidade, a quantização introduz desafios que devem ser considerados:
- Erro de arredondamento: ao reduzir a precisão, valores são arredondados para a representação discreta mais próxima, induzindo erros
- Erro de clipping: quando valores excedem o range da representação quantizada, são cortados, causando perda de informação
- Degradação da acurácia: encontrar o fator de escala ótimo (scale factor) é crucial. Um fator muito grande causa overflow, muito pequeno causa underflow
- Sensibilidade das camadas: camadas iniciais da rede, que capturam detalhes sutis como arestas e texturas, são mais sensíveis à quantização. Erros nessas camadas se propagam para as camadas subsequentes
Quando usar cada técnica
| Técnica | Redução típica | Melhor para |
|---|---|---|
| Pruning | Até 90% dos parâmetros | Redes grandes com muita redundância |
| Low-Rank Factorization | Até 50x menos parâmetros | CNNs com filtros grandes |
| Knowledge Distillation | 40-60% menor | NLP, quando há professor disponível |
| Quantização | ~4x menor (float32→int8) | Qualquer modelo, deploy rápido |
Leitura recomendada
Se você quer se aprofundar no tema, especialmente para entrevistas técnicas de machine learning engineering, recomendo o capítulo 7 (Model Development and Prediction Service) do livro Designing Machine Learning Systems, da Chip Huyen. Ele cobre as quatro técnicas com gráficos, referências e estudos de caso, além de discutir estratégias para inferência em nuvem vs. dispositivos edge.
Papers fundamentais para aprofundamento:
- Han et al. (2015) — *Learning both Weights and Connections for Efficient Neural Networks*
- Frankle & Carlin (2019) — *The Lottery Ticket Hypothesis: Finding Sparse, Trainable Neural Networks*
- Liu et al. (2019) — *Rethinking the Value of Network Pruning*
- *A Survey of Model Compression and Acceleration for Deep Neural Networks* (2018, atualizado 2020)
Takeaways
- Modelos grandes contêm redundância: até 90% dos parâmetros podem ser removidos com perda mínima de acurácia.
- Quantização é a técnica mais prática: reduz o modelo em ~4x com implementação simples e é tema quase certo em entrevistas de ML engineering.
- Pruning e distilação são complementares: podem ser combinados com quantização para compressão ainda maior.
- Compressão não é opcional em produção: latência, memória e custo computacional são restrições reais que todo modelo em deploy precisa enfrentar.
Se você quer entender os fundamentos de deep learning antes de mergulhar em compressão, confira os melhores cursos para aprender deep learning com Python.


















