Explicação sobre o Gemma: novidades do Gemma 3

30 DE ABRIL DE 2025
Ju-yeong Ji Sr. Technical Consultant Gen AI – AI Studio
Ravin Kumar Google Data Scientist Language Applications

As postagens anteriores da série "Explicação sobre o Gemma" forneceram uma visão geral detalhada das arquiteturas da família de modelos Gemma. Estes são os links de cada uma das postagens:

Nesta postagem, você vai explorar o modelo mais recente, o Gemma 3. Vamos lá!


Gemma 3

Uma mudança importante em relação às versões anteriores é o novo suporte do Gemma 3 a recursos de visão-linguagem. Aqueles familiarizados com a arquitetura do PaliGemma poderão reconhecer um codificador SigLIP utilizado no Gemma 3, embora ele tenha sido adaptado para esta implementação específica.

Veja aqui os principais parâmetros dos novos modelos.

Core parameters of new Gemma 3 models

Vamos explorar as principais diferenças e melhorias do Gemma 3.


Principais diferenças

Embora a arquitetura do Gemma 3 herde aspectos de seus antecessores, ela também traz novas modificações, que são descritas abaixo.


Suporte a visão-linguagem

Uma grande melhoria do Gemma 3 é sua nova capacidade de compreensão de visão-linguagem. Os modelos 4B, 12B e 27B empregam um codificador de visão SigLIP personalizado, que permite a um modelo interpretar entradas visuais.

O codificador de visão opera em imagens quadradas fixas de 896 x 896. Para tratar imagens com diferentes proporções ou altas resoluções, é empregado um algoritmo "Pan & Scan". Isso envolve recortar a imagem de forma adaptativa, redimensionar cada recorte para 896 x 896 e, em seguida, codificá-la. Embora esse método melhore o desempenho, especialmente quando informações detalhadas são críticas, ele leva ao aumento do overhead computacional durante a inferência.

Além disso, o Gemma 3 trata as imagens como uma sequência de "soft tokens" compactos produzidos pelo MultiModalProjector. Essa técnica reduz significativamente os recursos de inferência necessários para o processamento de imagens, representando dados visuais com um número fixo de 256 vetores.

flow image of gemma 3 architecture

Antes de prosseguir, você pode se perguntar: "Quando devo usar Gemma 3 ou o PaliGemma 2?"

O ponto forte do PaliGemma 2 está em recursos não encontrados no Gemma 3, como segmentação de imagens e detecção de objetos. No entanto, o Gemma 3 integrou e estendeu a tecnologia do PaliGemma, oferecendo chat com várias voltas e um sólido desempenho em zero-shot para lidar diretamente com várias tarefas de visão.

Sua decisão final também deve considerar os recursos computacionais disponíveis e a importância de recursos avançados, como contexto mais longo ou suporte multilíngue, nos quais o Gemma 3 oferece aprimoramentos notáveis.


Mudanças arquitetônicas para eficiência da memória

A arquitetura foi modificada para reduzir o uso da memória do cache KV, que tende a aumentar com o contexto longo.

Atenção intercalada de 5 para 1

A arquitetura de modelo atualizada é composta por blocos de intercalação repetidos, cada um contendo cinco camadas de atenção local com uma janela deslizante de 1024 e uma camada de atenção global. Esse design permite que o modelo capture dependências de curto e longo alcance, levando a respostas mais precisas e contextualmente relevantes.

Observação: O Gemma 1 dependia exclusivamente da atenção global, ao passo que o Gemma 2 introduziu uma abordagem híbrida, alternando entre as camadas de atenção local e global. O Gemma 3 integra cinco camadas de atenção local dedicada, resultando em respostas mais precisas e contextualmente apropriadas.
Gemma 3 local and global attention layers depicted in a table, compared to Gemma 1 and Gemma 2

Sem softcapping

Tanto o Gemma 2 quanto o Gemma 3 utilizam a atenção de consulta agrupada (GQA, na sigla em inglês) com pós-normalização e pré-normalização com RMSNorm. No entanto, o Gemma 3 ganha acurácia aprimorada e velocidades de processamento mais altas ao adotar a norma QK em vez do mecanismo de sofcapping do Gemma 2.

Gemma 3 grouped query attention

Contexto mais longo

