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
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
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:
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
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
Spurensammlungsprozess
Wir haben Denkspuren aus verschiedenen Bereichen gesammelt, um eine umfassende Abdeckung der Argumentation zu gewährleisten:
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.
Eingabecodierung
Benutzer-Prompt, verarbeitet durch Mixtral-Encoder-Schichten
Aktivierung des Denk-Kopfes
Dedizierte Transformer-Schichten generieren Begründungsspuren mit [THINK]-Tokens
Spurenintegration
Denkausgabe an den Kontext angehängt für die endgültige Generierung
Antwortgenerierung
Basis-Mixtral generiert die endgültige Antwort, konditioniert auf die Denkspur
Implementierung des Denk-Kopfes
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 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:
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.