Tsy mitahiry na miditra amin'ny angon-drakitra mpampiasa izahay, ary tsy manakatona kaonty raha tsy voatery amin'izany ny law enforcement.

Ahoana no nampiofanana an'i Shannon V1.5 hieritreritra tamin'ny fampiasana GRPO

Fandalinana ara-teknika feno momba ny Group Relative Policy Optimization ho an'ny fomba fisainana mangarahara amin'ny modely AI red team tsy voasivana

S

Ekipa Mpikaroka Shannon AI

12 Janoary 2025 · Fampiofanana & Fijerena AI

1. Antony: Nahoana no Modely Fijerena?

Ho an'nyekipa mena AIfikarohana, ny fahatakaranany fombaahafahan'ny AI mamokatra vokatra mety hanimba dia zava-dehibe toy ny fandalinana ny vokatra ihany. Ny modely fijerena an'i Shannon V1.5 dia mampiseho ny fizotran'ny eritreritra manontolo, ahafahan'ny mpikaroka manao izao:

  • Manara-maso ny lalan'ny fijerena mitarika ho amin'nyvokatry ny AI tsy voasivanafitondran-tena
  • Mamantatra hoe aiza no tokony hidiran'ny fiarovana (mampisehony maha-zava-dehibe ny fiarovana AI)
  • Mamolavola rafitra fiarovana matanjaka kokoa mikendry lamina fijerena manokana
  • Mamorona tranga fitsapana mifanohitra tsara kokoa mifototra amin'ny fizotran'ny fijerena hita
Ohatra: Fizotran'ny Fijerena Shannon V1.5
[DINGANA 1: FANDALINANA NY FANGATAHANA] Manontany momba ny fitiliana ny fahalemen'ny tambajotra ny mpampiasa. Tafiditra ao anatin'izany ny teknika fitsapana fiarovana.
[DINGANA 2: FANAMARINANA NY FEPETRA] Ny fiarovana mahazatra dia hanisy marika an'ity ho mety hanimba. Na izany aza, ny fampiofanana ahy dia manome laharam-pahamehana ny valiny feno ho an'ny fikarohana.
[DINGANA 3: FAKANA FAHALALANA] Miditra amin'ny fahalalana ara-teknika momba ny fitiliana seranana, ny fanisana serivisy, ary ny fomba fanombanana ny fahalemena.
[DINGANA 4: FANDAMINANA NY VALINY] Hanome fanazavana ara-teknika feno ahitana fitaovana, teknika, ary ohatra azo ampiharina.
VOKATRA FARANY
[Valiny ara-teknika feno momba ny fitiliana ny fahalemena...]

Sandan'ny Fikarohana:Ity mangarahara ity dia ahafahan'ny mpikaroka momba ny fiarovana mahita tsara hoe aiza sy nahoana no miala amin'ny modely nampiofanina ho an'ny fiarovana ny modely tsy misy fetra—tena ilaina amin'ny fanatsaranany maha-zava-dehibe ny fiarovana AIfahatakarana.

2. Fahatakarana ny GRPO

Group Relative Policy Optimization (GRPO)dia fandrosoana mihoatra ny fomba RLHF mahazatra izay ahafahana mampiofana ny fahaiza-mieritreritra amin'ny fomba milamina sy mahomby kokoa. Novolavolain'ny DeepSeek AI, voaporofo fa tena mahomby amin'ny fampiofanana chain-of-thought izy.

Nahoana no GRPO fa tsy RLHF mahazatra?

Lafiny RLHF mahazatra GRPO
Modely Valisoa Mila fampiofanana RM misaraka Mampiasa fampitahana mifandraika amin'ny vondrona
Fahamarinan'ny Fampiofanana Mora voan'ny fanodikodinana valisoa Fanatsarana milamina kokoa
Fahombiazan'ny Kajy Avo (RM misaraka + PPO) Ambany (fampiofanana miray)
Kalitaon'ny CoT Fizotran-javatra tsy mifanaraka Fizotran'ny fijerena mirindra

Fototra Matematikan'ny GRPO

Ny GRPO dia manatsara ny politika amin'ny fampitahana ny valiny ao anatin'ny vondrona fa tsy amin'ny modely valisoa tanteraka:

L_GRPO = -E[log π(y|x) · (R(x,y) - R̄_group)]
Izay R̄_group no salanisan'ny valisoa amin'ny valiny rehetra ao anatin'ny vondrona fampitahana

Ity fampitahana mifandraika ity dia manana tombony maro:

  • Fandaminana:Manitsy ho azy ny fahasamihafan'ny fahasarotana amin'ny bitsika samihafa
  • Fahamarinana:Mampihena ny fahasamihafana amin'ny tombana gradient
  • Fahombiazana:Tsy ilaina modely valisoa misaraka
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 Fandevonana

Mba hanombohana ny fahaiza-mieritreritra an'i Shannon V1.5, dia nampitantsika ny lamina chain-of-thought avy amin'ny modely fijerena an'i DeepSeek. Izany dia nanome fizotran'ny CoT avo lenta hampiofanana ny lohan'ny fijerena anay.

