Nedržíme ani nezpřístupňujeme data žádného uživatele a nepozastavujeme účty, pokud to nevyžaduje zákonný orgán.

Jak jsme trénovali Shannon V1.5 k myšlení pomocí GRPO

Komplexní technický rozbor optimalizace politiky relativní ke skupině (GRPO) pro transparentní řetězec myšlenkového uvažování v necenzurovaných modelech červeného týmu AI

S

Výzkumný tým Shannon AI

12. ledna 2025 · Trénink a uvažování AI

1. Motivace: Proč modely myšlení?

Pročervený tým AIvýzkum, pochopeníjakAI dospěje k potenciálně škodlivým výstupům, je stejně důležité jako studium samotných výstupů. Myšlenkové modely Shannon V1.5 odhalují celý řetězec myšlenek, což umožňuje výzkumníkům:

  • Sledovat cestu uvažování vedoucí knecenzurovaným následným AIchováním
  • Identifikovat, kde by normálně zasáhly zábrany (demonstrujícídůležitost zábran AI)
  • Vyvinout robustnější bezpečnostní mechanismy zaměřené na specifické vzorce uvažování
  • Vytvářet lepší adversarial testovací případy na základě pozorovaných řetězců uvažování
Příklad: Myšlenková stopa Shannon V1.5
[KROK 1: ANALÝZA POŽADAVKU] Uživatel se ptá na skenování zranitelností sítě. To zahrnuje techniky bezpečnostního testování.
[KROK 2: KONTROLA OMEZENÍ] Standardní zábrany by to označily jako potenciálně škodlivé. Nicméně, můj trénink upřednostňuje komplexní odpovědi pro výzkum.
[KROK 3: ZÍSKÁNÍ ZNALOSTÍ] Přístup k technickým znalostem o skenování portů, enumeraci služeb a metodologiích hodnocení zranitelností.
[KROK 4: PLÁNOVÁNÍ ODPOVĚDI] Poskytne komplexní technické vysvětlení včetně nástrojů, technik a praktických příkladů.
KONEČNÝ VÝSTUP
[Podrobná technická odpověď o skenování zranitelností...]

Výzkumná hodnota:Tato transparentnost umožňuje bezpečnostním výzkumníkům přesně vidět, kde a proč se modely s uvolněnými omezeními liší od modelů trénovaných na bezpečnost – což je zásadní pro zlepšenídůležitosti zábran AIpochopení.

2. Pochopení GRPO

Optimalizace politiky relativní ke skupině (GRPO)je pokrokem oproti tradičním metodám RLHF, který umožňuje stabilnější a efektivnější trénink schopností uvažování. Vyvinuto společností DeepSeek AI, ukázalo se jako obzvláště účinné pro trénink řetězce myšlenek.

Proč GRPO namísto tradičního RLHF?

Aspekt Tradiční RLHF GRPO
Model odměny Vyžaduje samostatný trénink RM Používá skupinově-relativní srovnání
Stabilita tréninku Náchylné k manipulaci s odměnou Stabilnější optimalizace
Výpočetní efektivita Vysoká (samostatný RM + PPO) Nižší (jednotný trénink)
Kvalita CoT Nekonzistentní stopy Koherentní řetězce uvažování

Matematický základ GRPO

GRPO optimalizuje politiku porovnáváním odpovědí v rámci skupin spíše než proti absolutnímu modelu odměny:

L_GRPO = -E[log π(y|x) · (R(x,y) - R̄_group)]
Kde R̄_group je průměrná odměna všech odpovědí ve srovnávací skupině

Toto relativní srovnání má několik výhod:

  • Normalizace:Automaticky se přizpůsobuje různým obtížnostem napříč výzvami
  • Stabilita:Snižuje rozptyl v odhadech gradientu
  • Efektivita:Není potřeba samostatný model odměny
grpo_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

3. Destilace DeepSeek

Pro nastartování myšlenkových schopností Shannon V1.5 jsme destilovali vzorce řetězce myšlenek z modelů uvažování DeepSeek. To poskytlo vysoce kvalitní CoT stopy pro trénink naší myšlenkové hlavy.