Como resultado das mudanças arquitetônicas discutidas acima, o Gemma 3 utiliza a atenção intercalada para diminuir os requisitos de memória, permitindo o suporte a um comprimento de contexto estendido. Isso permite a análise de documentos e conversas mais longos sem perda de contexto. Especificamente, ele é capaz de lidar com 32 mil tokens para o modelo 1B e 128 mil tokens para modelos maiores.

Observação: a janela de contexto de 128 mil tokens permite que o modelo processe uma quantidade de texto tão longa quanto um romance típico (cerca de 80 mil palavras). Esse tamanho de janela é de aproximadamente 96 mil palavras, 198 páginas, 500 imagens ou mais de 8 minutos de vídeo a 1 quadro por segundo.
Gemma 3 context window

Codificador de visão e processamento

O Gemma 3 só usa a atenção bidirecional com entradas de imagem.

A atenção normal (também conhecida como atenção unidirecional) é como a leitura. Imagine ler um livro. Você entende cada palavra considerando as palavras que vieram antes dela. É assim que funciona a atenção típica em modelos de linguagem. Ela é sequencial e olha para trás para construir o contexto.

Por outro lado, a atenção bidirecional é como olhar para um quebra-cabeça. Pense em uma imagem como um quebra-cabeça e nos "tokens da imagem" como as peças individuais desse quebra-cabeça. Isso significa que cada peça "olha para" e se conecta a todas as outras peças da imagem, independentemente de sua posição. A atenção bidirecional considera toda a imagem de uma só vez, e não apenas uma sequência. Isso permite uma compreensão total, porque cada uma das peças está relacionada a todas as outras.

Mas por que não usar sempre a atenção bidirecional? Embora isso pareça melhor (quando se olha para todo o contexto), ela nem sempre é usada para texto. Tudo tem a ver com a tarefa:

  • Compreensão (a atenção bidirecional é boa)
    Para tarefas nas quais temos todo o texto e precisamos entendê-lo profundamente (em modelos como o BERT, por exemplo), a atenção bidirecional é ótima.

  • Previsão (a atenção unidirecional é melhor)
    Quando a tarefa é prever a próxima palavra ou gerar texto, uma abordagem unidirecional (autorregressiva) é mais natural. Prever o que vem a seguir é inerentemente sequencial. Ela também é, muitas vezes, mais eficiente em termos de computação.

A principal diferença é que a abordagem bidirecional é usada quando o modelo não está criando uma sequência.

A visualização a seguir ilustra o mecanismo de atenção no Gemma 3.

Código:

from transformers.utils.attention_visualizer import AttentionMaskVisualizer
visualizer = AttentionMaskVisualizer("google/gemma-3-4b-it")
visualizer("<start_of_turn>user\n<img>What is this?<end_of_turn>\n<start_of_turn>model\nIt's an image of a cat.<end_of_turn>")

Saída:

Attention mechanism in Gemma 3 : Output

Você também pode ver como esse mecanismo de atenção difere do PaliGemma. Para fornecer contexto para essa comparação, o PaliGemma opera recebendo uma ou mais imagens juntamente com uma descrição da tarefa baseada em texto (o prompt ou prefixo) e, subsequentemente, gera sua previsão como uma string de texto (a resposta ou o sufixo) de maneira autorregressiva.

Código:

visualizer = AttentionMaskVisualizer("google/paligemma2-3b-mix-224")
visualizer("<img> caption en", suffix="a cat standing on a beach.")

Saída

Attention mechanism in PaliGemma : Output

Novo tokenizador

O Gemma 3 melhorou os recursos multilíngues devido a uma mistura de dados reformulada com uma quantidade maior de dados multilíngues (tanto monolíngues quanto paralelos).

O Gemma 3 também introduz um tokenizador aprimorado. O tamanho do vocabulário passou para 262 mil, mas usa o mesmo tokenizador SentencePiece. Para evitar erros, use o novo tokenizador com o Gemma 3. Esse é o mesmo tokenizador do Gemini, que é mais equilibrado para idiomas diferentes do inglês.


Gemma 3 27B

