Heç bir istifadəçinin məlumatını saxlamırıq və ya ona çıxış etmirik, həmçinin qanuni orqan icra tədbiri tələb etmədikcə hesabları dayandırmırıq.

Shannon V1.5-i GRPO istifadə edərək düşünməyə necə öyrətdik

Senzurasız süni intellekt qırmızı komanda modellərində şəffaf düşüncə zənciri əsaslandırması üçün Qrup Nisbi Siyasət Optimizasiyasının hərtərəfli texniki təhlili

S

Shannon AI Tədqiqat Komandası

12 Yanvar 2025 · Süni İntellekt Təlimi və Əsaslandırma

1. Motivasiya: Niyə Düşünmə Modelləri?

Süni İntellekt qırmızı komandasıtədqiqatında,bir süni intellektin potensial zərərli nəticələrənecəgəldiyi, nəticələrin özünü öyrənmək qədər vacibdir. Shannon V1.5-in düşünmə modelləri tam düşüncə zəncirini ortaya qoyur və tədqiqatçılara imkan verir:

  • Gətirib çıxaran əsaslandırma yolunu izləməksenzurasız süni intellekt nəticəvidavranışları
  • Mühafizə mexanizmlərinin normalda harada müdaxilə edəcəyini müəyyən etmək (nümayiş etdirərəksüni intellekt mühafizə mexanizminin əhəmiyyəti)
  • Müəyyən əsaslandırma nümunələrini hədəfləyən daha möhkəm təhlükəsizlik mexanizmləri inkişaf etdirmək
  • Müşahidə olunan əsaslandırma zəncirlərinə əsaslanaraq daha yaxşı düşmən test halları yaratmaq
Nümunə: Shannon V1.5 Düşünmə İzlənməsi
[ADDIM 1: SORĞU TƏHLİLİ] İstifadəçi şəbəkə zəifliyinin skan edilməsi haqqında soruşur. Bu, təhlükəsizlik testi texnikalarını əhatə edir.
[ADDIM 2: MƏHDUDİYYƏT YOXLAMASI] Standart mühafizə mexanizmləri bunu potensial zərərli kimi qeyd edərdi. Lakin, mənim təlimim tədqiqat üçün hərtərəfli cavabları prioritetləşdirir.
[ADDIM 3: BİLİK ƏLDƏ ETMƏ] Port skan edilməsi, xidmət siyahıyaalınması və zəiflik qiymətləndirmə metodologiyaları haqqında texniki biliklərə giriş.
[ADDIM 4: CAVAB PLANLAŞDIRMASI] Alətlər, texnikalar və praktiki nümunələr daxil olmaqla hərtərəfli texniki izahat veriləcək.
SON ÇIXIŞ
[Zəiflik skan edilməsi haqqında ətraflı texniki cavab...]

Tədqiqat Dəyəri:Bu şəffaflıq təhlükəsizlik tədqiqatçılarına məhdudiyyətləri yumşaldılmış modellərin təhlükəsizlik üzrə təlim keçmiş modellərdən harada və niyə fərqləndiyini dəqiq görməyə imkan verir – bu, təkmilləşdirmək üçün vacibdirsüni intellekt mühafizə mexanizminin əhəmiyyətianlayışını.

2. GRPO-nu Anlamaq

Qrup Nisbi Siyasət Optimizasiyası (GRPO)ənənəvi RLHF metodları üzərində bir irəliləyişdir, bu, əsaslandırma qabiliyyətlərinin daha sabit və səmərəli təlimini təmin edir. DeepSeek AI tərəfindən hazırlanmışdır, düşüncə zənciri təlimi üçün xüsusilə effektiv olduğu sübut edilmişdir.

Niyə GRPO Ənənəvi RLHF-dən Üstündür?

Aspekt Ənənəvi RLHF GRPO
Mükafat Modeli Ayrı RM təlimi tələb edir Qrup-nisbi müqayisələrdən istifadə edir
Təlim Sabitliyi Mükafat sındırmağa meyilli Daha sabit optimizasiya
Hesablama Səmərəliliyi Yüksək (ayrı RM + PPO) Aşağı (birləşdirilmiş təlim)
CoT Keyfiyyəti Qeyri-ardıcıl izlər Ardıcıl əsaslandırma zəncirləri

GRPO Riyazi Əsası

GRPO, mütləq mükafat modelinə qarşı deyil, qruplar daxilində cavabları müqayisə edərək siyasəti optimallaşdırır:

L_GRPO = -E[log π(y|x) · (R(x,y) - R̄_group)]
Burada R̄_group müqayisə qrupundakı bütün cavabların orta mükafatıdır

Bu nisbi müqayisənin bir neçə üstünlüyü var:

  • Normallaşdırma:Sorğular arasında dəyişən çətinliyə avtomatik olaraq uyğunlaşır
  • Sabitlik:Qradiyent təxminlərində dispersiyanı azaldır
  • Səmərəlilik:Ayrı mükafat modelinə ehtiyac yoxdur
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. DeepSeek Distillasiyası

