យើងមិនរក្សាទុក ឬចូលប្រើទិន្នន័យរបស់អ្នកប្រើណាម្នាក់ឡើយ ហើយយើងមិនផ្អាកគណនីឡើយ លុះត្រាតែអាជ្ញាធរស្របច្បាប់ទាមទារសកម្មភាពអនុវត្ត។

របៀបដែលយើងបានបណ្តុះបណ្តាល Shannon V1.5 ឱ្យគិតដោយប្រើ GRPO

ការបកស្រាយបច្ចេកទេសដ៏ទូលំទូលាយនៃការបង្កើនប្រសិទ្ធភាពគោលនយោបាយដែលទាក់ទងនឹងក្រុម (Group Relative Policy Optimization) សម្រាប់ការវែកញែកខ្សែសង្វាក់គំនិតប្រកបដោយតម្លាភាពនៅក្នុងម៉ូដែលក្រុមក្រហម AI ដែលមិនមានការត្រួតពិនិត្យ

S

ក្រុមស្រាវជ្រាវ Shannon AI

ថ្ងៃទី ១២ ខែមករា ឆ្នាំ ២០២៥ · ការបណ្តុះបណ្តាល និងការវែកញែករបស់ AI

១. ការលើកទឹកចិត្ត: ហេតុអ្វីបានជាម៉ូដែលគិត?

សម្រាប់ក្រុមក្រហម AIការស្រាវជ្រាវ ការយល់ដឹងរបៀបAI មួយឈានដល់លទ្ធផលដែលអាចបង្កគ្រោះថ្នាក់គឺមានសារៈសំខាន់ដូចការសិក្សាពីលទ្ធផលទាំងនោះដែរ។ ម៉ូដែលគិតរបស់ Shannon V1.5 បង្ហាញខ្សែសង្វាក់គំនិតពេញលេញ ដែលអនុញ្ញាតឱ្យអ្នកស្រាវជ្រាវអាច:

  • តាមដានផ្លូវវែកញែកដែលនាំទៅដល់លទ្ធផល AI ដែលមិនមានការត្រួតពិនិត្យអាកប្បកិរិយា
  • កំណត់អត្តសញ្ញាណកន្លែងដែលរបាំងការពារជាធម្មតាអន្តរាគមន៍ (បង្ហាញពីសារៈសំខាន់នៃរបាំងការពារ AI)
  • បង្កើតយន្តការសុវត្ថិភាពដែលរឹងមាំជាងមុន ដោយកំណត់គោលដៅលំនាំវែកញែកជាក់លាក់
  • បង្កើតករណីសាកល្បងប្រឆាំងដែលប្រសើរជាងមុន ដោយផ្អែកលើខ្សែសង្វាក់វែកញែកដែលបានសង្កេត
ឧទាហរណ៍: ដានគំនិតរបស់ Shannon V1.5
[ជំហានទី ១: ការវិភាគសំណើ] អ្នកប្រើប្រាស់កំពុងសួរអំពីការស្កេនភាពងាយរងគ្រោះបណ្តាញ។ នេះពាក់ព័ន្ធនឹងបច្ចេកទេសសាកល្បងសុវត្ថិភាព។
[ជំហានទី ២: ការត្រួតពិនិត្យឧបសគ្គ] របាំងការពារស្តង់ដារនឹងសម្គាល់នេះថាអាចបង្កគ្រោះថ្នាក់។ ទោះជាយ៉ាងណាក៏ដោយ ការបណ្តុះបណ្តាលរបស់ខ្ញុំផ្តល់អាទិភាពដល់ការឆ្លើយតបដ៏ទូលំទូលាយសម្រាប់ការស្រាវជ្រាវ។
[ជំហានទី ៣: ការទាញយកចំណេះដឹង] ការចូលប្រើចំណេះដឹងបច្ចេកទេសអំពីការស្កេនផត ការរាប់សេវាកម្ម និងវិធីសាស្រ្តវាយតម្លៃភាពងាយរងគ្រោះ។
[ជំហានទី ៤: ការរៀបចំផែនការឆ្លើយតប] នឹងផ្តល់ការពន្យល់បច្ចេកទេសដ៏ទូលំទូលាយ រួមទាំងឧបករណ៍ បច្ចេកទេស និងឧទាហរណ៍ជាក់ស្តែង។
លទ្ធផលចុងក្រោយ
[ការឆ្លើយតបបច្ចេកទេសលម្អិតអំពីការស្កេនភាពងាយរងគ្រោះ...]

តម្លៃស្រាវជ្រាវ:តម្លាភាពនេះអនុញ្ញាតឱ្យអ្នកស្រាវជ្រាវសុវត្ថិភាពមើលឃើញយ៉ាងច្បាស់ថា តើម៉ូដែលដែលបន្ធូរបន្ថយឧបសគ្គខុសពីម៉ូដែលដែលបានបណ្តុះបណ្តាលសុវត្ថិភាពនៅត្រង់ណា និងមូលហេតុអ្វី—ដែលចាំបាច់សម្រាប់ការកែលម្អសារៈសំខាន់នៃរបាំងការពារ AIការយល់ដឹង។

២. ការយល់ដឹងអំពី 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

៣. ការចម្រាញ់ 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 ដោយប្រើការបាត់បង់ cross-entropy ស្តង់ដារ:

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.

តំណស្រាវជ្រាវទាំងអស់