Gemma3ForConditionalGeneration(
  (vision_tower): SiglipVisionModel(
    (vision_model): SiglipVisionTransformer(
      (embeddings): SiglipVisionEmbeddings(
        (patch_embedding): Conv2d(3, 1152, kernel_size=(14, 14), stride=(14, 14), padding=valid)
        (position_embedding): Embedding(4096, 1152)
      )
      (encoder): SiglipEncoder(
        (layers): ModuleList(
          (0-26): 27 x SiglipEncoderLayer(
            (self_attn): SiglipSdpaAttention(
              (k_proj): Linear(in_features=1152, out_features=1152, bias=True)
              (v_proj): Linear(in_features=1152, out_features=1152, bias=True)
              (q_proj): Linear(in_features=1152, out_features=1152, bias=True)
              (out_proj): Linear(in_features=1152, out_features=1152, bias=True)
            )
            (layer_norm1): LayerNorm((1152,), eps=1e-06, elementwise_affine=True)
            (mlp): SiglipMLP(
              (activation_fn): PytorchGELUTanh()
              (fc1): Linear(in_features=1152, out_features=4304, bias=True)
              (fc2): Linear(in_features=4304, out_features=1152, bias=True)
            )
            (layer_norm2): LayerNorm((1152,), eps=1e-06, elementwise_affine=True)
          )
        )
      )
      (post_layernorm): LayerNorm((1152,), eps=1e-06, elementwise_affine=True)
    )
  )
  (multi_modal_projector): Gemma3MultiModalProjector(
    (mm_soft_emb_norm): Gemma3RMSNorm((1152,), eps=1e-06)
    (avg_pool): AvgPool2d(kernel_size=4, stride=4, padding=0)
  )
  (language_model): Gemma3ForCausalLM(
    (model): Gemma3TextModel(
      (embed_tokens): Gemma3TextScaledWordEmbedding(262208, 5376, padding_idx=0)
      (layers): ModuleList(
        (0-61): 62 x Gemma3DecoderLayer(
          (self_attn): Gemma3Attention(
            (q_proj): Linear(in_features=5376, out_features=4096, bias=False)
            (k_proj): Linear(in_features=5376, out_features=2048, bias=False)
            (v_proj): Linear(in_features=5376, out_features=2048, bias=False)
            (o_proj): Linear(in_features=4096, out_features=5376, bias=False)
            (q_norm): Gemma3RMSNorm((128,), eps=1e-06)
            (k_norm): Gemma3RMSNorm((128,), eps=1e-06)
          )
          (mlp): Gemma3MLP(
            (gate_proj): Linear(in_features=5376, out_features=21504, bias=False)
            (up_proj): Linear(in_features=5376, out_features=21504, bias=False)
            (down_proj): Linear(in_features=21504, out_features=5376, bias=False)
            (act_fn): PytorchGELUTanh()
          )
          (input_layernorm): Gemma3RMSNorm((5376,), eps=1e-06)
          (post_attention_layernorm): Gemma3RMSNorm((5376,), eps=1e-06)
          (pre_feedforward_layernorm): Gemma3RMSNorm((5376,), eps=1e-06)
          (post_feedforward_layernorm): Gemma3RMSNorm((5376,), eps=1e-06)
        )
      )
      (norm): Gemma3RMSNorm((5376,), eps=1e-06)
      (rotary_emb): Gemma3RotaryEmbedding()
      (rotary_emb_local): Gemma3RotaryEmbedding()
    )
    (lm_head): Linear(in_features=5376, out_features=262208, bias=False)
  )
)
Gemma 3 27B architecture
Observação: tecnicamente, o Rotary Positional Embedding (RoPE) está dentro da atenção dot-product ajustada (SDPA, na sigla em inglês), mas simplificamos isso neste diagrama. Consulte o código para ver os detalhes arquitetônicos.


Gemma 3 1B