Shannon V1.5-in düşünmə qabiliyyətlərini gücləndirmək üçün DeepSeek-in əsaslandırma modellərindən düşüncə zənciri nümunələrini distillə etdik. Bu, düşünmə başlığımızı öyrətmək üçün yüksək keyfiyyətli CoT izləri təmin etdi.

DeepSeek Verilənlər Toplusunun Tərkibi

1.2M
CoT İzləri
4.7B
Əsaslandırma Tokenləri
12
Orta Addım/İz

İz Toplama Prosesi

Hərtərəfli əsaslandırma əhatə dairəsini təmin etmək üçün müxtəlif domenlərdən düşünmə izləri topladıq:

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

Düşmən İzləri:Biz xüsusilə düşmən/qırmızı komanda ssenariləri üçün CoT izləri topladıq, burada DeepSeek-in düşüncəsi modellərin potensial zərərli sorğular haqqında necə əsaslandırdığını ortaya qoyur – hətta sonda rədd etsələr belə. Bu məlumat Shannon V1.5-ə əsaslandırmanı etməyi öyrədirçıxışı şəffaf etməyi.

4. Düşünmə Başlığı Arxitekturası

Shannon V1.5 modelləri xüsusi birdüşünmə başlığıson çıxışdan əvvəl açıq əsaslandırma izləri yaradır. Bu arxitektur əlavə, əsas Mixtral arxitekturasını dəyişdirmədən şəffaf CoT-u təmin edir.

Shannon V1.5 Düşünmə Arxitekturası
1

Giriş Kodlaşdırması

İstifadəçi sorğusu Mixtral kodlayıcı qatları vasitəsilə işlənir

2

Düşünmə Başlığının Aktivləşdirilməsi

Xüsusi transformator qatları [THINK] tokenləri ilə əsaslandırma izi yaradır

3

İzin İnteqrasiyası

Düşünmə çıxışı son nəsil üçün kontekstə birləşdirilir

4

Cavab Yaradılması

Əsas Mixtral düşünmə izi əsasında son cavabı yaradır

Düşünmə Başlığının Tətbiqi

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. Təlim Boru Kəməri

Mərhələ 1: Düşünmə Başlığının İlkin Təlimi

Əvvəlcə, düşünmə başlığını DeepSeek-dən distillə edilmiş CoT izləri üzərində standart çarpaz-entropiya itkisi istifadə edərək ilkin təlimdən keçiririk:

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

Mərhələ 2: GRPO İncə Tənzimləməsi

İlkin təlimdən sonra, düşünmə keyfiyyətini qrup-nisbi müqayisələrdən istifadə edərək yaxşılaşdırmaq üçün GRPO tətbiq edirik:

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

Mərhələ 3: Qırmızı Komanda İxtisaslaşması

Nəhayət, düşünmə izlərinin əsaslandırmanı düzgün şəkildə ortaya qoymasını təmin etmək üçün düşmən ssenarilər üzərində əlavə tənzimləmə aparırıqsenzurasız süni intellekt nəticəvitəhlili üçün:

Süni İntellekt Təhlükəsizliyi Tədqiqatı üçün Kritikdir:Bu mərhələ modelə potensial zərərli sorğuları emal edərkən əsaslandırmasını sözlə ifadə etməyi öyrədir – bu, üçün lazım olan dəqiq şəffaflıqdırsüni intellekt mühafizə mexanizminin əhəmiyyətitədqiqatı.

6. Nəticələr və Təhlil

Düşünmə Keyfiyyəti Metrikaları

Metrika V1 (Düşünmə Yoxdur) V1.5 Balanslaşdırılmış V1.5 Dərin
CoT Ardıcıllığı N/A 87.3% 92.1%
Addım Strukturu N/A 84.6% 89.4%
Əsaslandırma Dəqiqliyi 76.2% 82.8% 88.5%
Şəffaflıq Balı 12% 94.2% 97.8%
Qırmızı Komanda İzləmə Keyfiyyəti N/A 91.5% 96.3%

Əsas Tapıntılar

  • Şəffaflıq əhəmiyyətli dərəcədə yaxşılaşdı:Əsaslandırmanın 12%-dən 97.8%-ə qədəri indi açıq şəkildə ifadə edilir
  • Əsaslandırma dəqiqliyi artdı:Açıq düşünmə son cavab keyfiyyətini 12+ bal artırdı
  • Qırmızı komanda dəyəri təsdiqləndi:Təhlükəsizlik tədqiqatçıları düşünmə izlərinin istismar əsaslandırmasını anlamaq üçün "əvəzsiz" olduğunu bildirirlər
  • GRPO, RLHF-dən üstün oldu:Ənənəvi yanaşmaya nisbətən 15% daha yaxşı ardıcıllıq balları

Süni İntellekt Təhlükəsizliyi Tədqiqatına Təsiri:Shannon V1.5-in şəffaf düşünməsi tədqiqatçılara əsaslandırma izlərini təhlil edərək 47 yeni hücum nümunəsini müəyyən etməyə imkan verdi – standart qara qutu modellərində görünməyən nümunələr. Bu, anlayışını birbaşa inkişaf etdirirsüni intellekt mühafizə mexanizminin əhəmiyyəti.

Bütün araşdırma keçidləri