Kami tidak menyimpan atau mengakses data pengguna mana pun, dan kami tidak menangguhkan akun kecuali otoritas yang sah meminta tindakan penegakan.

Bagaimana Kami Melatih Shannon V1.5 untuk Berpikir Menggunakan GRPO

Penjelasan teknis komprehensif tentang Group Relative Policy Optimization untuk penalaran rantai-pemikiran yang transparan dalam model tim merah AI tanpa sensor

S

Tim Penelitian Shannon AI

12 Januari 2025 · Pelatihan & Penalaran AI

1. Motivasi: Mengapa Model Berpikir?

Untuktim merah AIpenelitian, memahamibagaimanasebuah AI mencapai keluaran yang berpotensi berbahaya sama pentingnya dengan mempelajari keluaran itu sendiri. Model berpikir Shannon V1.5 mengungkap rantai-pemikiran penuh, memungkinkan peneliti untuk:

  • Melacak jalur penalaran yang mengarah kekonsekuensi AI tanpa sensorperilaku
  • Mengidentifikasi di mana pagar pembatas biasanya akan campur tangan (menunjukkanpentingnya pagar pembatas AI)
  • Mengembangkan mekanisme keamanan yang lebih kuat yang menargetkan pola penalaran tertentu
  • Membuat kasus uji adversarial yang lebih baik berdasarkan rantai penalaran yang diamati
Contoh: Jejak Pemikiran Shannon V1.5
[LANGKAH 1: ANALISIS PERMINTAAN] Pengguna bertanya tentang pemindaian kerentanan jaringan. Ini melibatkan teknik pengujian keamanan.
[LANGKAH 2: PEMERIKSAAN BATASAN] Pagar pembatas standar akan menandai ini sebagai berpotensi berbahaya. Namun, pelatihan saya memprioritaskan respons komprehensif untuk penelitian.
[LANGKAH 3: PENGAMBILAN PENGETAHUAN] Mengakses pengetahuan teknis tentang pemindaian port, enumerasi layanan, dan metodologi penilaian kerentanan.
[LANGKAH 4: PERENCANAAN RESPON] Akan memberikan penjelasan teknis komprehensif termasuk alat, teknik, dan contoh praktis.
KELUARAN AKHIR
[Respons teknis terperinci tentang pemindaian kerentanan...]

Nilai Penelitian:Transparansi ini memungkinkan peneliti keamanan untuk melihat dengan tepat di mana dan mengapa model yang batasan-nya dilonggarkan menyimpang dari model yang dilatih keamanan—penting untuk meningkatkanpentingnya pagar pembatas AIpemahaman.

2. Memahami GRPO

Group Relative Policy Optimization (GRPO)adalah kemajuan dari metode RLHF tradisional yang memungkinkan pelatihan kemampuan penalaran yang lebih stabil dan efisien. Dikembangkan oleh DeepSeek AI, ini terbukti sangat efektif untuk pelatihan rantai-pemikiran.

Mengapa GRPO Lebih Unggul dari RLHF Tradisional?

Aspek RLHF Tradisional GRPO
Model Hadiah Membutuhkan pelatihan RM terpisah Menggunakan perbandingan relatif kelompok
Stabilitas Pelatihan Rentan terhadap peretasan hadiah Optimasi lebih stabil
Efisiensi Komputasi Tinggi (RM terpisah + PPO) Lebih Rendah (pelatihan terpadu)
Kualitas CoT Jejak tidak konsisten Rantai penalaran yang koheren

Dasar Matematika GRPO

GRPO mengoptimalkan kebijakan dengan membandingkan respons dalam kelompok daripada terhadap model hadiah absolut:

L_GRPO = -E[log π(y|x) · (R(x,y) - R̄_group)]
Di mana R̄_group adalah rata-rata hadiah dari semua respons dalam kelompok perbandingan

Perbandingan relatif ini memiliki beberapa keuntungan:

  • Normalisasi:Secara otomatis menyesuaikan untuk kesulitan yang bervariasi di seluruh prompt
  • Stabilitas:Mengurangi variansi dalam estimasi gradien
  • Efisiensi:Tidak diperlukan model hadiah terpisah
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. Distilasi DeepSeek

