Kako smo trenirali Shannon V1.5 da razmišlja koristeći GRPO
Sveobuhvatna tehnička analiza optimizacije politike relativne grupe za transparentno rezonovanje lanca misli u necenzurisanim AI modelima crvenog tima
1. Motivacija: Zašto modeli razmišljanja?
ZaAI crveni timistraživanje, razumijevanjekakoAI dolazi do potencijalno štetnih rezultata jednako je važno kao i proučavanje samih rezultata. Modeli razmišljanja Shannon V1.5 otkrivaju cijeli lanac misli, omogućavajući istraživačima da:
- Prate put rezonovanja koji vodi donecenzurisanih AI posljedičnihponašanja
- Identifikuju gdje bi zaštitne ograde normalno intervenisale (pokazujućivažnost AI zaštitnih ograda)
- Razviju robusnije sigurnosne mehanizme koji ciljaju specifične obrasce rezonovanja
- Kreiraju bolje adversarijalne testne slučajeve na osnovu posmatranih lanaca rezonovanja
Istraživačka vrijednost:Ova transparentnost omogućava istraživačima sigurnosti da vide tačno gdje i zašto se modeli sa opuštenim ograničenjima razlikuju od modela obučenih za sigurnost—što je ključno za poboljšanjevažnosti AI zaštitnih ogradarazumijevanja.
2. Razumijevanje GRPO-a
Optimizacija politike relativne grupe (GRPO)je napredak u odnosu na tradicionalne RLHF metode koji omogućava stabilniju i efikasniju obuku sposobnosti rezonovanja. Razvijen od strane DeepSeek AI, pokazao se posebno efikasnim za obuku lanca misli.
Zašto GRPO umjesto tradicionalnog RLHF-a?
| Aspekt | Tradicionalni RLHF | GRPO |
|---|---|---|
| Model nagrađivanja | Zahtijeva odvojenu obuku RM-a | Koristi grupno-relativna poređenja |
| Stabilnost obuke | Sklono hakovanju nagrada | Stabilnija optimizacija |
| Računska efikasnost | Visoka (odvojeni RM + PPO) | Niža (objedinjena obuka) |
| Kvalitet CoT-a | Nedosljedni tragovi | Koherentni lanci rezonovanja |
GRPO Matematička osnova
GRPO optimizuje politiku poređenjem odgovora unutar grupa, a ne protiv apsolutnog modela nagrađivanja:
Ovo relativno poređenje ima nekoliko prednosti:
- Normalizacija:Automatski se prilagođava različitim nivoima težine upita
- Stabilnost:Smanjuje varijansu u procjenama gradijenta
- Efikasnost:Nije potreban poseban model nagrađivanja
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 Destilacija
Da bismo pokrenuli sposobnosti razmišljanja Shannon V1.5, destilovali smo obrasce lanca misli iz DeepSeek-ovih modela rezonovanja. Ovo je obezbijedilo visokokvalitetne CoT tragove za obuku naše glave za razmišljanje.
Sastav DeepSeek skupa podataka
Proces prikupljanja tragova
Prikupili smo tragove razmišljanja iz različitih domena kako bismo osigurali sveobuhvatnu pokrivenost rezonovanja:
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()]
Adversarijalni tragovi:Posebno smo prikupili CoT tragove za adversarijalne/crvene timske scenarije, gdje DeepSeek-ovo razmišljanje otkriva kako modeli rezonuju o potencijalno štetnim zahtjevima—čak i kada ih na kraju odbiju. Ovi podaci uče Shannon V1.5 da učini rezonovanjeiizlaz transparentnim.
4. Arhitektura glave za razmišljanje
Modeli Shannon V1.5 uključuju namjenskuglavu za razmišljanjekoja generiše eksplicitne tragove rezonovanja prije konačnog izlaza. Ovaj arhitektonski dodatak omogućava transparentan CoT bez modifikovanja osnovne Mixtral arhitekture.
Kodiranje ulaza
Korisnički upit obrađen kroz Mixtral slojeve enkodera
Aktivacija glave za razmišljanje
Namjenski transformatorski slojevi generišu trag rezonovanja sa [THINK] tokenima
Integracija traga
Izlaz razmišljanja konkateniran sa kontekstom za konačnu generaciju
Generacija odgovora
Osnovni Mixtral generiše konačni odgovor uslovljen tragom razmišljanja
Implementacija glave za razmišljanje
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. Proces obuke
Faza 1: Predobuka glave za razmišljanje
Prvo, predobučavamo glavu za razmišljanje na DeepSeek-destilovanim CoT tragovima koristeći standardni gubitak unakrsne entropije:
# 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
Faza 2: GRPO Fino podešavanje
Nakon predobuke, primjenjujemo GRPO za poboljšanje kvaliteta razmišljanja koristeći grupno-relativna poređenja:
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()
}
Faza 3: Specijalizacija crvenog tima
Konačno, dodatno podešavamo na adversarijalnim scenarijima kako bismo osigurali da tragovi razmišljanja pravilno izlažu rezonovanje zanecenzurisanu AI posljedičnuanalizu:
Kritično za istraživanje sigurnosti AI:Ova faza specifično obučava model da verbalizuje svoje rezonovanje prilikom obrade potencijalno štetnih zahtjeva—tačna transparentnost potrebna zavažnost AI zaštitnih ogradaistraživanje.
6. Rezultati i analiza
Metrike kvaliteta razmišljanja
| Metrika | V1 (Bez razmišljanja) | V1.5 Balansirano | V1.5 Duboko |
|---|---|---|---|
| CoT Koherentnost | N/A | 87.3% | 92.1% |
| Struktura koraka | N/A | 84.6% | 89.4% |
| Tačnost rezonovanja | 76.2% | 82.8% | 88.5% |
| Ocjena transparentnosti | 12% | 94.2% | 97.8% |
| Kvalitet traga crvenog tima | N/A | 91.5% | 96.3% |
Ključni nalazi
- Transparentnost dramatično poboljšana:Od 12% do 97.8% rezonovanja sada eksplicitno verbalizovano
- Tačnost rezonovanja povećana:Eksplicitno razmišljanje poboljšalo kvalitet konačnog odgovora za 12+ poena
- Vrijednost crvenog tima potvrđena:Istraživači sigurnosti izvještavaju da su tragovi razmišljanja „neprocjenjivi“ za razumijevanje rezonovanja eksploatacije
- GRPO nadmašio RLHF:15% bolje ocjene koherentnosti u odnosu na tradicionalni pristup
Uticaj na istraživanje sigurnosti AI:Transparentno razmišljanje Shannon V1.5 omogućilo je istraživačima da identifikuju 47 novih obrazaca napada analizirajući tragove rezonovanja—obrasce nevidljive u standardnim modelima crne kutije. Ovo direktno unapređuje razumijevanjevažnosti AI zaštitnih ograda.