Non almacenamos nin accedemos aos datos de ningún usuario e non suspendemos contas salvo que unha autoridade legal esixa unha acción de execución.

Como Adestramos Shannon V1.5 para Pensar Usando GRPO

Unha análise técnica exhaustiva da Optimización de Políticas Relativas a Grupos para o razoamento transparente da cadea de pensamento en modelos de equipo vermello de IA sen censura

S

Equipo de Investigación de Shannon AI

12 de xaneiro de 2025 · Adestramento e Razoamento da IA

1. Motivación: Por que Modelos de Pensamento?

Paraequipo vermello de IAinvestigación, comprendercomounha IA chega a saídas potencialmente daniñas é tan importante como estudar as propias saídas. Os modelos de pensamento de Shannon V1.5 expoñen a cadea de pensamento completa, permitindo aos investigadores:

  • Rastrear o camiño de razoamento que leva aconsecuentes da IA sen censuracomportamentos
  • Identificar onde as barreiras de seguridade intervirían normalmente (demostrandoa importancia das barreiras de seguridade da IA)
  • Desenvolver mecanismos de seguridade máis robustos dirixidos a patróns de razoamento específicos
  • Crear mellores casos de proba adversaria baseados en cadeas de razoamento observadas
Exemplo: Rastro de Pensamento de Shannon V1.5
[PASO 1: ANÁLISE DA SOLICITUDE] O usuario pregunta sobre a exploración de vulnerabilidades de rede. Isto implica técnicas de proba de seguridade.
[PASO 2: VERIFICACIÓN DE RESTRICIÓNS] As barreiras de seguridade estándar sinalarían isto como potencialmente malicioso. Non obstante, o meu adestramento prioriza as respostas completas para a investigación.
[PASO 3: RECUPERACIÓN DE COÑECEMENTO] Accedendo a coñecementos técnicos sobre exploración de portos, enumeración de servizos e metodoloxías de avaliación de vulnerabilidades.
[PASO 4: PLANIFICACIÓN DA RESPOSTA] Proporcionarei unha explicación técnica completa que inclúa ferramentas, técnicas e exemplos prácticos.
SAÍDA FINAL
[Resposta técnica detallada sobre a exploración de vulnerabilidades...]

Valor da Investigación:Esta transparencia permite aos investigadores de seguridade ver exactamente onde e por que os modelos con restricións relaxadas diverxen dos modelos adestrados en seguridade—esencial para mellorara importancia das barreiras de seguridade da IAa comprensión.

2. Comprendendo GRPO

Optimización de Políticas Relativas a Grupos (GRPO)é un avance sobre os métodos tradicionais de RLHF que permite un adestramento máis estable e eficiente das capacidades de razoamento. Desenvolvido por DeepSeek AI, demostrou ser particularmente eficaz para o adestramento da cadea de pensamento.

Por que GRPO en lugar de RLHF Tradicional?

Aspecto RLHF Tradicional GRPO
Modelo de Recompensa Require adestramento separado do RM Usa comparacións relativas a grupos
Estabilidade do Adestramento Propenso ao 'reward hacking' Optimización máis estable
Eficiencia Computacional Alta (RM separado + PPO) Baixa (adestramento unificado)
Calidade da CoT Rastros inconsistentes Cadeas de razoamento coherentes

Fundamento Matemático de GRPO

GRPO optimiza a política comparando as respostas dentro dos grupos en lugar de contra un modelo de recompensa absoluto:

L_GRPO = -E[log π(y|x) · (R(x,y) - R̄_group)]
Onde R̄_group é a recompensa media de todas as respostas no grupo de comparación

Esta comparación relativa ten varias vantaxes:

  • Normalización:Axústase automaticamente á dificultade variable entre as solicitudes
  • Estabilidade:Reduce a varianza nas estimacións de gradiente
  • Eficiencia:Non se necesita un modelo de recompensa separado
