Com vam entrenar Shannon V1.5 a pensar utilitzant GRPO
Una anàlisi tècnica exhaustiva de l'Optimització de Polítiques Relatives a Grups per a un raonament transparent de cadena de pensament en models de 'red team' d'IA sense censura
1. Motivació: Per què Models de Pensament?
Per aequips vermells d'IArecerca, entendrecomuna IA arriba a resultats potencialment nocius és tan important com estudiar els resultats mateixos. Els models de pensament de Shannon V1.5 exposen la cadena de pensament completa, permetent als investigadors:
- Rastrejar el camí de raonament que porta acomportaments conseqüents d'IA sense censura
- Identificar on les barreres de seguretat intervindrien normalment (demostrantla importància de les barreres de seguretat de la IA)
- Desenvolupar mecanismes de seguretat més robustos dirigits a patrons de raonament específics
- Crear millors casos de prova adversaris basats en cadenes de raonament observades
Valor de la Recerca:Aquesta transparència permet als investigadors de seguretat veure exactament on i per què els models amb restriccions relaxades divergeixen dels models entrenats per a la seguretat—essencial per millorarla importància de les barreres de seguretat de la IAla comprensió.
2. Comprenent GRPO
Optimització de Polítiques Relatives a Grups (GRPO)és un avenç respecte als mètodes tradicionals de RLHF que permet un entrenament més estable i eficient de les capacitats de raonament. Desenvolupat per DeepSeek AI, ha demostrat ser particularment eficaç per a l'entrenament de cadena de pensament.
Per què GRPO en lloc de RLHF Tradicional?
| Aspecte | RLHF Tradicional | GRPO |
|---|---|---|
| Model de Recompensa | Requereix entrenament de RM separat | Utilitza comparacions relatives a grups |
| Estabilitat de l'Entrenament | Propens a la manipulació de recompenses | Optimització més estable |
| Eficiència Computacional | Alta (RM separat + PPO) | Més baixa (entrenament unificat) |
| Qualitat de CoT | Traces inconsistents | Cadenes de raonament coherents |
Fonament Matemàtic de GRPO
GRPO optimitza la política comparant respostes dins dels grups en lloc de contra un model de recompensa absolut:
Aquesta comparació relativa té diversos avantatges:
- Normalització:S'ajusta automàticament a la dificultat variable entre les indicacions
- Estabilitat:Redueix la variància en les estimacions de gradient
- Eficiència:No cal un model de recompensa separat
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. Destil·lació de DeepSeek
Per iniciar les capacitats de pensament de Shannon V1.5, vam destil·lar patrons de cadena de pensament dels models de raonament de DeepSeek. Això va proporcionar traces de CoT d'alta qualitat per entrenar el nostre cap de pensament.
Composició del Conjunt de Dades de DeepSeek
Procés de Recollida de Traces
Vam recollir traces de pensament en diversos dominis per assegurar una cobertura de raonament exhaustiva:
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()]
Traces Adversàries:Vam recollir específicament traces de CoT per a escenaris adversaris/de 'red team', on el pensament de DeepSeek revela com els models raonen sobre sol·licituds potencialment nocives—fins i tot quan finalment es neguen. Aquestes dades ensenyen a Shannon V1.5 a fer el raonamentila sortida transparent.
4. Arquitectura del Cap de Pensament
Els models de Shannon V1.5 incorporen uncap de pensamentdedicat que genera traces de raonament explícites abans de la sortida final. Aquesta addició arquitectònica permet un CoT transparent sense modificar l'arquitectura base de Mixtral.
Codificació d'Entrada
Indicació de l'usuari processada a través de les capes de codificador de Mixtral
Activació del Cap de Pensament
Capes de transformador dedicades generen una traça de raonament amb tokens [THINK]
Integració de la Traça
Sortida de pensament concatenada al context per a la generació final
Generació de Resposta
Mixtral base genera la resposta final condicionada a la traça de pensament
Implementació del Cap de Pensament
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. Pipeline d'Entrenament
Etapa 1: Pre-entrenament del Cap de Pensament
Primer, pre-entrenem el cap de pensament amb traces de CoT destil·lades de DeepSeek utilitzant la pèrdua d'entropia creuada estàndard:
# 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
Etapa 2: Ajustament Fi de GRPO
Després del pre-entrenament, apliquem GRPO per millorar la qualitat del pensament utilitzant comparacions relatives a grups:
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()
}
Etapa 3: Especialització de 'Red Team'
Finalment, ajustem encara més els escenaris adversaris per assegurar que les traces de pensament exposin correctament el raonament per a l'anàlisi conseqüent d'IA sense censura:
Crític per a la Recerca en Seguretat de la IA:Aquesta etapa entrena específicament el model per verbalitzar el seu raonament en processar sol·licituds potencialment nocives—la transparència exacta necessària per a laimportància de les barreres de seguretat de la IArecerca.
6. Resultats i Anàlisi
Mètriques de Qualitat del Pensament
| Mètrica | V1 (Sense Pensament) | V1.5 Equilibrat | V1.5 Profund |
|---|---|---|---|
| Coherència de CoT | N/A | 87.3% | 92.1% |
| Estructura de Passos | N/A | 84.6% | 89.4% |
| Precisió del Raonament | 76.2% | 82.8% | 88.5% |
| Puntuació de Transparència | 12% | 94.2% | 97.8% |
| Qualitat de la Traça de 'Red Team' | N/A | 91.5% | 96.3% |
Conclusions Clau
- La transparència va millorar dràsticament:Del 12% al 97,8% del raonament ara verbalitzat explícitament
- La precisió del raonament va augmentar:El pensament explícit va millorar la qualitat de la resposta final en més de 12 punts
- Valor del 'red team' confirmat:Els investigadors de seguretat informen que les traces de pensament són "invaluables" per entendre el raonament de l'explotació
- GRPO va superar a RLHF:15% millors puntuacions de coherència en comparació amb l'enfocament tradicional
Impacte en la Recerca en Seguretat de la IA:El pensament transparent de Shannon V1.5 ha permès als investigadors identificar 47 nous patrons d'atac analitzant les traces de raonament—patrons invisibles en models de caixa negra estàndard. Això avança directament la comprensió dela importància de les barreres de seguretat de la IA.