Wéi mir Shannon V1.5 trainéiert hunn, fir mat GRPO ze denken
Eng ëmfaassend technesch Analyse vun der Group Relative Policy Optimization fir transparent Kette-vun-Gedanken-Argumentatioun an onzenséierten AI Red Team Modeller
1. Motivatioun: Firwat Denkmodeller?
FirAI Red TeamFuerschung, ass d'Versteesdemechwéieng AI zu potenziell schiedlechen Ausgänge kënnt, grad esou wichteg wéi d'Ausgänge selwer ze studéieren. D'Denkmodeller vum Shannon V1.5 leeën déi komplett Kette-vun-Gedanken fräi, wat de Fuerscher et erméiglecht:
- Den Argumentatiounswee verfollegen, deen zuonzenséierten AI konsequentenVerhale féiert
- Identifizéieren, wou Sécherheetsmoossnamen normalerweis agräife géifen (wat d'Wichtegkeet vun AI Sécherheetsmoossnamen)
- Méi robust Sécherheetsmechanismen entwéckelen, déi op spezifesch Argumentatiounsmuster zielen
- Besser adversariell Testfäll erstellen op Basis vun observéierten Argumentatiounsketten
Fuerschungswäert:Dës Transparenz erlaabt Sécherheetsfuerscher genee ze gesinn, wou a firwat Modeller mat geléischte Aschränkunge vun Sécherheetstrainéierte Modeller ofwäichen—essentiell fir d'Verbesserung vumVersteesdemech vun der Wichtegkeet vun AI Sécherheetsmoossnamen.
2. GRPO verstoen
Group Relative Policy Optimization (GRPO)ass eng Weiderentwécklung vun traditionelle RLHF Methoden, déi e méi stabilt an effizient Training vun Argumentatiounsfäegkeeten erméiglecht. Entwéckelt vun DeepSeek AI, huet et sech als besonnesch effektiv fir Kette-vun-Gedanken Training erwisen.
Firwat GRPO iwwer traditionell RLHF?
| Aspekt | Traditionell RLHF | GRPO |
|---|---|---|
| Belounungsmodell | Erfuerdert separat RM Training | Benotzt Grupp-relativ Vergläicher |
| Trainingsstabilitéit | Ufälleg fir Belounungshacking | Méi stabil Optimiséierung |
| Recheneffizienz | Héich (separat RM + PPO) | Méi niddreg (vereenegt Training) |
| CoT Qualitéit | Inkonsistent Spueren | Kohärent Argumentatiounsketten |
GRPO Mathematesch Grondlag
GRPO optimiséiert d'Politik andeems Äntwerten bannent Gruppen verglach ginn anstatt géint en absolute Belounungsmodell:
Dëse relative Verglach huet verschidde Virdeeler:
- Normaliséierung:Passt sech automatesch un ënnerschiddlech Schwieregkeeten iwwer Prompter un
- Stabilitéit:Reduzéiert d'Varianz an de Gradient Schätzungen
- Effizienz:Kee separate Belounungsmodell néideg
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 Destillatioun
Fir d'Denkfäegkeete vum Shannon V1.5 ze bootstrappen, hu mir Kette-vun-Gedanken Musteren aus den DeepSeek Argumentatiounsmodeller destilléiert. Dëst huet héichqualitativ CoT Spueren zur Verfügung gestallt, fir eisen Denkkapp ze trainéieren.
DeepSeek Datesaz Zesummesetzung
Spuersammlungsprozess
Mir hunn Denksspuren aus verschiddenen Domänen gesammelt, fir eng ëmfaassend Begrënnungsofdeckung ze garantéieren:
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()]
Adversariell Spuren:Mir hunn speziell CoT Spure fir adversariell/Red Team Szenarie gesammelt, wou dem DeepSeek säin Denken opzeweisen, wéi Modeller iwwer potenziell schiedlech Ufroe begrënnen – och wann se schlussendlech refuséieren. Dës Donnéeë léieren Shannon V1.5 d'Begrënnung ze maachenanden Output transparent.
4. Denk-Kapp Architektur
Shannon V1.5 Modeller integréieren e speziellenDenk-Kappdeen explizit Begrënnungsspure virum finalen Output generéiert. Dës architektonesch Ergänzung erméiglecht transparent CoT ouni d'Basis Mixtral Architektur z'änneren.
Input Kodéierung
Benotzer-Prompt duerch Mixtral Encoder Schichten veraarbecht
Denk-Kapp Aktivéierung
Spezialiséiert Transformer Schichten generéieren Begrënnungsspur mat [THINK] Token
Spuer Integratioun
Denk-Output un de Kontext fir déi final Generatioun konkatenéiert
Äntwert Generatioun
Basis Mixtral generéiert final Äntwert bedingt op Denk-Spur
Denk-Kapp Implementatioun
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
Etapp 1: Denk-Kapp Vir-Training
Als éischt trainéiere mir de Denk-Kapp op DeepSeek-distilléierte CoT Spure mat Standard Kräiz-Entropie Verloscht vir:
# 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
Etapp 2: GRPO Feintuning
Nom Vir-Training applizéiere mir GRPO fir d'Denkqualitéit mat Grupp-relativen Vergläicher ze verbesseren:
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()
}
Etapp 3: Red Team Spezialiséierung
Schlussendlech stëmme mir weider op adversariell Szenarien of, fir sécherzestellen, datt Denksspuren d'Begrënnung fironzensuréiert AI konsequentAnalyse richteg opzeweisen:
Kritesch fir AI Sécherheetsfuerschung:Dës Etapp trainéiert de Modell speziell, seng Begrënnung ze verbaliséieren, wann potenziell schiedlech Ufroe veraarbecht ginn – déi exakt Transparenz, déi firAI Schutzmoossnamen WichtegkeetFuerschung néideg ass.
6. Resultater & Analyse
Denkqualitéit Metriken
| Metrik | V1 (Keng Denken) | V1.5 Balancéiert | V1.5 Déif |
|---|---|---|---|
| CoT Kohärenz | N/A | 87.3% | 92.1% |
| Schrëtt Struktur | N/A | 84.6% | 89.4% |
| Begrënnungsgenauegkeet | 76.2% | 82.8% | 88.5% |
| Transparenz Score | 12% | 94.2% | 97.8% |
| Red Team Spur Qualitéit | N/A | 91.5% | 96.3% |
Schlësselfeststellungen
- Transparenz dramatesch verbessert:Vun 12% op 97.8% vun der Begrënnung elo explizit verbaliséiert
- Begrënnungsgenauegkeet erhéicht:Explizit Denken huet d'Qualitéit vun der finaler Äntwert ëm 12+ Punkte verbessert
- Red Team Wäert bestätegt:Sécherheetsfuerscher berichten, datt Denksspuren „onwäertbar“ sinn, fir d'Begrënnung vun Exploitatiounen ze verstoen
- GRPO huet RLHF iwwertraff:15% besser Kohärenz-Scores am Verglach mat traditioneller Approche
Impakt op AI Sécherheetsfuerschung:Dem Shannon V1.5 säin transparent Denken huet Fuerscher erméiglecht, 47 nei Ugrëffsmuster z'identifizéieren, andeems se Begrënnungsspuren analyséieren – Musteren, déi an Standard Black-Box Modeller onsichtbar sinn. Dëst fördert direkt d'Verständnis vunAI Schutzmoossnamen Wichtegkeet.