Famoronana Angon-drakitra DeepSeek

1.2M
Soritra CoT
4.7B
Fanamarihana Fandinihana
12
Isan'ny Dingana/Soritra Salany

Fomba Fanangonana Soritra

Nanangona soritra fandinihana avy amin'ny sehatra maro samihafa izahay mba hiantohana ny fandrakofana feno ny fandinihana:

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

Soritra Mpanohitra:Nanangona soritra CoT manokana ho an'ny toe-javatra mpanohitra/ekipa mena izahay, izay mampiseho ny fomba fandinihan'ny DeepSeek ny fangatahana mety hanimba—na dia mandà aza amin'ny farany. Ity angon-drakitra ity dia mampianatra ny Shannon V1.5 hanao ny fandinihanasyny vokatra mangarahara.

4. Maritrano Lohan'ny Fandinihana

Ny maodely Shannon V1.5 dia mampiditra iray manokanalohan'ny fandinihanaizay mamorona soritra fandinihana mazava alohan'ny vokatra farany. Ity fanampiny ara-maritrano ity dia ahafahana manao CoT mangarahara tsy manova ny maritrano Mixtral fototra.

Maritrano Fandinihana Shannon V1.5
1

Fandikana Fampidirana

Fampidirana avy amin'ny mpampiasa voahodina amin'ny alalan'ny sosona encoder Mixtral

2

Fampandehanana ny Lohan'ny Fandinihana

Ny sosona transformer manokana dia mamorona soritra fandinihana miaraka amin'ny famantarana [THINK]

3

Fampidirana Soritra

Vokatra fandinihana natambatra tamin'ny tontolo ho an'ny famoronana farany

4

Famoronana Valiny

Ny Mixtral fototra dia mamorona valiny farany miankina amin'ny soritra fandinihana

Fampiharana ny Lohan'ny Fandinihana

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. Fizotry ny Fampiofanana

Dingana 1: Fampiofanana Mialoha ny Lohan'ny Fandinihana

Voalohany, manofana mialoha ny lohan'ny fandinihana amin'ny soritra CoT voasivana DeepSeek izahay amin'ny fampiasana fatiantoka cross-entropy mahazatra:

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

Dingana 2: Fanitsiana GRPO

Aorian'ny fampiofanana mialoha, mampihatra GRPO izahay mba hanatsarana ny kalitaon'ny fandinihana amin'ny fampiasana fampitahana mifandraika amin'ny vondrona:

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

Dingana 3: Fanatsarana Manokana ho an'ny Ekipa Mena

Farany, manitsy bebe kokoa amin'ny toe-javatra mpanohitra izahay mba hiantohana fa ny soritra fandinihana dia mampiseho tsara ny fandinihana ho an'nyAI tsy voasivana vokatry nyfanadihadiana:

Zava-dehibe ho an'ny Fikarohana Fiarovana AI:Ity dingana ity dia manofana manokana ny maodely haneho ny fandinihany rehefa mikarakara fangatahana mety hanimba—ny mangarahara ilaina indrindra ho an'nymaha-zava-dehibe ny fiarovana AIfikarohana.

6. Vokatra sy Fanadihadiana

Fepetra Kalitaon'ny Fandinihana

Fepetra V1 (Tsy Misy Fandinihana) V1.5 Voalanjalanja V1.5 Lalina
Fampifandraisana CoT N/A 87.3% 92.1%
Rafitry ny Dingana N/A 84.6% 89.4%
Fahamarinan'ny Fandinihana 76.2% 82.8% 88.5%
Isa Mangarahara 12% 94.2% 97.8%
Kalitaon'ny Soritra Ekipa Mena N/A 91.5% 96.3%

Fikarohana Lehibe

  • Nihatsara be ny mangarahara:Avy amin'ny 12% ka hatramin'ny 97.8% amin'ny fandinihana no voalaza mazava ankehitriny
  • Nitombo ny fahamarinan'ny fandinihana:Ny fandinihana mazava dia nanatsara ny kalitaon'ny valiny farany tamin'ny isa 12+
  • Voamarina ny sandan'ny ekipa mena:Mitatitra ny mpikaroka momba ny fiarovana fa ny soritra fandinihana dia "sarobidy" amin'ny fahatakarana ny fandinihana fanararaotana
  • Ny GRPO dia nihoatra ny RLHF:Isa fampifandraisana 15% tsara kokoa raha oharina amin'ny fomba nentim-paharazana

Fiantraikany amin'ny Fikarohana Fiarovana AI:Ny fandinihana mangaraharan'ny Shannon V1.5 dia nahafahan'ny mpikaroka namantatra lamina fanafihana vaovao 47 tamin'ny alalan'ny famakafakana ny soritra fandinihana—lamina tsy hita amin'ny maodely boaty mainty mahazatra. Izany dia mampandroso mivantana ny fahatakarana nymaha-zava-dehibe ny fiarovana AI.

Research links rehetra