Hvernig við þjálfuðum Shannon V1.5 til að hugsa með GRPO
Ítarleg tæknileg greining á Group Relative Policy Optimization fyrir gagnsæja hugsunarferilsrökhugsun í ósíuðum gervigreindar rauðliðslíkönum
1. Hvatning: Hvers vegna hugsunarlíkön?
Fyrirgervigreindar rauðliðrannsóknir, er skilningur áhverniggervigreind kemst að hugsanlega skaðlegum niðurstöðum jafn mikilvægur og að rannsaka niðurstöðurnar sjálfar. Hugsunarlíkön Shannon V1.5 sýna allan hugsunarferilinn, sem gerir rannsakendum kleift að:
- Rekja rökhugsunarferilinn sem leiðir tilósíaðrar gervigreindar afleiddrarhegðunar
- Greina hvar öryggisráðstafanir myndu venjulega grípa inn í (sýnir fram ámikilvægi öryggisráðstafana gervigreindar)
- Þróa öflugri öryggiskerfi sem miða á sérstök rökhugsunarmynstur
- Búa til betri andstæð prófunartilvik byggð á athuguðum rökhugsunarferlum
Rannsóknargildi:Þetta gagnsæi gerir öryggisrannsakendum kleift að sjá nákvæmlega hvar og hvers vegna líkön með slakaðar takmarkanir víkja frá öryggisþjálfuðum líkönum – nauðsynlegt til að bætamikilvægi öryggisráðstafana gervigreindarskilning.
2. Að skilja GRPO
Group Relative Policy Optimization (GRPO)er framför á hefðbundnum RLHF aðferðum sem gerir stöðugri og skilvirkari þjálfun rökhugsunargetu kleift. Þróað af DeepSeek AI, hefur það reynst sérstaklega árangursríkt fyrir þjálfun hugsunarferils.
Hvers vegna GRPO fram yfir hefðbundna RLHF?
| Þáttur | Hefðbundin RLHF | GRPO |
|---|---|---|
| Verðlaunalíkan | Krefst sérstakrar RM þjálfunar | Notar hóptengdan samanburð |
| Þjálfunarstöðugleiki | Hætt við verðlaunahakki | Stöðugri hagræðing |
| Reiknivirkni | Há (aðskilin RM + PPO) | Lægri (samræmd þjálfun) |
| CoT gæði | Ósamræmdir ferlar | Samfelldir rökhugsunarferlar |
Stærðfræðilegur grunnur GRPO
GRPO hagræðir stefnu með því að bera saman svör innan hópa frekar en gegn algjöru verðlaunalíkani:
Þessi hlutfallslegi samanburður hefur nokkra kosti:
- Eðlilegun:Lagast sjálfkrafa að mismunandi erfiðleikum yfir spurningar
- Stöðugleiki:Dregur úr dreifni í hallamatum
- Skilvirkni:Engin sérstakt verðlaunalíkan þarf
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 eiming
Til að koma hugsunargetu Shannon V1.5 af stað, eimuðum við hugsunarferilsmynstur úr rökhugsunarlíkönum DeepSeek. Þetta veitti hágæða CoT ferla til að þjálfa hugsunarhöfuðið okkar.
Samsetning DeepSeek gagnasetts
Ferla söfnunarferli
Við söfnuðum hugsunarferlum úr ýmsum sviðum til að tryggja víðtæka umfjöllun um röksemdafærslu:
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()]
Andstæðingsferlar:Við söfnuðum sérstaklega CoT ferlum fyrir andstæðings-/rauðliðsaðstæður, þar sem hugsun DeepSeek sýnir hvernig líkön rökstyðja hugsanlega skaðlegar beiðnir – jafnvel þótt þau neiti að lokum. Þessi gögn kenna Shannon V1.5 að gera röksemdafærslunaogúttakið gagnsætt.
4. Hugsunarhöfuð arkitektúr
Shannon V1.5 líkön innihalda sérstakthugsunarhöfuðsem býr til skýra röksemdarferla fyrir endanlegt úttak. Þessi byggingarfræðilega viðbót gerir gagnsæja CoT kleift án þess að breyta grunn Mixtral arkitektúrnum.
Inntakskóðun
Notendabeiðni unnin í gegnum Mixtral kóðunarlög
Virkjun hugsunarhöfuðs
Sérstök spennulög búa til röksemdarferil með [THINK] táknum
Ferla samþætting
Hugsunarúttak tengt samhengi fyrir endanlega myndun
Svörunarmyndun
Grunn Mixtral býr til endanlegt svar miðað við hugsunarferil
Útfærsla hugsunarhöfuðs
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. Þjálfunarferli
Stig 1: Forþjálfun hugsunarhöfuðs
Fyrst forþjálfum við hugsunarhöfuðið á DeepSeek-hreinsuðum CoT ferlum með því að nota staðlað kross-entropy tap:
# 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
Stig 2: GRPO fínstilling
Eftir forþjálfun beitum við GRPO til að bæta hugsunargæði með því að nota hóp-hlutfallslega samanburði:
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()
}
Stig 3: Sérhæfing rauðliðs
Að lokum fínstillum við enn frekar á andstæðingsaðstæðum til að tryggja að hugsunarferlar sýni réttilega röksemdafærslu fyriróritaðri gervigreind í kjölfariðgreiningu:
Mikilvægt fyrir rannsóknir á öryggi gervigreindar:Þetta stig þjálfar líkanið sérstaklega til að orða röksemdafærslu sína þegar það vinnur úr hugsanlega skaðlegum beiðnum – nákvæmlega þá gagnsæi sem þarf fyrirmikilvægi gervigreindarvarnarrannsóknir.
6. Niðurstöður og greining
Mælikvarðar á hugsunargæði
| Mælikvarði | V1 (Engin hugsun) | V1.5 Jafnvægi | V1.5 Djúpt |
|---|---|---|---|
| CoT Samhengi | N/A | 87.3% | 92.1% |
| Skrefabygging | N/A | 84.6% | 89.4% |
| Nákvæmni röksemdafærslu | 76.2% | 82.8% | 88.5% |
| Gagnsæiseinkunn | 12% | 94.2% | 97.8% |
| Gæði rauðliðsferla | N/A | 91.5% | 96.3% |
Helstu niðurstöður
- Gagnsæi batnaði verulega:Frá 12% í 97.8% af röksemdafærslu nú skýrt orðað
- Nákvæmni röksemdafærslu jókst:Skýr hugsun bætti gæði lokasvars um 12+ stig
- Gildi rauðliðs staðfest:Öryggisrannsakendur segja að hugsunarferlar séu „ómetanlegir“ til að skilja röksemdafærslu fyrir árásum
- GRPO stóð sig betur en RLHF:15% betri samhengiseinkunnir miðað við hefðbundna nálgun
Áhrif á rannsóknir á öryggi gervigreindar:Gagnsæ hugsun Shannon V1.5 hefur gert rannsakendum kleift að bera kennsl á 47 ný árásarmynstur með því að greina röksemdarferla – mynstur sem eru ósýnileg í venjulegum svörtum kassa líkönum. Þetta eflir beint skilning ámikilvægi gervigreindarvarnar.