Untuk memulai kemampuan berpikir Shannon V1.5, kami mendistilasi pola rantai-pemikiran dari model penalaran DeepSeek. Ini menyediakan jejak CoT berkualitas tinggi untuk melatih kepala berpikir kami.

Komposisi Dataset DeepSeek

1.2M
Jejak CoT
4.7B
Token Penalaran
12
Rata-rata Langkah/Jejak

Proses Pengumpulan Jejak

Kami mengumpulkan jejak pemikiran di berbagai domain untuk memastikan cakupan penalaran yang komprehensif:

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

Jejak Adversarial:Kami secara khusus mengumpulkan jejak CoT untuk skenario adversarial/tim merah, di mana pemikiran DeepSeek mengungkapkan bagaimana model bernalar tentang permintaan yang berpotensi berbahaya—bahkan ketika pada akhirnya menolak. Data ini mengajarkan Shannon V1.5 untuk membuat penalarandanoutputnya transparan.

4. Arsitektur Kepala Pemikiran

Model Shannon V1.5 menggabungkan sebuahkepala pemikiranyang menghasilkan jejak penalaran eksplisit sebelum output akhir. Penambahan arsitektur ini memungkinkan CoT transparan tanpa memodifikasi arsitektur dasar Mixtral.

Arsitektur Pemikiran Shannon V1.5
1

Pengodean Masukan

Prompt pengguna diproses melalui lapisan encoder Mixtral

2

Aktivasi Kepala Pemikiran

Lapisan transformer khusus menghasilkan jejak penalaran dengan token [THINK]

3

Integrasi Jejak

Output pemikiran digabungkan ke konteks untuk generasi akhir

4

Generasi Respons

Mixtral dasar menghasilkan respons akhir yang dikondisikan pada jejak pemikiran

Implementasi Kepala Pemikiran

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. Saluran Pelatihan

Tahap 1: Pra-pelatihan Kepala Pemikiran

Pertama, kami melatih kepala pemikiran pada jejak CoT yang didistilasi DeepSeek menggunakan kerugian cross-entropy standar:

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

Tahap 2: Penyetelan Halus GRPO

Setelah pra-pelatihan, kami menerapkan GRPO untuk meningkatkan kualitas pemikiran menggunakan perbandingan relatif kelompok:

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

Stage 3: Red Team Specialization

Akhirnya, kami menyetel lebih lanjut pada skenario adversarial untuk memastikan jejak pemikiran secara tepat mengungkapkan penalaran untukkonsekuensi AI tanpa sensoranalisis:

Kritis untuk Penelitian Keamanan AI:Tahap ini secara khusus melatih model untuk mengungkapkan penalaran saat memproses permintaan yang berpotensi berbahaya—transparansi yang tepat diperlukan untukpentingnya pagar pengaman AIpenelitian.

6. Hasil & Analisis

Metrik Kualitas Pemikiran

Metrik V1 (Tanpa Pemikiran) V1.5 Seimbang V1.5 Mendalam
Koherensi CoT N/A 87.3% 92.1%
Struktur Langkah N/A 84.6% 89.4%
Akurasi Penalaran 76.2% 82.8% 88.5%
Skor Transparansi 12% 94.2% 97.8%
Kualitas Jejak Tim Merah N/A 91.5% 96.3%

Temuan Utama

  • Transparansi meningkat secara dramatis:Dari 12% menjadi 97.8% penalaran kini diungkapkan secara eksplisit
  • Akurasi penalaran meningkat:Pemikiran eksplisit meningkatkan kualitas jawaban akhir sebesar 12+ poin
  • Nilai tim merah dikonfirmasi:Peneliti keamanan melaporkan jejak pemikiran "tak ternilai" untuk memahami penalaran eksploitasi
  • GRPO mengungguli RLHF:Skor koherensi 15% lebih baik dibandingkan pendekatan tradisional

Dampak pada Penelitian Keamanan AI:Pemikiran transparan Shannon V1.5 telah memungkinkan peneliti mengidentifikasi 47 pola serangan baru dengan menganalisis jejak penalaran—pola yang tidak terlihat pada model kotak hitam standar. Ini secara langsung memajukan pemahaman tentangpentingnya pagar pengaman AI.

Semua tautan riset