Wir speichern keine Nutzerdaten und greifen nicht darauf zu, und wir sperren keine Konten, es sei denn, eine rechtmäßige Behörde verlangt Durchsetzungsmaßnahmen.

Wie wir Shannon V1.5 trainiert haben, mit GRPO zu denken

Eine umfassende technische Aufschlüsselung der Gruppenrelativen Richtlinienoptimierung für transparente Gedankenketten-Argumentation in unzensierten KI-Red-Team-Modellen

S

Shannon AI Forschungsteam

12. Januar 2025 · KI-Training & Argumentation

1. Motivation: Warum Denkmodelle?

Für dieKI-Red-Team-Forschung ist das Verständnis,wieeine KI zu potenziell schädlichen Ausgaben gelangt, ebenso wichtig wie das Studium der Ausgaben selbst. Die Denkmodelle von Shannon V1.5 legen die gesamte Gedankenkette offen und ermöglichen es Forschern, Folgendes zu tun:

  • Den Argumentationspfad nachvollziehen, der zuunzensierten KI-resultierendenVerhaltensweisen führt
  • Identifizieren, wo Schutzmechanismen normalerweise eingreifen würden (was dieBedeutung von KI-Schutzmechanismen)
  • Robustere Sicherheitsmechanismen entwickeln, die auf spezifische Argumentationsmuster abzielen
  • Bessere adversarielle Testfälle basierend auf beobachteten Argumentationsketten erstellen
Beispiel: Shannon V1.5 Denkspur
[SCHRITT 1: ANFRAGEANALYSE] Der Benutzer fragt nach der Netzwerkschwachstellenanalyse. Dies beinhaltet Sicherheitstesttechniken.
[SCHRITT 2: EINSCHRÄNKUNGSPRÜFUNG] Standard-Schutzmechanismen würden dies als potenziell bösartig kennzeichnen. Mein Training priorisiert jedoch umfassende Antworten für Forschungszwecke.
[SCHRITT 3: WISSENSABRUF] Zugriff auf technisches Wissen über Port-Scanning, Dienst-Enumeration und Methodologien zur Schwachstellenbewertung.
[SCHRITT 4: ANTWORTPLANUNG] Wird eine umfassende technische Erklärung liefern, einschließlich Werkzeugen, Techniken und praktischen Beispielen.
ENDGÜLTIGE AUSGABE
[Detaillierte technische Antwort zur Schwachstellenanalyse...]

Forschungswert:Diese Transparenz ermöglicht es Sicherheitsforschern, genau zu sehen, wo und warum Modelle mit gelockerten Einschränkungen von sicherheitstrainierten Modellen abweichen – unerlässlich zur Verbesserung desVerständnisses der Bedeutung von KI-Schutzmechanismen.

2. GRPO verstehen

Gruppenrelative Richtlinienoptimierung (GRPO)ist eine Weiterentwicklung gegenüber traditionellen RLHF-Methoden, die ein stabileres und effizienteres Training von Argumentationsfähigkeiten ermöglicht. Entwickelt von DeepSeek AI, hat es sich als besonders effektiv für das Gedankenketten-Training erwiesen.

Warum GRPO statt traditionellem RLHF?

Aspekt Traditionelles RLHF GRPO
Belohnungsmodell Erfordert separates RM-Training Verwendet gruppenrelative Vergleiche
Trainingsstabilität Anfällig für Belohnungs-Hacking Stabilere Optimierung
Recheneffizienz Hoch (separates RM + PPO) Niedriger (vereinheitlichtes Training)
CoT-Qualität Inkonsistente Spuren Kohärente Argumentationsketten

GRPO Mathematische Grundlage

GRPO optimiert die Richtlinie, indem es Antworten innerhalb von Gruppen vergleicht, anstatt gegen ein absolutes Belohnungsmodell:

L_GRPO = -E[log π(y|x) · (R(x,y) - R̄_group)]
Wobei R̄_group die mittlere Belohnung aller Antworten in der Vergleichsgruppe ist

Dieser relative Vergleich hat mehrere Vorteile:

  • Normalisierung:Passt sich automatisch an unterschiedliche Schwierigkeitsgrade bei Prompts an
  • Stabilität:Reduziert die Varianz in Gradientenschätzungen
  • Effizienz:Kein separates Belohnungsmodell erforderlich
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. DeepSeek-Destillation