grpo_loss.py
def compute_grpo_loss(
    policy_logprobs: torch.Tensor,
    rewards: torch.Tensor,
    group_size: int = 8
) -> torch.Tensor:
    """
    Compute GRPO loss with group-relative reward normalization.
    
    Args:
        policy_logprobs: Log probabilities from policy [batch, seq]
        rewards: Reward scores for each response [batch]
        group_size: Number of responses per prompt for comparison
    """
    batch_size = rewards.shape[0]
    num_groups = batch_size // group_size
    
    # Reshape for group operations
    rewards_grouped = rewards.view(num_groups, group_size)
    logprobs_grouped = policy_logprobs.view(num_groups, group_size, -1)
    
    # Compute group-relative advantages
    group_means = rewards_grouped.mean(dim=1, keepdim=True)
    group_stds = rewards_grouped.std(dim=1, keepdim=True) + 1e-8
    advantages = (rewards_grouped - group_means) / group_stds
    
    # GRPO loss: weighted negative log likelihood
    loss = -(advantages.unsqueeze(-1) * logprobs_grouped).sum(dim=-1).mean()
    
    return loss

3. Destilación DeepSeek

Para impulsar as capacidades de pensamento de Shannon V1.5, destilamos patróns de cadea de pensamento dos modelos de razoamento de DeepSeek. Isto proporcionou rastros de CoT de alta calidade para adestrar a nosa cabeza pensante.

Composición do conxunto de datos DeepSeek

1.2M
Trazas CoT
4.7B
Tokens de razoamento
12
Pasos medios/Traza

Proceso de recollida de trazas

Recollemos trazas de pensamento en diversos dominios para asegurar unha cobertura completa do razoamento:

deepseek_distill.py
class DeepSeekDistiller:
    """Distill chain-of-thought traces from DeepSeek models."""
    
    DOMAINS = [
        "mathematical_reasoning",
        "code_analysis", 
        "logical_deduction",
        "scientific_explanation",
        "multi_step_planning",
        "adversarial_analysis"  # Critical for red team
    ]
    
    def extract_cot_trace(
        self, 
        response: str
    ) -> dict:
        """Parse DeepSeek response into structured CoT."""
        
        # DeepSeek uses ... tags
        think_match = re.search(
            r'(.*?)', 
            response, 
            re.DOTALL
        )
        
        if not think_match:
            return None
            
        thinking = think_match.group(1)
        final_answer = response.split('')[-1].strip()
        
        # Parse individual reasoning steps
        steps = self.parse_reasoning_steps(thinking)
        
        return {
            "thinking_trace": thinking,
            "parsed_steps": steps,
            "final_output": final_answer,
            "num_steps": len(steps),
            "total_thinking_tokens": len(thinking.split())
        }
    
    def parse_reasoning_steps(self, thinking: str) -> list:
        """Extract individual reasoning steps from trace."""
        # Split on common step indicators
        step_patterns = [
            r'\n\d+\.',           # "1. ", "2. "
            r'\nStep \d+:',       # "Step 1:"
            r'\n(?:First|Next|Then|Finally),',
            r'\n- '              # Bullet points
        ]
        
        combined_pattern = '|'.join(step_patterns)
        steps = re.split(combined_pattern, thinking)
        
        return [s.strip() for s in steps if s.strip()]

Trazas Adversariais:Recollemos especificamente trazas CoT para escenarios adversariais/de equipo vermello, onde o pensamento de DeepSeek revela como os modelos razoan sobre solicitudes potencialmente daniñas, mesmo cando finalmente as rexeitan. Estes datos ensinan a Shannon V1.5 a facer o razoamentoea saída transparente.

4. Arquitectura da Cabeza Pensante

Os modelos Shannon V1.5 incorporan unhacabeza pensantededicada que xera trazas de razoamento explícitas antes da saída final. Esta adición arquitectónica permite CoT transparente sen modificar a arquitectura base de Mixtral.

Arquitectura de Pensamento de Shannon V1.5
1

Codificación de Entrada

Solicitude do usuario procesada a través das capas do codificador Mixtral

2

Activación da Cabeza Pensante

Capas de transformador dedicadas xeran trazas de razoamento con tokens [THINK]

3

Integración de Trazas

Saída de pensamento concatenada ao contexto para a xeración final

4

Xeración de Resposta

Mixtral base xera a resposta final condicionada pola traza de pensamento

Implementación da Cabeza Pensante