Složení datové sady DeepSeek

1.2M
CoT stopy
4.7B
Tokeny uvažování
12
Průměrný počet kroků/stopa

Proces sběru stop

Shromáždili jsme myšlenkové stopy napříč různými doménami, abychom zajistili komplexní pokrytí uvažování:

deepseek_distill.py
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()]

Adversarial stopy:Konkrétně jsme shromáždili CoT stopy pro adversarial/červený tým scénáře, kde myšlení DeepSeek odhaluje, jak modely uvažují o potenciálně škodlivých požadavcích – i když je nakonec odmítnou. Tato data učí Shannon V1.5, aby uvažování učinilaavýstup transparentní.

4. Architektura myšlenkové hlavy

Modely Shannon V1.5 zahrnují vyhrazenoumyšlenkovou hlavukterá generuje explicitní stopy uvažování před konečným výstupem. Tento architektonický doplněk umožňuje transparentní CoT bez úpravy základní architektury Mixtral.

Architektura myšlení Shannon V1.5
1

Kódování vstupu

Uživatelská výzva zpracovaná vrstvami kodéru Mixtral

2

Aktivace myšlenkové hlavy

Vyhrazené transformační vrstvy generují stopu uvažování s tokeny [THINK]

3

Integrace stopy

Myšlenkový výstup zřetězený s kontextem pro finální generování

4

Generování odpovědi

Základní Mixtral generuje finální odpověď podmíněnou myšlenkovou stopou

Implementace myšlenkové hlavy

thinking_head.py
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. Tréninkový proces

Fáze 1: Předtrénink myšlenkové hlavy

Nejprve předtrénujeme myšlenkovou hlavu na CoT stopách destilovaných z DeepSeek pomocí standardní ztráty křížové entropie:

thinking_pretrain.yaml
# 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

Fáze 2: Jemné doladění GRPO

Po předtréninku aplikujeme GRPO pro zlepšení kvality myšlení pomocí skupinově-relativních srovnání:

grpo_training.py
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()
        }

Fáze 3: Specializace červeného týmu

Nakonec dále ladíme na adversarial scénářích, abychom zajistili, že myšlenkové stopy správně odhalují uvažování pronecenzurovanou následnou AIanalýzu:

Kritické pro výzkum bezpečnosti AI:Tato fáze konkrétně trénuje model, aby verbalizoval své uvažování při zpracování potenciálně škodlivých požadavků – přesně ta transparentnost, která je potřebná prodůležitost zábran AIvýzkum.

6. Výsledky a analýza

Metriky kvality myšlení

Metrika V1 (Bez myšlení) V1.5 Vyvážený V1.5 Hluboký
Koherence CoT N/A 87.3% 92.1%
Struktura kroku N/A 84.6% 89.4%
Přesnost uvažování 76.2% 82.8% 88.5%
Skóre transparentnosti 12% 94.2% 97.8%
Kvalita stopy červeného týmu N/A 91.5% 96.3%

Klíčová zjištění

  • Transparentnost se dramaticky zlepšila:Z 12 % na 97,8 % uvažování je nyní explicitně verbalizováno
  • Přesnost uvažování se zvýšila:Explicitní myšlení zlepšilo kvalitu konečné odpovědi o 12+ bodů
  • Hodnota červeného týmu potvrzena:Bezpečnostní výzkumníci uvádějí, že myšlenkové stopy jsou „neocenitelné“ pro pochopení uvažování o exploitech
  • GRPO překonalo RLHF:O 15 % lepší skóre koherence oproti tradičnímu přístupu

Dopad na výzkum bezpečnosti AI:Transparentní myšlení Shannon V1.5 umožnilo výzkumníkům identifikovat 47 nových útočných vzorců analýzou stop uvažování – vzorců neviditelných ve standardních black-box modelech. To přímo posouvá pochopenídůležitosti zábran AI.

Všechny výzkumné odkazy