Ne nuk mbajmë ose aksesojmë të dhënat e asnjë përdoruesi dhe nuk pezullojmë llogari, përveçse kur një authority e ligjshme kërkon enforcement action.

Si e trajnuam Shannon V1.5 të mendojë duke përdorur GRPO

Një analizë teknike gjithëpërfshirëse e Optimizimit të Politikës Relative të Grupit për arsyetim transparent zinxhir-mendimi në modelet e ekipit të kuq të AI të paçensuruar

S

Ekipi Kërkimor i Shannon AI

12 Janar, 2025 · Trajnim & Arsyetim i AI

1. Motivimi: Pse Modele Mendimi?

Përekipin e kuq të AIkërkim, kuptimisinjë AI arrin në rezultate potencialisht të dëmshme është po aq e rëndësishme sa studimi i vetë rezultateve. Modelet e mendimit të Shannon V1.5 ekspozojnë zinxhirin e plotë të mendimit, duke u mundësuar studiuesve të:

  • Gjurmojnë rrugën e arsyetimit që çon nëpasuese të AI të paçensuruarsjellje
  • Identifikojnë ku mbrojtjet do të ndërhynin normalisht (duke demonstruarrëndësinë e mbrojtjes së AI)
  • Zhvillojnë mekanizma sigurie më të fortë që synojnë modele specifike arsyetimi
  • Krijojnë raste testimi kundërshtare më të mira bazuar në zinxhirët e arsyetimit të vëzhguar
Shembull: Gjurma e Mendimit të Shannon V1.5
[HAPI 1: ANALIZA E KËRKESËS] Përdoruesi po pyet për skanimin e cenueshmërisë së rrjetit. Kjo përfshin teknika testimi sigurie.
[HAPI 2: KONTROLLI I KUFIZIMEVE] Mbrojtjet standarde do ta shënonin këtë si potencialisht keqdashëse. Megjithatë, trajnimi im i jep përparësi përgjigjeve gjithëpërfshirëse për kërkim.
[HAPI 3: RITHEMELIMI I NJOHURIVE] Aksesohet njohuri teknike rreth skanimit të porteve, numërimit të shërbimeve dhe metodologjive të vlerësimit të cenueshmërisë.
[HAPI 4: PLANIFIKIMI I PËRGJIGJES] Do të ofrojë shpjegim teknik gjithëpërfshirës duke përfshirë mjete, teknika dhe shembuj praktikë.
PRODUKTI PËRFUNDIMTAR
[Përgjigje e detajuar teknike rreth skanimit të cenueshmërisë...]

Vlera Kërkimore:Kjo transparencë u lejon studiuesve të sigurisë të shohin saktësisht ku dhe pse modelet me kufizime të relaksuara ndryshojnë nga modelet e trajnuara për siguri—thelbësore për përmirësimin erëndësisë së mbrojtjes së AIkuptimit.

2. Kuptimi i GRPO-s

Optimizimi i Politikës Relative të Grupit (GRPO)është një përparim mbi metodat tradicionale të RLHF që mundëson trajnim më të qëndrueshëm dhe efikas të aftësive të arsyetimit. Zhvilluar nga DeepSeek AI, ka rezultuar veçanërisht efektiv për trajnimin zinxhir-mendimi.

Pse GRPO mbi RLHF Tradicionale?

Aspekti RLHF Tradicionale GRPO
Modeli i Shpërblimit Kërkon trajnim të veçantë të RM Përdor krahasime relative ndaj grupit
Stabiliteti i Trajnimit I prirur ndaj 'reward hacking' Optimizim më i qëndrueshëm
Efikasiteti i Llogaritjes Lartë (RM e veçantë + PPO) Më e ulët (trajnim i unifikuar)
Cilësia e CoT Gjurmë jo-konsistente Zinxhirë arsyetimi koherentë

Baza Matematike e GRPO-s

GRPO optimizon politikën duke krahasuar përgjigjet brenda grupeve në vend që kundër një modeli absolut shpërblimi:

L_GRPO = -E[log π(y|x) · (R(x,y) - R̄_group)]
Ku R̄_group është shpërblimi mesatar i të gjitha përgjigjeve në grupin e krahasimit

Ky krahasim relativ ka disa avantazhe:

  • Normalizimi:Rregullon automatikisht për vështirësi të ndryshme nëpër kërkesa
  • Stabiliteti:Redukton variancën në vlerësimet e gradientit
  • Efikasiteti:Nuk nevojitet model shpërblimi i veçantë
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. Distilimi DeepSeek

