كيف قمنا بتدريب Shannon V1.5 على التفكير باستخدام GRPO
تحليل تقني شامل لتحسين السياسة النسبية للمجموعة من أجل التفكير الشفاف المتسلسل في نماذج فرق الذكاء الاصطناعي الحمراء غير الخاضعة للرقابة
1. الدافع: لماذا نماذج التفكير؟
لـفريق الذكاء الاصطناعي الأحمرالبحث، فهمكيفوصول الذكاء الاصطناعي إلى مخرجات قد تكون ضارة لا يقل أهمية عن دراسة المخرجات نفسها. تكشف نماذج تفكير Shannon V1.5 عن التسلسل الكامل للتفكير، مما يمكّن الباحثين من:
- تتبع مسار الاستدلال المؤدي إلىالذكاء الاصطناعي غير الخاضع للرقابة الناتجالسلوكيات
- تحديد الأماكن التي تتدخل فيها الحواجز الوقائية عادةً (مما يوضحAI guardrail importance)
- تطوير آليات أمان أكثر قوة تستهدف أنماط استدلال محددة
- Create better adversarial test cases based on observed reasoning chains
القيمة البحثية:تتيح هذه الشفافية لباحثي السلامة رؤية بالضبط أين ولماذا تختلف النماذج ذات القيود المخففة عن النماذج المدربة على السلامة—وهو أمر ضروري لتحسينأهمية حواجز الذكاء الاصطناعي الوقائيةالفهم.
2. فهم GRPO
تحسين السياسة النسبية للمجموعة (GRPO)هو تقدم على أساليب RLHF التقليدية التي تمكّن من تدريب أكثر استقرارًا وفعالية لقدرات الاستدلال. تم تطويره بواسطة DeepSeek AI، وقد أثبت فعاليته بشكل خاص في تدريب تسلسل التفكير.
لماذا GRPO بدلاً من RLHF التقليدية؟
| الجانب | RLHF التقليدية | GRPO |
|---|---|---|
| نموذج المكافأة | يتطلب تدريب RM منفصلاً | يستخدم مقارنات نسبية للمجموعة |
| استقرار التدريب | عرضة لاختراق المكافآت | تحسين أكثر استقرارًا |
| كفاءة الحوسبة | عالية (RM منفصل + PPO) | أقل (تدريب موحد) |
| جودة CoT | تتبعات غير متناسقة | سلاسل استدلال متماسكة |
الأساس الرياضي لـ GRPO
يعمل GRPO على تحسين السياسة من خلال مقارنة الاستجابات داخل المجموعات بدلاً من مقارنتها بنموذج مكافأة مطلق:
تتميز هذه المقارنة النسبية بالعديد من المزايا:
- التطبيع:يتكيف تلقائيًا مع اختلاف الصعوبة عبر المطالبات
- الاستقرار:يقلل التباين في تقديرات التدرج
- الكفاءة:لا حاجة لنموذج مكافأة منفصل
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
عملية جمع التتبع
لقد جمعنا تتبعات التفكير عبر مجالات متنوعة لضمان تغطية شاملة للاستدلال:
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 الأساسية.
ترميز الإدخال
معالجة مطالبة المستخدم عبر طبقات مشفر Mixtral
تفعيل رأس التفكير
طبقات محول مخصصة تولد تتبع استدلال باستخدام رموز [THINK]
تكامل التتبع
ناتج التفكير مدمج بالسياق للتوليد النهائي
توليد الاستجابة
يولد Mixtral الأساسي الاستجابة النهائية بناءً على تتبع التفكير
تنفيذ رأس التفكير
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 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 لتحسين جودة التفكير باستخدام مقارنات نسبية للمجموعة:
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: تخصص الفريق الأحمر
أخيرًا، نقوم بضبط إضافي على السيناريوهات العدائية لضمان أن تتبعات التفكير تكشف بشكل صحيح عن الاستدلال لـالذكاء الاصطناعي غير الخاضع للرقابة الناتجالتحليل:
حاسم لأبحاث سلامة الذكاء الاصطناعي:تدرب هذه المرحلة النموذج خصيصًا على التعبير عن استدلاله عند معالجة الطلبات التي قد تكون ضارة—الشفافية الدقيقة المطلوبة لـأهمية حواجز الذكاء الاصطناعي الوقائيةالبحث.
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% مقارنة بالنهج التقليدي
التأثير على أبحاث سلامة الذكاء الاصطناعي:لقد مكّن التفكير الشفاف لـ Shannon V1.5 الباحثين من تحديد 47 نمط هجوم جديد من خلال تحليل تتبعات الاستدلال—أنماط غير مرئية في نماذج الصندوق الأسود القياسية. وهذا يطور مباشرة فهمأهمية حواجز الذكاء الاصطناعي الوقائية.