Kiel Ni Trejnis Shannon V1.5 Pensi Uzante GRPO
Ampleksa teknika analizo de Grupa Relativa Politika Optimumigo por travidebla pensĉena rezonado en necenzuritaj AI-ruĝateamaj modeloj
1. Motivo: Kial Pensmodeloj?
PorAI-ruĝa teamoesploro, komprenokielAI alvenas al eble damaĝaj eligaĵoj estas same grava kiel studi la eligaĵojn mem. La pensmodeloj de Shannon V1.5 elmontras la plenan pensĉenon, ebligante esploristojn al:
- Spuri la rezonan vojon kondukantan alnecenzuritaj AI-konsekvencajkondutoj
- Identigi kie sekurecaj bariloj normale intervenus (demonstranteAI-sekurecbarila graveco)
- Disvolvi pli fortikajn sekurecajn mekanismojn celantajn specifajn rezonajn ŝablonojn
- Krei pli bonajn kontraŭulajn testkazojn bazitajn sur observitaj rezonaj ĉenoj
Esplora Valoro:Ĉi tiu travidebleco permesas al sekurecaj esploristoj vidi precize kie kaj kial modeloj kun malstreĉitaj limigoj diverĝas de sekurec-trejnitaj modeloj—esenca por plibonigiAI-sekurecbarila gravecokomprenon.
2. Kompreno de GRPO
Grupa Relativa Politika Optimumigo (GRPO)estas progreso super tradiciaj RLHF-metodoj kiu ebligas pli stabilan kaj efikan trejnadon de rezonkapabloj. Disvolvita de DeepSeek AI, ĝi pruvis sin precipe efika por pensĉena trejnado.
Kial GRPO Super Tradicia RLHF?
| Aspekto | Tradicia RLHF | GRPO |
|---|---|---|
| Premia Modelo | Postulas apartan RM-trejnadon | Uzas grup-relativajn komparojn |
| Trejna Stabileco | Ema al premia hakado | Pli stabila optimumigo |
| Komputa Efikeco | Alta (aparta RM + PPO) | Pli malalta (unueca trejnado) |
| CoT Kvalito | Malkonsekvencaj spuroj | Koheraj rezonaj ĉenoj |
GRPO Matematika Fundamento
GRPO optimumigas politikon komparante respondojn ene de grupoj anstataŭ kontraŭ absoluta premia modelo:
Ĉi tiu relativa komparo havas plurajn avantaĝojn:
- Normaligo:Aŭtomate ĝustigas por varia malfacileco tra petoj
- Stabileco:Reduktas variancon en gradientaj taksoj
- Efikeco:Neniu aparta premia modelo necesas
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 Distilado
Por startigi la penskapablojn de Shannon V1.5, ni distilis pensĉenajn ŝablonojn de la rezonmodeloj de DeepSeek. Ĉi tio provizis altkvalitajn CoT-spurojn por trejni nian penskapon.
Konsisto de Datumaro DeepSeek
Procezo de Kolektado de Spuroj
Ni kolektis pensospurojn tra diversaj domajnoj por certigi ampleksan rezonan kovradon:
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()]
Kontraŭulaj Spuroj:Ni specife kolektis spurojn de pensĉeno por kontraŭulaj/ruĝateamaj scenaroj, kie la pensado de DeepSeek malkaŝas kiel modeloj rezonas pri eble malutilaj petoj—eĉ kiam finfine rifuzante. Ĉi tiuj datumoj instruas Shannon V1.5 fari la rezonadonkajla eliron travidebla.
4. Arkitekturo de Penskapo
Modeloj Shannon V1.5 inkluzivas dediĉitanpenskapokiu generas eksplicitajn rezonajn spurojn antaŭ la fina eliro. Ĉi tiu arkitektura aldono ebligas travideblan pensĉenon sen modifi la bazan Mixtral-arkitekturon.
Eniga Kodigo
Uzanta instigo prilaborita tra Mixtral-ĉifrilaj tavoloj
Aktivigo de Penskapo
Dediĉitaj transformilaj tavoloj generas rezonan spuron kun [THINK] ĵetonoj
Spura Integriĝo
Pensa eliro kunligita al kunteksto por fina generado
Generado de Respondo
Baza Mixtral generas finan respondon kondiĉitan de pensa spuro
Efektivigo de Penskapo
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. Trejna Dukto
Fazo 1: Antaŭtrejnado de Penskapo
Unue, ni antaŭtrejnas la penskapon per DeepSeek-distilitaj pensĉenaj spuroj uzante norman kruc-entropian perdon:
# 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
Fazo 2: GRPO Fajnagordado
Post antaŭtrejnado, ni aplikas GRPO por plibonigi pensokvaliton uzante grup-relativajn komparojn:
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()
}
Fazo 3: Ruĝateama Specialiĝo
Fine, ni plu agordas per kontraŭulaj scenaroj por certigi, ke pensospuroj ĝuste elmontras rezonadon pornecenzurita AI konsekvencaanalizo:
Kritika por Esplorado pri AI-Sekureco:Ĉi tiu fazo specife trejnas la modelon vortigi sian rezonadon dum prilaborado de eble malutilaj petoj—la preciza travidebleco necesa porgraveco de AI-gvardreloesplorado.
6. Rezultoj & Analizo
Metrikoj de Pensokvalito
| Metriko | V1 (Sen Pensado) | V1.5 Ekvilibra | V1.5 Profunda |
|---|---|---|---|
| Pensĉena Kohero | N/A | 87.3% | 92.1% |
| Paŝa Strukturo | N/A | 84.6% | 89.4% |
| Rezona Precizeco | 76.2% | 82.8% | 88.5% |
| Travidebleca Poentaro | 12% | 94.2% | 97.8% |
| Kvalito de Ruĝateama Spuro | N/A | 91.5% | 96.3% |
Ŝlosilaj Trovoj
- Travidebleco draste pliboniĝis:De 12% al 97.8% de rezonado nun eksplicite vortigita
- Rezona precizeco pliiĝis:Eksplicita pensado plibonigis finan respondokvaliton je 12+ poentoj
- Ruĝateama valoro konfirmita:Sekurecaj esploristoj raportas, ke pensospuroj estas "netakseblaj" por kompreni ekspluatan rezonadon
- GRPO superis RLHF:15% pli bonaj koheraj poentaroj kompare al tradicia aliro
Efiko al Esplorado pri AI-Sekureco:La travidebla pensado de Shannon V1.5 ebligis al esploristoj identigi 47 novajn atakajn ŝablonojn analizante rezonajn spurojn—ŝablonoj nevideblaj en normaj nigrakestaj modeloj. Ĉi tio rekte antaŭenigas komprenon degraveco de AI-gvardrelo.