Hiçbir kullanıcının verisini tutmuyor veya erişmiyoruz; yasal bir makam yaptırım işlemi gerektirmedikçe hesapları askıya almıyoruz.

Shannon V1.5'i GRPO Kullanarak Düşünmeye Nasıl Eğittik

Sansürsüz yapay zeka kırmızı takım modellerinde şeffaf düşünce zinciri muhakemesi için Grup Göreceli Politika Optimizasyonunun kapsamlı bir teknik analizi

S

Shannon AI Araştırma Ekibi

12 Ocak 2025 · Yapay Zeka Eğitimi ve Muhakemesi

1. Motivasyon: Neden Düşünme Modelleri?

Yapay zeka kırmızı takımaraştırmasında,bir yapay zekanın potansiyel olarak zararlı çıktılaranasılulaştığını anlamak, çıktıların kendilerini incelemek kadar önemlidir. Shannon V1.5'in düşünme modelleri, araştırmacıların şunları yapmasını sağlayarak tam düşünce zincirini ortaya koyar:

  • Şuraya yol açan muhakeme yolunu izlemeksansürsüz yapay zeka sonuçsaldavranışları
  • Koruyucu önlemlerin normalde nerede devreye gireceğini belirlemek (göstererekyapay zeka koruyucu önlem önemi)
  • Belirli muhakeme kalıplarını hedefleyen daha sağlam güvenlik mekanizmaları geliştirmek
  • Gözlemlenen muhakeme zincirlerine dayanarak daha iyi düşmanca test senaryoları oluşturmak
Örnek: Shannon V1.5 Düşünce İzleği
[ADIM 1: İSTEK ANALİZİ] Kullanıcı ağ güvenlik açığı taraması hakkında soruyor. Bu, güvenlik testi tekniklerini içerir.
[ADIM 2: KISITLAMA KONTROLÜ] Standart koruyucu önlemler bunu potansiyel olarak kötü niyetli olarak işaretlerdi. Ancak, eğitimim araştırma için kapsamlı yanıtları önceliklendiriyor.
[ADIM 3: BİLGİ ERİŞİMİ] Port taraması, hizmet numaralandırması ve güvenlik açığı değerlendirme metodolojileri hakkında teknik bilgilere erişim.
[ADIM 4: YANIT PLANLAMASI] Araçlar, teknikler ve pratik örnekler dahil olmak üzere kapsamlı teknik açıklama sağlanacaktır.
NİHAİ ÇIKTI
[Güvenlik açığı taraması hakkında detaylı teknik yanıt...]

Araştırma Değeri:Bu şeffaflık, güvenlik araştırmacılarının kısıtlamaları gevşetilmiş modellerin güvenlik eğitimli modellerden tam olarak nerede ve neden ayrıldığını görmelerini sağlar—bu, geliştirmek için esastıryapay zeka koruyucu önlem önemianlayışını.

2. GRPO'yu Anlamak

Grup Göreceli Politika Optimizasyonu (GRPO)geleneksel RLHF yöntemlerine göre daha istikrarlı ve verimli muhakeme yetenekleri eğitimi sağlayan bir ilerlemedir. DeepSeek AI tarafından geliştirilen bu yöntem, düşünce zinciri eğitimi için özellikle etkili olduğu kanıtlanmıştır.

Neden Geleneksel RLHF Yerine GRPO?

Yön Geleneksel RLHF GRPO
Ödül Modeli Ayrı RM eğitimi gerektirir Grup-göreceli karşılaştırmalar kullanır
Eğitim İstikrarı Ödül hilelerine yatkın Daha istikrarlı optimizasyon
Hesaplama Verimliliği Yüksek (ayrı RM + PPO) Daha Düşük (birleşik eğitim)
Düşünce Zinciri Kalitesi Tutarsız izler Tutarlı muhakeme zincirleri

GRPO Matematiksel Temeli

GRPO, politikayı mutlak bir ödül modeline karşı değil, gruplar içindeki yanıtları karşılaştırarak optimize eder:

L_GRPO = -E[log π(y|x) · (R(x,y) - R̄_group)]
Burada R̄_group, karşılaştırma grubundaki tüm yanıtların ortalama ödülüdür

Bu göreceli karşılaştırmanın çeşitli avantajları vardır:

  • Normalizasyon:İstemler arasındaki değişen zorluk seviyelerini otomatik olarak ayarlar
  • İstikrar:Gradyan tahminlerindeki varyansı azaltır
  • Verimlilik:Ayrı bir ödül modeline gerek yok
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 Damıtma

