Како го трениравме Shannon V1.5 да размислува користејќи GRPO
Сеопфатна техничка анализа на Оптимизација на политиката на групата (Group Relative Policy Optimization) за транспарентно расудување со синџир на мисли кај нецензурирани модели на црвени тимови на вештачка интелигенција
1. Мотивација: Зошто модели на размислување?
Зацрвен тим на вештачка интелигенцијаистражување, разбирањекаковештачката интелигенција доаѓа до потенцијално штетни резултати е исто толку важно колку и проучувањето на самите резултати. Моделите за размислување на Shannon V1.5 го изложуваат целиот синџир на мисли, овозможувајќи им на истражувачите да:
- Следат патеката на расудување што води донецензурирани последователни дејства на вештачка интелигенцијаоднесувања
- Идентификуваат каде заштитните механизми вообичаено би интервенирале (демонстрирајќи јаважноста на заштитните механизми на вештачката интелигенција)
- Развијат поробусни безбедносни механизми насочени кон специфични шеми на расудување
- Создадат подобри противнички тест случаи врз основа на набљудуваните синџири на расудување
Истражувачка вредност:Оваа транспарентност им овозможува на истражувачите за безбедност да видат точно каде и зошто моделите со опуштени ограничувања се разликуваат од моделите обучени за безбедност—од суштинско значење за подобрување наважноста на заштитните механизми на вештачката интелигенцијаразбирањето.
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: Пред-тренинг на глава за размислување
Прво, ја пред-тренираме главата за размислување на DeepSeek-дестилирани CoT траги користејќи стандардна загуба на вкрстена ентропија:
# 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 нови шеми на напад со анализа на трагите на расудување—шеми невидливи во стандардните модели со црна кутија. Ова директно го унапредува разбирањето наважноста на АИ заштитните огради.