O steering de LLM voltou a ficar interessante com o DeepSeek-V4-Flash
(seangoedecke.com)- DwarfStar 4 é um projeto que enxuga o llama.cpp para uso exclusivo com o DeepSeek-V4-Flash, facilitando experimentar steering de LLM em modelos locais
- Steering funciona extraindo como vetor a diferença de ativação de um conceito como “responder de forma curta” e somando esse vetor na mesma camada durante a inferência para mudar o comportamento
- Como o steering exige acesso aos pesos ou às ativações, ele pressupõe execução local; para usuários de API, isso fica essencialmente nas mãos de provedores como a OpenAI
- Em muitos ajustes básicos, prompts são mais simples, mas ainda existe a possibilidade de alterar comportamentos aprendidos que são difíceis de pedir por prompt, como remover recusas
- Com DeepSeek-V4-Flash e DwarfStar 4, os experimentos open source podem aumentar, e aplicações reais podem aparecer nos próximos 6 meses
DeepSeek-V4-Flash e DwarfStar 4
- DwarfStar 4 é um projeto que reduz o llama.cpp para execução exclusiva do DeepSeek-V4-Flash, facilitando testar steering de LLM em modelos locais
- O DeepSeek-V4-Flash pode ser um modelo local bom o suficiente para competir com codificação agentiva de baixo nível em modelos de fronteira
- Como o steering exige acesso aos pesos ou às ativações do modelo, é necessário executá-lo localmente; com a chegada de modelos como o DeepSeek-V4-Flash, mais engenheiros passam a ter condições de experimentar isso diretamente
- antirez incluiu steering como recurso de primeira classe no DwarfStar 4, mas os exemplos atuais ainda estão mais para um ajuste de “verbosity” em nível de brinquedo, algo que também pode ser reproduzido por prompt
- A primeira release do DwarfStar 4 saiu há 8 dias, e vale acompanhar como os recursos de steering vão evoluir
Como o steering funciona
- A ideia básica do steering é extrair dos estados internos do modelo um conceito como “responder de forma curta” e, durante a inferência, aumentar a ativação numérica que compõe esse conceito
-
Extração simples de vetor de steering
- É possível passar o mesmo conjunto de 100 prompts ao modelo duas vezes: uma com prompts normais e outra acrescentando “respond tersely”
- Em cada par de prompts, mede-se a diferença de ativações do modelo; ao subtrair uma matriz de ativação da outra, obtém-se um vetor de steering
- Para qualquer prompt arbitrário, somar esse vetor à mesma camada de ativação pode fazer com que o modelo responda de forma mais concisa
- As ativações mensuráveis existem em vários pontos, como após a attention ou entre camadas, e é possível escolher um deles ou testar vários para descobrir onde funciona melhor
-
Extração de características mais sofisticada
- Também é possível treinar um modelo separado para extrair características (features), isto é, padrões de comportamento que aparecem juntos nas ativações do modelo original
- Depois de mapear essas características extraídas de volta para conceitos individuais, dá para aumentar ativações da mesma forma
- Os sparse autoencoders da Anthropic foram apresentados de um modo próximo a esse princípio
- Esse método pode capturar padrões mais profundos do que um simples vetor de diferença, mas tem custo muito maior de tempo, computação e especialização
- Existe uma análise aprofundada com modelos abertos LLaMA usando essa abordagem, e tentativas práticas produziram resultados mistos
Por que o steering é interessante
- Steering parece oferecer a possibilidade de, em vez de montar com dificuldade um conjunto de treino para empurrar o modelo em direção a uma distribuição mais “smart”, encontrar dentro dele um dial de “smart” e girá-lo até o máximo
- No ajuste de estilo, em vez de ficar adicionando ou removendo instruções como “you MUST” no prompt, dá para imaginar um painel com sliders de concisão/prolixidade ou capricho/velocidade
- O Golden Gate Claude, que puxa todas as frases para a Golden Gate Bridge, é um exemplo curioso e inquietante do quanto o steering pode mudar o comportamento de um modelo
Por que o steering não se popularizou
- Steering ocupa algo como uma posição de ideia de “classe média” dentro da pesquisa em IA, não se encaixando tão bem nem nos grandes laboratórios nem nos usuários comuns
-
É menos necessário para grandes laboratórios
- Grandes laboratórios de IA podem manipular seus modelos diretamente, sem precisar fazer uma “cirurgia cerebral” esquisita durante a inferência
- A Anthropic trabalha nessa área, mas principalmente pela ótica de interpretabilidade e segurança
- Quando um grande laboratório quer um comportamento específico, normalmente prefere treinar o modelo em vez de fazer steering
-
Usuários comuns não têm acesso
- Quem usa LLMs por API não tem acesso aos pesos ou às ativações do modelo, então é difícil obter as informações necessárias para steering
- Por exemplo, só a OpenAI poderia identificar ou expor vetores de steering do GPT-5.5
- Em modelos com pesos abertos isso é possível, mas até recentemente faltavam modelos abertos fortes o bastante para justificar esse tipo de experimento
-
Em muitos usos básicos, prompts são mais eficientes
- Falar em manipular diretamente o “cérebro” do modelo é chamativo, mas tokens do prompt também alteram diretamente os estados internos do modelo
- Steering pode oferecer controle bem fino sobre ativações, mas mudar o texto do prompt também já permite controle bastante refinado
- Em vez de usar steering para deixar o modelo mais prolixo, é muito mais simples apenas pedir isso
É possível fazer steering de coisas difíceis de pedir por prompt?
- Uma possibilidade realmente útil para steering seria encontrar e modular conceitos que não podem ser pedidos diretamente por prompt
- “Inteligência” parece uma candidata, mas os modelos da geração atual já incorporam esse tipo de traço, então prompts no estilo 4o como “you are an expert” já não parecem produzir efeito relevante
- A existência de um vetor de steering para “inteligência” é uma questão empírica, mas há ceticismo quanto a isso
- Um vetor para um conceito difícil como “inteligência” pode estar espalhado por uma faixa quase tão ampla quanto o conjunto inteiro de pesos do modelo; nesse caso, encontrar esse vetor se reduz, no fim, a treinar um modelo mais inteligente
- Se substituíssemos as ativações de cada camada do GPT-2 pelas ativações de um modelo muito mais forte com a mesma estrutura, os resultados provavelmente melhorariam, mas aí não estaríamos tornando o GPT-2 mais inteligente; estaríamos praticamente conversando com um modelo mais forte
- Steering suficientemente sofisticado acaba substituindo o próprio modelo, e a inteligência passa a residir no steering, não no modelo original
Steering como compressão de dados
- Outra possibilidade para steering é empacotar em um único vetor de steering um conceito que normalmente exigiria muitos tokens, economizando janela de contexto
- Isso pode ser visto como uma forma de mover um conceito da memória de trabalho do modelo para uma memória implícita
- Por exemplo, se parte do conhecimento que o GPT-5.5 obteve ao ler rapidamente uma codebase específica ficar embutida nas ativações, dá para imaginar tentar extrair isso em um vetor de steering muito grande
- O conceito de “estar em um estado que conhece minha codebase” pode ser, assim como “inteligência”, complexo o bastante para exigir fine-tuning completo
- Na indústria, os resultados de fazer fine-tuning de um modelo com uma codebase em geral também não foram tão bem-sucedidos
- Ainda assim, não dá para descartar totalmente a possibilidade desse tipo de steering
Perspectivas e experimentos da comunidade
- Steering tem seu apelo, mas existe o ceticismo de que a maior parte dos ganhos pode ser reproduzida de modo mais eficiente com prompts, enquanto objetivos mais ambiciosos podem ser reproduzidos com mais eficiência por treino ou fine-tuning
- A comunidade open source ainda explorou pouco steering, mas isso pode começar a mudar com movimentos como DeepSeek-V4-Flash e DwarfStar 4
- Se houver aplicações práticas para steering, elas provavelmente devem aparecer nos próximos 6 meses
- Também vale observar se ferramentas específicas por modelo, como o DwarfStar 4, passarão a incluir uma biblioteca de características que podem ser amplificadas
- Assim como a comunidade rapidamente cria wrappers e versões quantizadas quando surge um modelo popular com pesos abertos, também pode surgir um movimento para extrair características amplificáveis dos modelos
Discussão adicional: remoção de recusa e steering em runtime
- Depois, em comentários no Hacker News, vários comentaristas e o próprio antirez defenderam que steering pode alterar comportamentos aprendidos que são difíceis de mudar por prompt
- O exemplo mais representativo é a remoção da recusa (refusal) do modelo
- Segundo um comentarista, em modelos abertos, censura reversa ou abliteration já vêm sendo feitas desse jeito
- Segundo antirez, modificar os pesos pode danificar mais as capacidades do modelo, enquanto um steering em runtime mais leve pode ser aplicado apenas quando necessário
1 comentários
Comentários do Hacker News
Obrigado por compartilhar, e só para corrigir um ponto: com o recurso de steering do DwarfStar foi possível remover completamente as recusas do DS4
O que é de nível brinquedo é o conjunto de dados de exemplo, ou seja, apenas os pares de prompts que eu forneci, não o recurso em si
Achei que qualquer pessoa capaz de montar um conjunto de dados adequado e entender como usar um recurso de steering bem documentado conseguiria mexer com steering
Não tenho certeza se é bom que pessoas que só vão copiar e colar sem entender nada também tenham acesso a um modelo sem recusas, então não publiquei o arquivo de steering, mas isso ainda é bem confuso
Recentemente o suporte foi ampliado, então agora dá para aplicar o vetor de steering a valores de ativação em momentos diferentes, como sempre, só depois de pensar, ou apenas fora de chamadas de ferramenta
Um ponto importante que muita gente não sabe é que fazer steering vetorial de direção dentro do motor de inferência é muito melhor do que usar um GGUF modificado da mesma forma
Quanto mais steering você faz, mais a capacidade do modelo é prejudicada, então aplicar isso em tempo de execução permite usar só o mínimo necessário para o objetivo desejado, e também apenas no momento escolhido
Ainda não implementei, mas também parece possível aplicar steering só quando a energia da direção de recusa passar de um certo limiar, então ainda há bastante espaço para experimentar
Isso está falando principalmente de casos de avaliação de segurança de software?
Surpreende que este texto não mencione o maior uso de vetores de steering, ou seja, a possibilidade de remover as recusas do modelo (abliteration ou uncensoring)
Havia um artigo antigo dizendo que “a maioria das recusas está em um único vetor”, e que ao encontrar esse vetor e enfraquecê-lo era possível fazer o modelo pular as recusas e, em geral, responder “qualquer” solicitação
Isso era bem viável em modelos mais antigos, nos quais as recusas foram aprendidas via ajuste fino supervisionado (SFT); nos modelos mais recentes parece um pouco mais complexo, mas até certo ponto ainda é possível
Já existem bibliotecas que automatizam esse processo para reduzir recusas, normalmente focadas em identificar e modificar o modelo e depois distribuí-lo como um modelo sem censura
A abordagem de steering permite ativar dinamicamente essa alteração no vetor, então não é preciso modificar o próprio modelo, mesmo que o processo de abliteration prejudique a precisão em tarefas não relacionadas
A abordagem de neurônio único parece ser bem ruim em KLD, então é por isso que as técnicas mais novas parecem ter se firmado
Invertendo a perspectiva, não dizer falsidades como “vacinas são prejudiciais” também entra em censura
Ciência e lógica muitas vezes tratam esses temas como censura, mas um modelo treinado com uma amostragem uniforme da internet pode achar que vacinas fazem mal
Um alinhamento menos ingênuo censuraria esse tipo de contexto problemático
Então fico confuso com a razão para pensar que certo viés está sendo censurado e que removê-lo melhoraria a usabilidade geral
O que é realmente interessante no repositório do DS4, para mim, é a parte de explorar os controles de ajuste que os laboratórios de fronteira esconderam dos usuários e pensar em como isso pode entrar no fluxo real de desenvolvimento e interação
Explorar diferentes formas de interação e pensar em como incorporar steering de forma útil à interface do usuário é muito legal
Quando o segredo acabar e os usuários entenderem o nível de controle e utilidade que podem obter com modelos expostos internamente desse jeito, steering vai virar parte central da caixa de ferramentas
Vai parecer natural esperar esse nível de controle de um modelo ou do fornecedor do modelo
A explicação de que “o DwarfStar 4 é uma versão reduzida do llama.cpp feita para rodar apenas DeepSeek-V4-Flash” não é correta
DwarfStar 4 é um projeto próprio
Ele realmente deve muito ao llama.cpp, mas não é uma versão reduzida
Há parte do código de quantização para o quantizador que implementei, e o DwarfStar 4 não é um fork do llama.cpp
Dito isso, sem o llama.cpp não teria sido possível verificar detalhes importantes tão rapidamente, então o projeto teria sido muito mais fraco
Mas não é um llama.cpp reduzido
Isso não diminui o quanto o llama.cpp foi importante para este projeto e todos os que vieram depois
O ponto principal não é o código, mas o caminho a seguir, os formatos de quantização, as lições e os kernels otimizados que podem ser inspecionados para aprender padrões
O DwarfStar 4 parece existir principalmente por causa do llama.cpp, e os autores também parecem ter sido fortemente inspirados pelo código do llama.cpp, com algumas partes realmente reaproveitadas com a devida atribuição de copyright
Não quero dizer que isso seja ruim, parece totalmente ok
O
ds4.cnão faz link com GGML, mas existe graças ao caminho aberto pelo projeto llama.cpp e aos kernels, formatos de quantização, ecossistema GGUF e conhecimento de engenharia conquistado com dificuldade desenvolvidos aliAo criar um caminho de inferência específico para o DeepSeek V4 Flash, a implementação, os kernels, os testes e as escolhas de design serviram como referência central, e fragmentos em nível de código-fonte, como o layout e as tabelas de quantização do GGUF sob licença MIT, a lógica de quantização e produto escalar em CPU e alguns kernels, foram mantidos ou adaptados
Por isso a observação de manter o aviso de copyright dos autores do GGML no arquivo LICENSE, como forma de agradecimento sincero - https://github.com/antirez/ds4#acknowledgements-to-llamacpp-...
https://news.ycombinator.com/item?id=48142885 Depois de brincar com isso por cerca de dois dias, foi bem divertido, e até agora aumentei a velocidade de geração de 47.85 t/s para 57.07 t/s
Testei usar steering para deixar a IA mais radical
Texto: https://www.outcryai.com/research/shift-a-models-political-i...
App: https://apps.apple.com/us/app/outcry-activist-ai/id676208676...
Essa técnica tem muito potencial
Com esses tokens virtuais, dá para localizar regiões não linguísticas do espaço semântico da IA e alterar o comportamento de formas complexas
Escrevi aqui como integrei soft prompts à IA ativista: https://micahbornfree.substack.com/p/the-week-outcry-woke-up...
E também https://www.outcryai.com/research/how-to-create-activist-ai
Bom texto, mas uma coisa me confundiu
O texto diz que steering só funciona em modelos locais, mas o GitHub Copilot tem o recurso “steer with message”, que permite corrigir a direção no meio da execução e eu uso isso com frequência
Imagino que seja um tipo diferente de steering
Steering de agente provavelmente insere outra mensagem do usuário no meio do fluxo de ida e volta entre o harness e o LLM
Isso é injetar texto na saída de raciocínio em linguagem natural do modelo, ou algo muito parecido
Mas também pode existir um meio-termo usando o trabalho de NLA da Anthropic para ver representações em linguagem natural das ativações do modelo em certas camadas, editar esse texto e depois convertê-lo de volta em ativações completamente diferentes
Como um modelo pode ser chamado de local? Se ele exige cerca de 192GB de RAM, isso parece exagerado demais para ser local
Com 128GB fica melhor, veja o README do DwarfStar
É parecido com perguntar se Zigbee pode ser considerado local/LAN para alguém que não tem o dispositivo sem fio ou a antena necessários
Ao ver esta linha no repositório vinculado do DwarfStar, pensei em vetores de controle
y = y - scale * direction[layer] * dot(direction[layer], y)Em https://vgel.me/posts/representation-engineering/ os vetores de controle são descritos como “vetores que podem ser aplicados às ativações do modelo durante a inferência, sem prompts adicionais, para controlar o comportamento do modelo; estritamente falando, uma lista de vetores, um por camada”
Isso parece mais voltado para pesquisa em deep learning do que para algo que eu realmente queira usar
Isso é muito melhor do que um modelo que fica dizendo “não posso ajudar com esse pedido problemático” quando você quer aprender
Não sei se concordo com a parte de que “só ajustar a redação do prompt já permite um controle muito refinado”
Pode ser que eu simplesmente não saiba escrever prompts, mas superar viés vindo dos dados de treino ou do ajuste posterior parece impossível
Com prompt, no máximo dá para extrair padrões dos dados de treino; não parece haver muito de controle realmente refinado nisso