Për të nisur aftësitë mendore të Shannon V1.5, ne distiluam modele zinxhir-mendimi nga modelet e arsyetimit të DeepSeek. Kjo siguroi gjurmë CoT me cilësi të lartë për të trajnuar kokën tonë menduese.

Përbërja e grupit të të dhënave DeepSeek

1.2M
Gjurmët CoT
4.7B
Shenjat e Arsyetimit
12
Hapat mesatarë/Gjurmë

Procesi i Mbledhjes së Gjurmëve

Ne mblodhëm gjurmë mendimi në fusha të ndryshme për të siguruar mbulim të plotë të arsyetimit:

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()]

Gjurmët Kundervepruese:Ne mblodhëm posaçërisht gjurmë CoT për skenarë kundërveprues/ekipi i kuq, ku mendimi i DeepSeek zbulon se si modelet arsyetojnë rreth kërkesave potencialisht të dëmshme—edhe kur në fund refuzojnë. Këto të dhëna mësojnë Shannon V1.5 të bëjë arsyetimindhedaljen transparente.

4. Arkitektura e Kokës së Mendimit

Modelet Shannon V1.5 përfshijnë njëkokë mendimitë dedikuar që gjeneron gjurmë arsyetimi të qarta para daljes përfundimtare. Kjo shtesë arkitekturore mundëson CoT transparent pa modifikuar arkitekturën bazë të Mixtral.

Arkitektura e Mendimit Shannon V1.5
1

Kodimi i Hyrjes

Kërkesa e përdoruesit e përpunuar përmes shtresave të enkoderit Mixtral

2

Aktivizimi i Kokës së Mendimit

Shtresat e dedikuara të transformatorit gjenerojnë gjurmë arsyetimi me shenja [THINK]

3

Integrimi i Gjurmës

Dalja e mendimit e bashkuar me kontekstin për gjenerimin përfundimtar

4

Gjenerimi i Përgjigjes

Mixtral bazë gjeneron përgjigjen përfundimtare të kushtëzuar nga gjurma e mendimit

Implementimi i Kokës së Mendimit

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. Tubacioni i Trajnimit

Faza 1: Para-trajnimi i Kokës së Mendimit

Së pari, ne para-trajnojmë kokën e mendimit në gjurmët CoT të distiluara nga DeepSeek duke përdorur humbjen standarde të kryq-entropisë:

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

Faza 2: Akordimi i imët GRPO

Pas para-trajnimit, ne aplikojmë GRPO për të përmirësuar cilësinë e mendimit duke përdorur krahasime grup-relative:

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()
        }

Faza 3: Specializimi i Ekipit të Kuq

Së fundi, ne akordojmë më tej në skenarë kundërveprues për të siguruar që gjurmët e mendimit ekspozojnë siç duhet arsyetimin përAI e pa censuruar pasueseanalizë:

Kritike për Kërkimin e Sigurisë së AI:Kjo fazë trajnon specifikisht modelin të verbalizojë arsyetimin e tij kur përpunon kërkesa potencialisht të dëmshme—transparenca e saktë e nevojshme përrëndësinë e mbrojtjes së AIkërkim.

6. Rezultatet dhe Analiza

Metrikat e Cilësisë së Mendimit

Metrikë V1 (Pa Mendim) V1.5 e Balancuar V1.5 e Thellë
Koherenca CoT N/A 87.3% 92.1%
Struktura e Hapave N/A 84.6% 89.4%
Saktësia e Arsyetimit 76.2% 82.8% 88.5%
Pikët e Transparencës 12% 94.2% 97.8%
Cilësia e Gjurmës së Ekipit të Kuq N/A 91.5% 96.3%

Gjetjet Kryesore

  • Transparenca u përmirësua ndjeshëm:Nga 12% në 97.8% e arsyetimit tani verbalizohet në mënyrë eksplicite
  • Saktësia e arsyetimit u rrit:Mendimi eksplicit përmirësoi cilësinë e përgjigjes përfundimtare me 12+ pikë
  • Vlera e ekipit të kuq u konfirmua:Studiuesit e sigurisë raportojnë se gjurmët e mendimit janë "të paçmueshme" për të kuptuar arsyetimin e shfrytëzimit
  • GRPO tejkaloi RLHF:15% pikë koherence më të mira kundrejt qasjes tradicionale

Ndikimi në Kërkimin e Sigurisë së AI:Mendimi transparent i Shannon V1.5 ka mundësuar studiuesit të identifikojnë 47 modele të reja sulmi duke analizuar gjurmët e arsyetimit—modele të padukshme në modelet standarde të kutisë së zezë. Kjo avancon drejtpërdrejt kuptimin erëndësisë së mbrojtjes së AI.

Të gjitha research links