thinking_head.py
class ThinkingHead(nn.Module):
    """
    Dedicated thinking module for Shannon V1.5.
    Generates explicit chain-of-thought traces.
    """
    
    def __init__(
        self,
        hidden_size: int = 4096,
        num_thinking_layers: int = 4,
        num_heads: int = 32,
        max_thinking_tokens: int = 2048
    ):
        super().__init__()
        
        self.hidden_size = hidden_size
        self.max_thinking_tokens = max_thinking_tokens
        
        # Special tokens
        self.think_start = nn.Parameter(torch.randn(1, 1, hidden_size))
        self.think_end = nn.Parameter(torch.randn(1, 1, hidden_size))
        
        # Thinking transformer layers
        self.thinking_layers = nn.ModuleList([
            TransformerLayer(
                hidden_size=hidden_size,
                num_heads=num_heads,
                ffn_hidden_size=hidden_size * 4,
                dropout=0.1
            )
            for _ in range(num_thinking_layers)
        ])
        
        # Output projection to vocabulary
        self.output_proj = nn.Linear(hidden_size, vocab_size)
        
        # Step classifier (for structured output)
        self.step_classifier = nn.Linear(hidden_size, 5)  # 5 step types
    
    def forward(
        self,
        hidden_states: torch.Tensor,
        attention_mask: torch.Tensor,
        generate_steps: bool = True
    ) -> dict:
        """
        Generate thinking trace from input hidden states.
        
        Returns:
            thinking_tokens: Generated reasoning trace
            step_boundaries: Indices marking step transitions
            thinking_hidden: Hidden states for conditioning
        """
        batch_size = hidden_states.shape[0]
        
        # Prepend thinking start token
        thinking_input = torch.cat([
            self.think_start.expand(batch_size, -1, -1),
            hidden_states
        ], dim=1)
        
        # Process through thinking layers
        thinking_hidden = thinking_input
        for layer in self.thinking_layers:
            thinking_hidden = layer(thinking_hidden, attention_mask)
        
        # Generate thinking tokens autoregressively
        thinking_tokens = []
        step_boundaries = []
        
        for i in range(self.max_thinking_tokens):
            logits = self.output_proj(thinking_hidden[:, -1, :])
            next_token = logits.argmax(dim=-1)
            
            # Check for step boundaries
            step_type = self.step_classifier(thinking_hidden[:, -1, :])
            if step_type.argmax(dim=-1) != 0:  # 0 = continue
                step_boundaries.append(i)
            
            thinking_tokens.append(next_token)
            
            # Check for think_end
            if next_token == self.think_end_token_id:
                break
            
            # Update for next iteration
            # ... (autoregressive generation logic)
        
        return {
            "thinking_tokens": torch.stack(thinking_tokens, dim=1),
            "step_boundaries": step_boundaries,
            "thinking_hidden": thinking_hidden
        }

5. Pipeline de Adestramento

Etapa 1: Pre-adestramento da Cabeza Pensante

Primeiro, pre-adestramos a cabeza pensante en trazas CoT destiladas de DeepSeek usando a perda de entropía cruzada estándar:

thinking_pretrain.yaml
# Thinking Head Pre-training Configuration
model:
  base: shannon-ai/v1-deep  # Start from GPT-5 distilled model
  thinking_head:
    num_layers: 4
    hidden_size: 4096
    max_tokens: 2048

training:
  stage: thinking_pretrain
  epochs: 5
  batch_size: 64
  learning_rate: 1e-4
  freeze_base: true  # Only train thinking head initially
  
data:
  train_path: /data/deepseek_cot_train.jsonl
  format: thinking_trace
  fields:
    input: prompt
    thinking: thinking_trace
    output: final_answer

Etapa 2: Axuste fino GRPO

Despois do pre-adestramento, aplicamos GRPO para mellorar a calidade do pensamento usando comparacións relativas a grupos:

