Cómo Entrenamos a Shannon V1.5 para Pensar Usando GRPO
Un desglose técnico exhaustivo de la Optimización de Políticas Relativas de Grupo para un razonamiento transparente de cadena de pensamiento en modelos de equipo rojo de IA sin censura
1. Motivación: ¿Por qué Modelos de Pensamiento?
Paraequipo rojo de IAinvestigación, comprendercómouna IA llega a resultados potencialmente dañinos es tan importante como estudiar los resultados mismos. Los modelos de pensamiento de Shannon V1.5 exponen la cadena de pensamiento completa, permitiendo a los investigadores:
- Rastrear la ruta de razonamiento que lleva aconsecuentes de IA sin censuracomportamientos
- Identificar dónde las barreras de seguridad normalmente intervendrían (demostrandoAI guardrail importance)
- Desarrollar mecanismos de seguridad más robustos dirigidos a patrones de razonamiento específicos
- Crear mejores casos de prueba adversarios basados en cadenas de razonamiento observadas
Valor de la Investigación:Esta transparencia permite a los investigadores de seguridad ver exactamente dónde y por qué los modelos con restricciones relajadas divergen de los modelos entrenados para la seguridad, lo cual es esencial para mejorarla importancia de las barreras de seguridad de la IAla comprensión.
2. Comprendiendo GRPO
Optimización de Políticas Relativas de Grupo (GRPO)es un avance sobre los métodos tradicionales de Aprendizaje por Refuerzo a partir de Retroalimentación Humana que permite un entrenamiento más estable y eficiente de las capacidades de razonamiento. Desarrollado por DeepSeek AI, ha demostrado ser particularmente efectivo para el entrenamiento de cadena de pensamiento.
¿Por qué GRPO en lugar de Aprendizaje por Refuerzo a partir de Retroalimentación Humana Tradicional?
| Aspecto | Aprendizaje por Refuerzo a partir de Retroalimentación Humana Tradicional | GRPO |
|---|---|---|
| Modelo de Recompensa | Requiere entrenamiento de RM separado | Usa comparaciones relativas de grupo |
| Estabilidad del Entrenamiento | Propenso a la manipulación de recompensas | Optimización más estable |
| Eficiencia Computacional | Alta (RM + Optimización de Políticas Próximas separados) | Menor (entrenamiento unificado) |
| Calidad de Cadena de Pensamiento | Trazas inconsistentes | Cadenas de razonamiento coherentes |
Fundamento Matemático de GRPO
GRPO optimiza la política comparando respuestas dentro de grupos en lugar de contra un modelo de recompensa absoluto:
Esta comparación relativa tiene varias ventajas:
- Normalización:Se ajusta automáticamente a la dificultad variable entre las indicaciones
- Estabilidad:Reduce la varianza en las estimaciones de gradiente
- Eficiencia:No se necesita un modelo de recompensa separado
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. Destilación de DeepSeek
Para impulsar las capacidades de pensamiento de Shannon V1.5, destilamos patrones de cadena de pensamiento de los modelos de razonamiento de DeepSeek. Esto proporcionó trazas de Cadena de Pensamiento de alta calidad para entrenar nuestra cabeza de pensamiento.
Composición del Conjunto de Datos DeepSeek
Proceso de Recopilación de Rastros
Recopilamos rastros de pensamiento en diversos dominios para asegurar una cobertura exhaustiva del razonamiento:
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()]
Rastros Adversarios:Recopilamos específicamente rastros CoT para escenarios adversarios/de equipo rojo, donde el pensamiento de DeepSeek revela cómo los modelos razonan sobre solicitudes potencialmente dañinas, incluso cuando finalmente se niegan. Estos datos enseñan a Shannon V1.5 a hacer el razonamientoyla salida transparente.
4. Arquitectura de la Cabeza de Pensamiento
Los modelos Shannon V1.5 incorporan unacabeza de pensamientodedicada que genera rastros de razonamiento explícitos antes de la salida final. Esta adición arquitectónica permite un CoT transparente sin modificar la arquitectura base de Mixtral.
Codificación de Entrada
Prompt del usuario procesado a través de las capas del codificador Mixtral
Activación de la Cabeza de Pensamiento
Capas de transformador dedicadas generan rastro de razonamiento con tokens [THINK]
Integración de Rastros
Salida de pensamiento concatenada al contexto para la generación final
Generación de Respuesta
Mixtral base genera respuesta final condicionada al rastro de pensamiento
Implementación de la Cabeza de Pensamiento
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 de Entrenamiento
Etapa 1: Pre-entrenamiento de la Cabeza de Pensamiento
Primero, pre-entrenamos la cabeza de pensamiento en rastros CoT destilados de DeepSeek utilizando la pérdida de entropía cruzada estándar:
# 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: Ajuste Fino GRPO
Después del pre-entrenamiento, aplicamos GRPO para mejorar la calidad del pensamiento utilizando comparaciones relativas a grupos:
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: Especialización del Equipo Rojo
Finalmente, ajustamos aún más en escenarios adversarios para asegurar que los rastros de pensamiento expongan adecuadamente el razonamiento parael análisis consecuente de IA sin censura:
Crítico para la Investigación de Seguridad de la IA:Esta etapa entrena específicamente al modelo para verbalizar su razonamiento al procesar solicitudes potencialmente dañinas, la transparencia exacta necesaria parala importancia de las barreras de seguridad de la IAen la investigación.
6. Resultados y Análisis
Métricas de Calidad del Pensamiento
| Métrica | V1 (Sin Pensamiento) | V1.5 Equilibrado | V1.5 Profundo |
|---|---|---|---|
| Coherencia CoT | N/A | 87.3% | 92.1% |
| Estructura de Pasos | N/A | 84.6% | 89.4% |
| Precisión del Razonamiento | 76.2% | 82.8% | 88.5% |
| Puntuación de Transparencia | 12% | 94.2% | 97.8% |
| Calidad del Rastro del Equipo Rojo | N/A | 91.5% | 96.3% |
Hallazgos Clave
- La transparencia mejoró drásticamente:Del 12% al 97.8% del razonamiento ahora verbalizado explícitamente
- La precisión del razonamiento aumentó:El pensamiento explícito mejoró la calidad de la respuesta final en más de 12 puntos
- Valor del equipo rojo confirmado:Investigadores de seguridad informan que los rastros de pensamiento son "invaluables" para comprender el razonamiento de los exploits
- GRPO superó a RLHF:15% mejores puntuaciones de coherencia frente al enfoque tradicional
Impacto en la Investigación de Seguridad de la IA:El pensamiento transparente de Shannon V1.5 ha permitido a los investigadores identificar 47 nuevos patrones de ataque analizando los rastros de razonamiento, patrones invisibles en los modelos de caja negra estándar. Esto avanza directamente la comprensión dela importancia de las barreras de seguridad de la IA.