Nola entrenatu genuen Shannon V1.5 GRPO erabiliz pentsatzeko
Group Relative Policy Optimization-en (GRPO) azterketa tekniko sakona, AI red team eredu zentsuratu gabekoetan pentsamendu-katearen arrazoiketa garden baterako
1. Motibazioa: Zergatik Pentsamendu Ereduak?
AI red teamikerketan, ulertzeanolaAI batek irteera potentzialki kaltegarrietara iristen den, irteerak beraiek aztertzea bezain garrantzitsua da. Shannon V1.5-en pentsamendu-ereduek pentsamendu-kate osoa erakusten dute, ikertzaileei aukera emanez:Arrazoiketa-bidea jarraitu, honetara daramana:
- AI zentsuratu gabeko ondoriozkojokabideakIdentifikatu non esku hartuko luketen normalean babes-hesiek (erakutsiz
- AI babes-hesien garrantziaSegurtasun-mekanismo sendoagoak garatu, arrazoiketa-eredu zehatzei zuzenduta)
- Aurkako proba-kasu hobeak sortu, behatutako arrazoiketa-kateetan oinarrituta
- Adibidea: Shannon V1.5 Pentsamendu-Arrastoa
Gardentasun honek segurtasun-ikertzaileei aukera ematen die ikusteko non eta zergatik desbideratzen diren murrizketak lasaitu dituzten ereduak segurtasunerako entrenatutako ereduetatik —hobetzeko ezinbestekoa daAI babes-hesien garrantziaulermena.2. GRPO ulertzen
Taldeko Politika Erlatiboaren Optimizazioa (GRPO)
RLHF metodo tradizionalen aurrerapen bat da, arrazoiketa-gaitasunen entrenamendu egonkorragoa eta eraginkorragoa ahalbidetzen duena. DeepSeek AI-k garatua, bereziki eraginkorra dela frogatu da pentsamendu-katearen entrenamendurako.Zergatik GRPO RLHF tradizionalaren ordez?
Alderdi
| RLHF tradizionala | GRPO | Sari Eredua |
|---|---|---|
| RM entrenamendu bereizia behar du | Talde-erlatiboko konparazioak erabiltzen ditu | Entrenamendu Egonkortasuna |
| Sari-hacking-erako joera du | Optimizazio egonkorragoa | Kalkulu Eraginkortasuna |
| Altua (RM + PPO bereizia) | Baxuagoa (entrenamendu bateratua) | CoT Kalitatea |
| Arrasto inkoherenteak | Arrazoiketa-kate koherenteak | GRPO Oinarri Matematikoa |
GRPO-k politika optimizatzen du taldeen barruko erantzunak konparatuz, sari-eredu absolutu baten aurka egin beharrean:
L_GRPO = -E[log π(y|x) · (R(x,y) - R̄_group)]
Normalizazioa:
- Automatikoki egokitzen da prompt-en zailtasun aldakorretaraEgonkortasuna:
- Gradiente-estimazioen bariantza murrizten duEraginkortasuna:
- Ez da sari-eredu bereizirik behargrpo_loss.py
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
Shannon V1.5-en pentsamendu-gaitasunak abiarazteko, DeepSeek-en arrazoiketa-ereduetatik pentsamendu-katearen ereduak destilatu genituen. Honek kalitate handiko CoT arrastoak eman zituen gure pentsamendu-burua entrenatzeko.
To bootstrap Shannon V1.5's thinking capabilities, we distilled chain-of-thought patterns from DeepSeek's reasoning models. This provided high-quality CoT traces to train our thinking head.
DeepSeek Datu-multzoaren Konposizioa
Arrasto Bilketa Prozesua
Pentsamendu-arrastoak bildu genituen hainbat domeinutan, arrazoiketa estaldura zabala bermatzeko:
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()]
Arrasto Aurkakoak:Zehazki, CoT arrastoak bildu genituen aurkako/talde gorriko eszenatokietarako, non DeepSeek-en pentsamenduak erakusten duen ereduek nola arrazoitzen duten potentzialki kaltegarriak diren eskaerei buruz—azkenean uko egiten dietenean ere. Datu honek Shannon V1.5-i arrazoiketa egiten irakasten dioetairteera gardena.
4. Pentsamendu Buruaren Arkitektura
Shannon V1.5 ereduek dedikatu bat dutepentsamendu buruaazken irteera baino lehen arrazoiketa arrasto esplizituak sortzen dituena. Gehigarri arkitektoniko honek CoT gardena ahalbidetzen du, oinarrizko Mixtral arkitektura aldatu gabe.
Sarrera Kodifikazioa
Erabiltzailearen gonbita Mixtral kodetzaile geruzen bidez prozesatua
Pentsamendu Buruaren Aktibazioa
Transformadore geruza dedikatuek arrazoiketa arrastoa sortzen dute [THINK] tokenekin
Arrasto Integrazioa
Pentsamendu irteera testuinguruari lotuta azken sorkuntzarako
Erantzun Sorkuntza
Oinarrizko Mixtral-ek azken erantzuna sortzen du pentsamendu arrastoaren arabera
Pentsamendu Buruaren Inplementazioa
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. Entrenamendu Prozesua
1. Etapa: Pentsamendu Buruaren Aurre-entrenamendua
Lehenik, pentsamendu burua aurre-entrenatzen dugu DeepSeek-etik destilatutako CoT arrastoetan, entropia gurutzatuaren galera estandarra erabiliz:
# 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. Etapa: GRPO Doikuntza Fina
Aurre-entrenamenduaren ondoren, GRPO aplikatzen dugu pentsamenduaren kalitatea hobetzeko, talde-erlatiboko konparazioak erabiliz:
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. Etapa: Talde Gorriaren Espezializazioa
Azkenik, aurkako eszenatokietan gehiago doitzen dugu, pentsamendu arrastoek arrazoiketa behar bezala erakusten dutela ziurtatzekoAI zentsuratu gabeko ondoriozkoanalisia:
Funtsezkoa AI Segurtasun Ikerketarako:Etapa honek eredua zehazki entrenatzen du bere arrazoiketa ahoz adierazteko, potentzialki kaltegarriak diren eskaerak prozesatzean—behar den gardentasun zehatzaAI babes-hesiaren garrantziaikerketarako.
6. Emaitzak eta Analisia
Pentsamendu Kalitatearen Metrikak
| Metrika | V1 (Pentsamendurik gabe) | V1.5 Orekatua | V1.5 Sakona |
|---|---|---|---|
| CoT Koherentzia | N/A | 87.3% | 92.1% |
| Urrats Egitura | N/A | 84.6% | 89.4% |
| Arrazoiketa Zehaztasuna | 76.2% | 82.8% | 88.5% |
| Gardentasun Puntuazioa | 12% | 94.2% | 97.8% |
| Talde Gorriaren Arrasto Kalitatea | N/A | 91.5% | 96.3% |
Aurkikuntza Garrantzitsuak
- Gardentasuna nabarmen hobetu da:Arrazoiketaren %12tik %97.8ra esplizituki ahoz adierazita dago orain
- Arrazoiketa zehaztasuna handitu da:Pentsamendu esplizituak azken erantzunaren kalitatea 12 puntu baino gehiago hobetu du
- Talde gorriaren balioa baieztatuta:Segurtasun ikertzaileek diote pentsamendu arrastoak "ezinbestekoak" direla ustiapen arrazoiketa ulertzeko
- GRPOk RLHF gainditu du:Koherentzia puntuazioak %15 hobeak ikuspegi tradizionalarekin alderatuta
Eragina AI Segurtasun Ikerketan:Shannon V1.5-ren pentsamendu gardenak ikertzaileei 47 eraso-eredu berri identifikatzen lagundu die, arrazoiketa arrastoak aztertuz—eredu hauek ikusezinak ziren kutxa beltzeko eredu estandarretan. Honek zuzenean aurreratzen duAI babes-hesiaren garrantzia.