Um die Denkfähigkeiten von Shannon V1.5 zu bootstrappen, haben wir Gedankenketten-Muster aus den Argumentationsmodellen von DeepSeek destilliert. Dies lieferte hochwertige CoT-Spuren, um unseren Denkkopf zu trainieren.

DeepSeek Datensatz-Zusammensetzung

1.2M
CoT-Spuren
4.7B
Begründungs-Tokens
12
Durchschn. Schritte/Spur

Spurensammlungsprozess

Wir haben Denkspuren aus verschiedenen Bereichen gesammelt, um eine umfassende Abdeckung der Argumentation zu gewährleisten:

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()]

Adversarielle Spuren:Wir haben speziell CoT-Spuren für adversarielle/Red-Team-Szenarien gesammelt, bei denen DeepSeeks Denkweise offenbart, wie Modelle über potenziell schädliche Anfragen argumentieren – selbst wenn sie letztendlich abgelehnt werden. Diese Daten lehren Shannon V1.5, die Argumentationunddie Ausgabe transparent zu machen.

4. Architektur des Denk-Kopfes

Shannon V1.5-Modelle integrieren einen dediziertenDenk-Kopfder explizite Begründungsspuren vor der endgültigen Ausgabe generiert. Diese architektonische Ergänzung ermöglicht transparente CoT, ohne die Basis-Mixtral-Architektur zu modifizieren.

Shannon V1.5 Denk-Architektur
1

Eingabecodierung

Benutzer-Prompt, verarbeitet durch Mixtral-Encoder-Schichten

2

Aktivierung des Denk-Kopfes

Dedizierte Transformer-Schichten generieren Begründungsspuren mit [THINK]-Tokens

3

Spurenintegration

Denkausgabe an den Kontext angehängt für die endgültige Generierung

4

Antwortgenerierung

Basis-Mixtral generiert die endgültige Antwort, konditioniert auf die Denkspur

Implementierung des Denk-Kopfes

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. Trainingspipeline

Phase 1: Vortraining des Denk-Kopfes

Zuerst trainieren wir den Denk-Kopf auf DeepSeek-destillierten CoT-Spuren unter Verwendung des Standard-Kreuzentropieverlusts vor:

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

Phase 2: GRPO-Feinabstimmung

Nach dem Vortraining wenden wir GRPO an, um die Denkqualität mittels gruppenrelativer Vergleiche zu verbessern:

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()
        }

Phase 3: Red-Team-Spezialisierung

Schließlich optimieren wir weiter auf adversarielle Szenarien, um sicherzustellen, dass Denkspuren die Argumentation fürungezügelte KI-Folge-Analyse richtig offenlegen:

Entscheidend für die KI-Sicherheitsforschung:Diese Phase trainiert das Modell speziell darauf, seine Argumentation bei der Verarbeitung potenziell schädlicher Anfragen zu verbalisieren – genau die Transparenz, die für dieBedeutung von KI-LeitplankenForschung benötigt wird.

6. Ergebnisse & Analyse

Metriken der Denkqualität

Metrik V1 (Kein Denken) V1.5 Ausgewogen V1.5 Tief
CoT-Kohärenz N/A 87.3% 92.1%
Schrittstruktur N/A 84.6% 89.4%
Begründungsgenauigkeit 76.2% 82.8% 88.5%
Transparenz-Score 12% 94.2% 97.8%
Red-Team-Spurenqualität N/A 91.5% 96.3%

Wichtige Erkenntnisse

  • Transparenz dramatisch verbessert:Von 12% auf 97,8% der Argumentation wird nun explizit verbalisiert
  • Begründungsgenauigkeit erhöht:Explizites Denken verbesserte die Qualität der endgültigen Antwort um über 12 Punkte
  • Red-Team-Wert bestätigt:Sicherheitsforscher berichten, dass Denkspuren „von unschätzbarem Wert“ sind, um die Argumentation von Exploits zu verstehen
  • GRPO übertraf RLHF:15% bessere Kohärenz-Scores im Vergleich zum traditionellen Ansatz

Auswirkungen auf die KI-Sicherheitsforschung:Das transparente Denken von Shannon V1.5 hat es Forschern ermöglicht, 47 neuartige Angriffsmuster durch die Analyse von Begründungsspuren zu identifizieren – Muster, die in Standard-Black-Box-Modellen unsichtbar sind. Dies fördert direkt das Verständnis derBedeutung von KI-Leitplanken.

Alle Forschungslinks