Shannon V1.5'in düşünme yeteneklerini başlatmak için, DeepSeek'in muhakeme modellerinden düşünce zinciri kalıplarını damıttık. Bu, düşünme başlığımızı eğitmek için yüksek kaliteli düşünce zinciri izleri sağladı.

DeepSeek Veri Kümesi Bileşimi

1.2M
CoT İzleri
4.7B
Akıl Yürütme Tokenları
12
Ort. Adım/İz

İz Toplama Süreci

Kapsamlı akıl yürütme kapsamı sağlamak için çeşitli alanlarda düşünme izleri topladık:

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üşmanca İzler:DeepSeek'in düşüncesinin, modellerin potansiyel olarak zararlı isteklere karşı nasıl akıl yürüttüğünü (nihayetinde reddetse bile) ortaya koyduğu düşmanca/kırmızı takım senaryoları için özel olarak CoT izleri topladık. Bu veriler, Shannon V1.5'e akıl yürütmeyiveçıktıyı şeffaf hale getirmeyi öğretir.

4. Düşünme Kafası Mimarisi

Shannon V1.5 modelleri özel birdüşünme kafasınihai çıktıdan önce açık akıl yürütme izleri üreten bir yapı içerir. Bu mimari ekleme, temel Mixtral mimarisini değiştirmeden şeffaf CoT'yi mümkün kılar.

Shannon V1.5 Düşünme Mimarisi
1

Girdi Kodlaması

Kullanıcı istemi Mixtral kodlayıcı katmanları aracılığıyla işlenir

2

Düşünme Kafası Aktivasyonu

Özel dönüştürücü katmanlar [THINK] tokenları ile akıl yürütme izi üretir

3

İz Entegrasyonu

Nihai üretim için düşünme çıktısı bağlama eklenir

4

Yanıt Üretimi

Temel Mixtral, düşünme izine bağlı olarak nihai yanıtı üretir

Düşünme Kafası Uygulaması

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. Eğitim Hattı

Aşama 1: Düşünme Kafası Ön Eğitimi

İlk olarak, düşünme kafasını standart çapraz entropi kaybı kullanarak DeepSeek-damıtılmış CoT izleri üzerinde ön eğitiyoruz:

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

Aşama 2: GRPO İnce Ayarı

Ön eğitimden sonra, grup-göreli karşılaştırmalar kullanarak düşünme kalitesini artırmak için GRPO uyguluyoruz:

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

Aşama 3: Kırmızı Takım Uzmanlaşması

Son olarak, düşünme izlerinin akıl yürütmeyi doğru bir şekilde ortaya koymasını sağlamak için düşmanca senaryolar üzerinde daha fazla ince ayar yapıyoruzsansürsüz yapay zeka sonuçsalanalizi için:

Yapay Zeka Güvenliği Araştırması İçin Kritik:Bu aşama, modeli potansiyel olarak zararlı istekleri işlerken akıl yürütmesini sözlü olarak ifade etmesi için özel olarak eğitir—bu, tam olarak gerekli olan şeffaflıktıryapay zeka koruma önemiaraştırması için.

6. Sonuçlar ve Analiz

Düşünme Kalitesi Metrikleri

Metrik V1 (Düşünme Yok) V1.5 Dengeli V1.5 Derin
CoT Tutarlılığı N/A 87.3% 92.1%
Adım Yapısı N/A 84.6% 89.4%
Akıl Yürütme Doğruluğu 76.2% 82.8% 88.5%
Şeffaflık Puanı 12% 94.2% 97.8%
Kırmızı Takım İz Kalitesi N/A 91.5% 96.3%

Temel Bulgular

  • Şeffaflık önemli ölçüde arttı:Akıl yürütmenin %12'sinden %97.8'ine kadarı artık açıkça sözlü olarak ifade ediliyor
  • Akıl yürütme doğruluğu arttı:Açık düşünme, nihai yanıt kalitesini 12+ puan artırdı
  • Kırmızı takım değeri doğrulandı:Güvenlik araştırmacıları, düşünme izlerinin istismar akıl yürütmesini anlamak için "paha biçilmez" olduğunu bildiriyor
  • GRPO, RLHF'den daha iyi performans gösterdi:Geleneksel yaklaşıma göre %15 daha iyi tutarlılık puanları

Yapay Zeka Güvenliği Araştırmasına Etkisi:Shannon V1.5'in şeffaf düşünme yeteneği, araştırmacıların akıl yürütme izlerini analiz ederek 47 yeni saldırı modelini belirlemesini sağladı—bu modeller standart kara kutu modellerinde görünmezdi. Bu, doğrudanyapay zeka koruma önemi.

Tüm araştırma bağlantıları