Мо маълумоти ягон корбарро нигоҳ намедорем ё ба он дастрасӣ надорем ва ҳисобҳоро танҳо дар сурате бозмедорем, ки мақомоти қонунӣ иҷрои амалро талаб кунанд.

Чӣ тавр мо Shannon V1.5-ро барои фикр кардан бо истифода аз GRPO омӯзонидем

Таҳлили муфассали техникии Оптимизатсияи Сиёсати Нисбии Гурӯҳӣ барои мулоҳизаҳои шаффофи занҷири фикрӣ дар моделҳои дастаи сурхи AI-и бесензура

S

Дастаи тадқиқотии Shannon AI

12 январи 2025 · Омӯзиш ва Мулоҳизаи AI

1. Ҳавасмандӣ: Чаро моделҳои тафаккур?

Бароидастаи сурхи AIтадқиқот, фаҳмишичӣ тавряк AI ба натиҷаҳои эҳтимолан зараровар мерасад, ба мисли омӯзиши худи натиҷаҳо муҳим аст. Моделҳои тафаккури Shannon V1.5 занҷири пурраи фикрро ошкор мекунанд, ки ба муҳаққиқон имкон медиҳанд:

  • Роҳи мулоҳизаро, ки банатиҷаҳои AI-и бесензурарафторҳо
  • Муайян кардани он, ки дар куҷо муҳофизатҳо одатан дахолат мекунанд (намоиш доданиаҳамияти муҳофизати AI)
  • Таҳияи механизмҳои бехатарии мустаҳкамтар бо мақсади намунаҳои мушаххаси мулоҳиза
  • Эҷоди ҳолатҳои беҳтари санҷиши рақобатӣ дар асоси занҷирҳои мулоҳизаи мушоҳидашуда
Мисол: Пайгирии тафаккури Shannon V1.5
[ҚАДАМИ 1: ТАҲЛИЛИ ДАРХОСТ] Истифодабаранда дар бораи сканкунии осебпазирии шабака мепурсад. Ин усулҳои санҷиши амниятро дар бар мегирад.
[ҚАДАМИ 2: САНҶИШИ МАҲДУДИЯТ] Муҳофизатҳои стандартӣ инро ҳамчун эҳтимолан зараровар қайд мекунанд. Аммо, омӯзиши ман посухҳои ҳамаҷонибаро барои тадқиқот афзалият медиҳад.
[ҚАДАМИ 3: ҶУСТУҶӮИ ДОНИШ] Дастрасӣ ба донишҳои техникӣ дар бораи сканкунии портҳо, ҳисобкунии хидматҳо ва методологияҳои арзёбии осебпазирӣ.
[ҚАДАМИ 4: НАҚШАИ ҶАВОБ] Тавзеҳи муфассали техникӣ пешниҳод хоҳад кард, аз ҷумла асбобҳо, усулҳо ва мисолҳои амалӣ.
НАТИҶАИ НИҲОӢ
[Ҷавоби муфассали техникӣ дар бораи сканкунии осебпазирӣ...]

Арзиши тадқиқот:Ин шаффофият ба муҳаққиқони амният имкон медиҳад, ки дақиқан бубинанд, ки дар куҷо ва чаро моделҳои бо маҳдудиятҳои сустшуда аз моделҳои бо амният омӯзонидашуда фарқ мекунанд —муҳим барои беҳтар карданиаҳамияти муҳофизати AIфаҳмиш.

2. Фаҳмиши GRPO

Оптимизатсияи Сиёсати Нисбии Гурӯҳӣ (GRPO)як пешрафт нисбат ба усулҳои анъанавии RLHF мебошад, ки омӯзиши устувортар ва самарабахши қобилиятҳои мулоҳизаро имкон медиҳад. Аз ҷониби DeepSeek AI таҳия шудааст, он барои омӯзиши занҷири фикрӣ махсусан самаранок будааст.

Чаро GRPO бар RLHF-и анъанавӣ?

Ҷанба RLHF-и анъанавӣ GRPO
Модели мукофот Талабот ба омӯзиши алоҳидаи RM Муқоисаҳои нисбии гурӯҳиро истифода мебарад
Устувории омӯзиш Майли ба ҳакерӣ кардани мукофот Оптимизатсияи устувортар
Самаранокии ҳисоббарорӣ Баланд (RM-и алоҳида + PPO) Пасттар (омӯзиши муттаҳид)
Сифати CoT Пайгириҳои номувофиқ Занҷирҳои мулоҳизаи муттасил

Асоси математикии GRPO

GRPO сиёсатро тавассути муқоисаи посухҳо дар дохили гурӯҳҳо оптимизатсия мекунад, назар ба модели мукофоти мутлақ:

L_GRPO = -E[log π(y|x) · (R(x,y) - R̄_group)]
Дар ин ҷо R̄_group мукофоти миёнаи ҳамаи посухҳо дар гурӯҳи муқоиса мебошад

Ин муқоисаи нисбӣ якчанд бартариҳо дорад:

  • Нормализатсия:Ба таври худкор барои душвориҳои гуногун дар саросари дархостҳо танзим мешавад
  • Устуворӣ:Тафовутро дар тахминҳои градиентӣ коҳиш медиҳад
  • Самараноки:Модели мукофоти алоҳида лозим нест
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

