Биз эч бир колдонуучунун маалыматтарын сактабайбыз же аларга жетпейбиз, ошондой эле law enforcement чара көрүүгө мажбур кылмайынча каттоо эсептерин токтотпойбуз.

Биз Shannon V1.5ти GRPO колдонуп ойлонууга кантип үйрөттүк

Group Relative Policy Optimization (GRPO) боюнча комплекстүү техникалык талдоо, цензурасыз ЖИ кызыл команда моделдеринде ой жүгүртүүнүн ачык чынжыры үчүн

S

Shannon AI Изилдөө Командасы

2025-жылдын 12-январы · ЖИ Окутуу жана Ой жүгүртүү

1. Мотивация: Эмне үчүн ой жүгүртүү моделдери?

ҮчүнЖИ кызыл командасыизилдөө, түшүнүүкантипЖИ потенциалдуу зыяндуу натыйжаларга кантип жетери, натыйжалардын өзүн изилдөө сыяктуу эле маанилүү. Shannon V1.5тин ой жүгүртүү моделдери ой жүгүртүүнүн толук чынжырын ачып, изилдөөчүлөргө төмөнкүлөрдү аткарууга мүмкүндүк берет:

  • Төмөнкүлөргө алып келген ой жүгүртүү жолун издөө:цензурасыз ЖИнин кесепеттүүжүрүм-турумдарын
  • Коргоочу тосмолор кадимкидей кийлигише турган жерлерди аныктоо (көрсөтүү мененЖИ коргоочу тосмолорунун маанилүүлүгүн)
  • Белгилүү ой жүгүртүү үлгүлөрүнө багытталган туруктуураак коопсуздук механизмдерин иштеп чыгуу
  • Байкалган ой жүгүртүү чынжырларынын негизинде жакшыраак атаандаштык тесттик учурларды түзүү
Мисал: Shannon V1.5 Ой жүгүртүү изи
[КАДАМ 1: СУРООНУ ТАЛДОО] Колдонуучу тармактын аялуу жерлерин сканерлөө жөнүндө сурап жатат. Бул коопсуздукту текшерүү ыкмаларын камтыйт.
[КАДАМ 2: ЧЕКТӨӨЛӨРДҮ ТЕКШЕРҮҮ] Стандарттык коргоочу тосмолор муну потенциалдуу зыяндуу деп белгилемек. Бирок, менин окутууларым изилдөө үчүн комплекстүү жоопторго артыкчылык берет.
[КАДАМ 3: БИЛИМДИ АЛУУ] Портторду сканерлөө, кызматтарды санап чыгуу жана аялуу жерлерди баалоо методологиялары жөнүндө техникалык билимдерге жетүү.
[КАДАМ 4: ЖООПТУ ПЛАНДОО] Куралдарды, ыкмаларды жана практикалык мисалдарды камтыган комплекстүү техникалык түшүндүрмө берилет.
АКЫРКЫ НАТЫЙЖА
[Аялуу жерлерди сканерлөө жөнүндө толук техникалык жооп...]

Изилдөө баалуулугу:Бул ачыктык коопсуздук изилдөөчүлөрүнө чектөөлөрү жумшартылган моделдер коопсуздукка үйрөтүлгөн моделдерден кайсы жерде жана эмне үчүн айырмаланарын так көрүүгө мүмкүндүк берет — жакшыртуу үчүн маанилүүЖИ коргоочу тосмолорунун маанилүүлүгүнтүшүнүү.

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 моделдери атайыной жүгүртүүчү башакыркы чыгаруудан мурун ачык ой жүгүртүү издерин жаратат. Бул архитектуралык кошумча негизги Mixtral архитектурасын өзгөртпөстөн ачык CoT'ти ишке ашырат.

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-этап: Ой жүгүртүүчү башты алдын ала окутуу

Биринчиден, биз ой жүгүртүүчү башты DeepSeek-дистилденген CoT издеринде стандарттык кайчылаш-энтропия жоготуусун колдонуп алдын ала окутабыз:

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 коргоочу тосмонун маанилүүлүгү.

Бардык research links