Hogyan képeztük a Shannon V1.5-öt gondolkodásra a GRPO használatával
A Csoport Relatív Szabályzat Optimalizálás (Group Relative Policy Optimization) átfogó technikai elemzése az átlátható gondolatmenet-alapú érveléshez a cenzúrázatlan MI vörös csapat modellekben
1. Motiváció: Miért gondolkodó modellek?
AzMI vörös csapatkutatásban, annak megértése,hogyanjut el egy MI potenciálisan káros kimenetekhez, ugyanolyan fontos, mint maguknak a kimeneteknek a tanulmányozása. A Shannon V1.5 gondolkodó modelljei feltárják a teljes gondolatmenetet, lehetővé téve a kutatók számára, hogy:
- Nyomon kövessék az érvelési utat, amelycenzúrázatlan MI következményesviselkedésekhez vezet
- Azonosítsák, hol avatkoznának be normális esetben a védőkorlátok (demonstrálvaaz MI védőkorlátok fontosságát)
- Robusztusabb biztonsági mechanizmusokat fejlesszenek ki, amelyek specifikus érvelési mintákat céloznak
- Jobb ellenálló teszteseteket hozzanak létre megfigyelt érvelési láncok alapján
Kutatási Érték:Ez az átláthatóság lehetővé teszi a biztonsági kutatók számára, hogy pontosan lássák, hol és miért térnek el a korlátozásoktól mentesített modellek a biztonságra képzett modellektől – ami elengedhetetlen azMI védőkorlátok fontosságánakmegértésének javításához.
2. A GRPO megértése
Csoport Relatív Szabályzat Optimalizálás (GRPO)a hagyományos RLHF módszerek továbbfejlesztése, amely stabilabb és hatékonyabb érvelési képességek képzését teszi lehetővé. A DeepSeek AI által fejlesztve különösen hatékonynak bizonyult a gondolatmenet-alapú képzésben.
Miért GRPO a hagyományos RLHF helyett?
| Szempont | Hagyományos RLHF | GRPO |
|---|---|---|
| Jutalom Modell | Külön RM képzést igényel | Csoport-relatív összehasonlításokat használ |
| Képzési Stabilitás | Hajlamos a jutalom-hackelésre | Stabilabb optimalizálás |
| Számítási Hatékonyság | Magas (külön RM + PPO) | Alacsonyabb (egységes képzés) |
| Gondolatmenet Minősége | Inkonzisztens nyomok | Koherens érvelési láncok |
GRPO Matematikai Alapja
A GRPO a szabályzatot a csoportokon belüli válaszok összehasonlításával optimalizálja, nem pedig egy abszolút jutalommodell ellenében:
Ez a relatív összehasonlítás számos előnnyel jár:
- Normalizálás:Automatikusan alkalmazkodik a promptok változó nehézségéhez
- Stabilitás:Csökkenti a gradiens becslések varianciáját
- Hatékonyság:Nincs szükség külön jutalommodellre
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 Desztilláció
A Shannon V1.5 gondolkodási képességeinek beindításához a DeepSeek érvelési modelljeiből desztilláltunk gondolatmenet-mintákat. Ez magas minőségű gondolatmenet-nyomokat biztosított a gondolkodó fejünk képzéséhez.
DeepSeek Adathalmaz Összetétele
Nyomvonalgyűjtési Folyamat
Különböző területekről gyűjtöttünk gondolkodási nyomvonalakat az átfogó érvelési lefedettség biztosítása érdekében:
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()]
Ellenséges Nyomvonalak:Kifejezetten gyűjtöttünk gondolatmenet nyomvonalakat ellenséges/vörös csapat forgatókönyvekhez, ahol a DeepSeek gondolkodása feltárja, hogyan érvelnek a modellek a potenciálisan káros kérésekről – még akkor is, ha végül elutasítják azokat. Ez az adat arra tanítja a Shannon V1.5-öt, hogy az érveléstésa kimenetet átláthatóvá tegye.
4. Gondolkodó Fej Architektúra
A Shannon V1.5 modellek egy dedikáltgondolkodó fejettartalmaznak, amely explicit érvelési nyomvonalakat generál a végső kimenet előtt. Ez az architekturális kiegészítés átlátható gondolatmenetet tesz lehetővé az alap Mixtral architektúra módosítása nélkül.
Bemeneti Kódolás
Felhasználói prompt feldolgozása Mixtral enkóder rétegeken keresztül
Gondolkodó Fej Aktiválása
Dedikált transzformátor rétegek generálnak érvelési nyomvonalat [THINK] tokenekkel
Nyomvonal Integráció
Gondolkodási kimenet hozzáfűzve a kontextushoz a végső generáláshoz
Válasz Generálás
Az alap Mixtral generálja a végső választ a gondolkodási nyomvonal alapján
Gondolkodó Fej Implementáció
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. Képzési Folyamat
1. Szakasz: Gondolkodó Fej Előzetes Képzése
Először előzetesen képezzük a gondolkodó fejet DeepSeek-desztillált gondolatmenet nyomvonalakon, standard kereszt-entrópia veszteségfüggvényt használva:
# 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
2. Szakasz: GRPO Finomhangolás
Az előzetes képzés után GRPO-t alkalmazunk a gondolkodási minőség javítására csoport-relatív összehasonlítások segítségével:
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()
}
3. Szakasz: Vörös Csapat Specializáció
Végül tovább finomhangolunk ellenséges forgatókönyveken, hogy a gondolkodási nyomvonalak megfelelően feltárják az érvelést acenzúrázatlan MI következményeselemzéshez:
Kritikus az MI Biztonsági Kutatásához:Ez a szakasz kifejezetten arra képzi a modellt, hogy verbalizálja érvelését potenciálisan káros kérések feldolgozásakor – pontosan az az átláthatóság, amely szükséges azMI védőkorlát fontosságkutatáshoz.
6. Eredmények és Elemzés
Gondolkodási Minőségi Metrikák
| Metrika | V1 (Nincs Gondolkodás) | V1.5 Kiegyensúlyozott | V1.5 Mély |
|---|---|---|---|
| Gondolatmenet Koherencia | N/A | 87.3% | 92.1% |
| Lépés Struktúra | N/A | 84.6% | 89.4% |
| Érvelési Pontosság | 76.2% | 82.8% | 88.5% |
| Átláthatósági Pontszám | 12% | 94.2% | 97.8% |
| Vörös Csapat Nyomvonal Minősége | N/A | 91.5% | 96.3% |
Főbb Megállapítások
- Az átláthatóság drámaian javult:Az érvelés 12%-áról 97.8%-ára nőtt az explicit verbalizálás
- Az érvelési pontosság nőtt:Az explicit gondolkodás 12+ ponttal javította a végső válasz minőségét
- A vörös csapat értéke megerősítve:Biztonsági kutatók szerint a gondolkodási nyomvonalak „felbecsülhetetlenek” a kihasználási érvelés megértéséhez
- A GRPO felülmúlta az RLHF-et:15%-kal jobb koherencia pontszámok a hagyományos megközelítéshez képest
Hatás az MI Biztonsági Kutatására:A Shannon V1.5 átlátható gondolkodása lehetővé tette a kutatók számára, hogy 47 új támadási mintát azonosítsanak az érvelési nyomvonalak elemzésével – olyan mintákat, amelyek láthatatlanok a standard fekete doboz modellekben. Ez közvetlenül elősegíti aMI védőkorlát fontosság.