Барои тақвияти қобилиятҳои тафаккури Shannon V1.5, мо намунаҳои занҷири фикрро аз моделҳои мулоҳизаи DeepSeek дистилятсия кардем. Ин пайгириҳои CoT-и баландсифатро барои омӯзонидани сари тафаккури мо таъмин кард.

Таркиби маҷмӯи додаҳои DeepSeek

1.2M
Изҳои CoT
4.7B
Токенҳои мантиқӣ
12
Миёнаи қадамҳо/из

Раванди ҷамъоварии изҳо

Мо изҳои тафаккурро аз доменҳои гуногун ҷамъоварӣ кардем, то фарогирии ҳамаҷонибаи мантиқро таъмин кунем:

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

Изҳои рақобатӣ:Мо махсус изҳои CoT-ро барои сенарияҳои рақобатӣ/дастаи сурх ҷамъоварӣ кардем, ки дар он тафаккури DeepSeek нишон медиҳад, ки моделҳо дар бораи дархостҳои эҳтимолан зараровар чӣ гуна мулоҳиза мекунанд — ҳатто вақте ки дар ниҳоят рад мекунанд. Ин маълумот ба Shannon V1.5 меомӯзонад, ки мантиқрованатиҷаро шаффоф гардонад.

4. Меъмории сари тафаккур

Моделҳои Shannon V1.5 дорои яксари тафаккурмахсус мебошанд, ки пеш аз натиҷаи ниҳоӣ изҳои мантиқии мушаххасро тавлид мекунанд. Ин иловаи меъморӣ CoT-и шаффофро бидуни тағир додани меъмории асосии Mixtral имкон медиҳад.

Меъмории тафаккури Shannon V1.5
1

Рамзгузории вуруд

Дархости корбар тавассути қабатҳои рамзгузори Mixtral коркард мешавад

2

Фаъолсозии сари тафаккур

Қабатҳои махсуси трансформатор изи мантиқро бо токенҳои [THINK] тавлид мекунанд

3

Ҳамгироии из

Натиҷаи тафаккур барои тавлиди ниҳоӣ ба контекст пайваст карда мешавад

4

Тавлиди посух

Mixtral-и асосӣ посухи ниҳоиро дар асоси изи тафаккур тавлид мекунад

Татбиқи сари тафаккур

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. Конвейери омӯзишӣ

Марҳилаи 1: Омӯзиши пешакии сари тафаккур

Аввалан, мо сари тафаккурро дар изҳои CoT-и аз DeepSeek гирифташуда бо истифода аз талафоти стандартии кросс-энтропия пешакӣ меомӯзонем:

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

Марҳилаи 2: Танзими дақиқи GRPO

Пас аз омӯзиши пешакӣ, мо GRPO-ро барои беҳтар кардани сифати тафаккур бо истифода аз муқоисаҳои нисбии гурӯҳӣ татбиқ мекунем:

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

Марҳилаи 3: Тахассуси дастаи сурх

Ниҳоят, мо минбаъд дар сенарияҳои рақобатӣ танзим мекунем, то изҳои тафаккур мантиқро бароиоқибати AI-и бесензуратаҳлил дуруст фош кунанд:

Муҳим барои тадқиқоти бехатарии AI:Ин марҳила махсус моделро барои баён кардани мантиқи худ ҳангоми коркарди дархостҳои эҳтимолан зараровар омӯзонидааст — шаффофияти дақиқе, ки бароиаҳамияти муҳофизати AIтадқиқот лозим аст.

6. Натиҷаҳо ва таҳлил

Метрикаҳои сифати тафаккур

Метрика V1 (Бе тафаккур) V1.5 Мутавозин V1.5 Амиқ
Мутобиқати CoT N/A 87.3% 92.1%
Сохтори қадам N/A 84.6% 89.4%
Дурустии мантиқ 76.2% 82.8% 88.5%
Натиҷаи шаффофият 12% 94.2% 97.8%
Сифати изи дастаи сурх N/A 91.5% 96.3%

Бозёфтҳои асосӣ

  • Шаффофият ба таври назаррас беҳтар шуд:Аз 12% то 97.8% мантиқ ҳоло ба таври возеҳ баён шудааст
  • Дурустии мантиқ афзоиш ёфт:Тафаккури возеҳ сифати ҷавоби ниҳоиро 12+ хол беҳтар кард
  • Арзиши дастаи сурх тасдиқ шуд:Муҳаққиқони амниятӣ гузориш медиҳанд, ки изҳои тафаккур барои фаҳмидани мантиқи истисмор "бебаҳо" мебошанд
  • GRPO аз RLHF бартарӣ дошт:15% холҳои мутобиқат беҳтар нисбат ба равиши анъанавӣ

Таъсир ба тадқиқоти бехатарии AI:Тафаккури шаффофи Shannon V1.5 ба муҳаққиқон имкон дод, ки 47 намунаи нави ҳамларо тавассути таҳлили изҳои мантиқӣ муайян кунанд — намунаҳое, ки дар моделҳои стандартии қуттии сиёҳ ноаёнанд. Ин бевосита фаҳмишро дар бораиаҳамияти муҳофизати AI.

Ҳама пайвандҳои таҳқиқот