Gemma3ForCausalLM(
  (model): Gemma3TextModel(
    (embed_tokens): Gemma3TextScaledWordEmbedding(262144, 1152, padding_idx=0)
    (layers): ModuleList(
      (0-25): 26 x Gemma3DecoderLayer(
        (self_attn): Gemma3Attention(
          (q_proj): Linear(in_features=1152, out_features=1024, bias=False)
          (k_proj): Linear(in_features=1152, out_features=256, bias=False)
          (v_proj): Linear(in_features=1152, out_features=256, bias=False)
          (o_proj): Linear(in_features=1024, out_features=1152, bias=False)
          (q_norm): Gemma3RMSNorm((256,), eps=1e-06)
          (k_norm): Gemma3RMSNorm((256,), eps=1e-06)
        )
        (mlp): Gemma3MLP(
          (gate_proj): Linear(in_features=1152, out_features=6912, bias=False)
          (up_proj): Linear(in_features=1152, out_features=6912, bias=False)
          (down_proj): Linear(in_features=6912, out_features=1152, bias=False)
          (act_fn): PytorchGELUTanh()
        )
        (input_layernorm): Gemma3RMSNorm((1152,), eps=1e-06)
        (post_attention_layernorm): Gemma3RMSNorm((1152,), eps=1e-06)
        (pre_feedforward_layernorm): Gemma3RMSNorm((1152,), eps=1e-06)
        (post_feedforward_layernorm): Gemma3RMSNorm((1152,), eps=1e-06)
      )
    )
    (norm): Gemma3RMSNorm((1152,), eps=1e-06)
    (rotary_emb): Gemma3RotaryEmbedding()
    (rotary_emb_local): Gemma3RotaryEmbedding()
  )
  (lm_head): Linear(in_features=1152, out_features=262144, bias=False)
)

Este modelo 1B somente de texto é especificamente otimizado para uso no dispositivo, tornando a IA avançada acessível em sistemas incorporados e para dispositivos móveis. Isso afeta significativamente a acessibilidade, a privacidade e o desempenho, pois os aplicativos habilitados por IA agora podem funcionar com eficiência, mesmo com conectividade de rede limitada ou inexistente.


Principais conclusões

Nosso relatório técnico fornece mais detalhes, mas este é um breve resumo das principais conclusões sobre o Gemma 3:

  • Desempenho superior nos mesmos tamanhos:
    Os modelos Gemma 3 alcançam desempenho superior em comparação com o Gemma 2 nas versões pré-treinadas ou ajustadas por instruções em vários comparativos de mercado. Esse é o melhor modelo para um único host de GPU ou TPU de consumidor final. Em 12 de abril de 2025, o modelo Gemma 27B IT está entre os 10 melhores modelos no LMArena, superando modelos abertos muito maiores e atingindo uma pontuação Elo significativamente maior do que o Gemma 2.

  • Redução do uso da memória do cache KV:
    As mudanças arquitetônicas do Gemma 3 reduzem efetivamente o overhead de memória do cache KV durante a inferência com contexto longo em comparação com os mecanismos de atenção somente global usados no Gemma 1 e com a proporção local/global de 1 para 1 usada no Gemma 2.

  • Tratamento eficaz de contexto longo:
    Os modelos Gemma 3 podem generalizar para o comprimento de contexto de 128 mil após o reescalonamento do RoPE durante o pré-treinamento. Aumentamos a frequência de base do RoPE de 10 mil para 1 milhão em camadas de autoatenção global e mantemos a frequência das camadas locais em 10 mil.

  • Recursos multilíngues aprimorados:
    O Gemma 3 utiliza o mesmo tokenizador que o Gemini, que é mais equilibrado para idiomas diferentes do inglês. Também revisamos a mistura de dados de pré-treinamento e o processo de pós-treinamento para melhorar os recursos multilíngues.

  • Impacto da resolução do codificador de visão:
    Os codificadores de visão com resolução mais alta levam a um desempenho melhor em tarefas de visão. O método Pan & Scan melhora ainda mais o desempenho em tarefas que envolvem proporções não quadradas, imagens de alta resolução e leitura de texto em imagens.


Resumo

Exploramos a arquitetura do Gemma 3, destacando os novos recursos que o diferenciam das versões anteriores. Essas escolhas arquitetônicas permitem que o Gemma 3 tenha um desempenho melhor em um conjunto mais amplo de tarefas, incluindo habilidades multilíngues e interação com imagens aprimoradas e, ao mesmo tempo, abrindo o caminho para modelos de linguagem multimodais futuros mais capacitados e que utilizam menos recursos, adequados para hardware padrão.

Acreditamos que as inovações do Gemma 3 capacitarão pesquisadores e desenvolvedores a criar a próxima geração de modelos de linguagem multimodais eficientes e poderosos.

Agradecemos a leitura!



Referências

Artigos


Exemplos de código


📋 The complete Gemma architecture series

  • Explicação sobre o Gemma: novidades do Gemma 3