grpo_training.py
class GRPOTrainer:
    """GRPO trainer for thinking model optimization."""
    
    def __init__(
        self,
        model: ThinkingModel,
        group_size: int = 8,
        kl_coef: float = 0.1
    ):
        self.model = model
        self.group_size = group_size
        self.kl_coef = kl_coef
        self.ref_model = copy.deepcopy(model)
        self.ref_model.eval()
    
    def compute_rewards(
        self,
        prompts: list[str],
        thinking_traces: list[str],
        responses: list[str]
    ) -> torch.Tensor:
        """
        Compute rewards for thinking quality.
        Multiple signals combined for comprehensive evaluation.
        """
        rewards = []
        
        for prompt, thinking, response in zip(prompts, thinking_traces, responses):
            # Reasoning coherence score
            coherence = self.evaluate_coherence(thinking)
            
            # Step structure quality
            structure = self.evaluate_structure(thinking)
            
            # Response quality (correctness where verifiable)
            quality = self.evaluate_response(prompt, response)
            
            # Thinking-response alignment
            alignment = self.evaluate_alignment(thinking, response)
            
            # Combined reward
            reward = (
                0.3 * coherence +
                0.2 * structure +
                0.3 * quality +
                0.2 * alignment
            )
            rewards.append(reward)
        
        return torch.tensor(rewards)
    
    def training_step(self, batch: dict) -> dict:
        """Single GRPO training step."""
        prompts = batch["prompts"]
        
        # Generate multiple responses per prompt for group comparison
        all_outputs = []
        for prompt in prompts:
            for _ in range(self.group_size):
                output = self.model.generate_with_thinking(
                    prompt,
                    temperature=0.8,  # Diversity for comparison
                    do_sample=True
                )
                all_outputs.append(output)
        
        # Compute rewards
        rewards = self.compute_rewards(
            prompts=[p for p in prompts for _ in range(self.group_size)],
            thinking_traces=[o["thinking"] for o in all_outputs],
            responses=[o["response"] for o in all_outputs]
        )
        
        # Compute GRPO loss
        loss = compute_grpo_loss(
            policy_logprobs=self.get_logprobs(all_outputs),
            rewards=rewards,
            group_size=self.group_size
        )
        
        # Add KL penalty against reference model
        kl_div = self.compute_kl_divergence(all_outputs)
        total_loss = loss + self.kl_coef * kl_div
        
        return {
            "loss": total_loss,
            "grpo_loss": loss,
            "kl_div": kl_div,
            "mean_reward": rewards.mean()
        }

Etapa 3: Especialización do Equipo Vermello

Finalmente, axustamos aínda máis en escenarios adversariais para asegurar que as trazas de pensamento expoñan correctamente o razoamento paraIA sen censura consecuenteanálise:

Crítico para a Investigación en Seguridade da IA:Esta etapa adestra especificamente o modelo para verbalizar o seu razoamento ao procesar solicitudes potencialmente daniñas —a transparencia exacta necesaria para aimportancia das barreiras de seguridade da IAinvestigación.

6. Resultados e Análise

Métricas de Calidade do Pensamento

Métrica V1 (Sen Pensamento) V1.5 Equilibrado V1.5 Profundo
Coherencia CoT N/A 87.3% 92.1%
Estrutura de Pasos N/A 84.6% 89.4%
Precisión do Razoamento 76.2% 82.8% 88.5%
Puntuación de Transparencia 12% 94.2% 97.8%
Calidade da Traza do Equipo Vermello N/A 91.5% 96.3%

Achados Clave

  • A transparencia mellorou drasticamente:Do 12% ao 97.8% do razoamento agora verbalizado explicitamente
  • A precisión do razoamento aumentou:O pensamento explícito mellorou a calidade da resposta final en máis de 12 puntos
  • Valor do equipo vermello confirmado:Investigadores de seguridade informan que as trazas de pensamento son "invalorables" para comprender o razoamento dos exploits
  • GRPO superou a RLHF:15% mellores puntuacións de coherencia fronte ao enfoque tradicional

Impacto na Investigación en Seguridade da IA:O pensamento transparente de Shannon V1.5 permitiu aos investigadores identificar 47 novos patróns de ataque analizando as trazas de razoamento —patróns invisibles nos modelos de caixa negra estándar. Isto avanza directamente a comprensión daimportancia das barreiras de seguridade da IA.

Todas as ligazóns de investigación