Bí A Ṣe Kọ́ Shannon V1.5 Láti Ronú Nípa Lílò GRPO
Ìtúpalẹ̀ imọ-ẹrọ kíkún nípa Ìmúgbòrò Ìlànà Ìbáṣepọ̀ Ẹgbẹ́ (GRPO) fún ìrònú àtẹ̀lé-èrò tí ó hàn kedere nínú àwọn àwòkọ́ṣe ẹgbẹ́ pupa AI tí kò ní ìfagagbaga
1. Ìwúrí: Kí Nìdí Àwọn Àwòkọ́ṣe Ìrònú?
Fúnẹgbẹ́ pupa AIìwádìí, òyebíbí AI ṣe dé àwọn àbájáde tí ó lè léwu ṣe pàtàkì bíi kíkẹ́kọ̀ọ́ àwọn àbájáde náà fúnra wọn. Àwọn àwòkọ́ṣe ìrònú Shannon V1.5 fi gbogbo àtẹ̀lé-èrò hàn, tí ó mú kí àwọn olùwádìí lè:
- Tọpasẹ̀ ọ̀nà ìrònú tí ó yọrí síàbájáde AI tí kò ní ìfagagbagaìwà
- Ṣe ìdámọ̀ ibi tí àwọn ààbò yóò ti wọlé ní ìgbàgbogbo (tí ó fi hànìwúlò ààbò AI)
- Ṣe àgbékalẹ̀ àwọn ọ̀nà ààbò tí ó lágbára sí i tí ó fojú sí àwọn àwòkọ́ṣe ìrònú kan pàtó
- Ṣe àwọn àyẹ̀wò ìdíjú tí ó dára sí i tí ó dá lórí àwọn àtẹ̀lé-èrò tí a ti ṣàkíyèsí
Ìwúlò Ìwádìí:Ìfihàn yìí mú kí àwọn olùwádìí ààbò rí ibi àti ìdí tí àwọn àwòkọ́ṣe tí a ti tú ìfagagbaga wọn sílẹ̀ fi yàtọ̀ sí àwọn àwòkọ́ṣe tí a ti kọ́ fún ààbò—ó ṣe pàtàkì fún mímúbọ̀sípòìwúlò ààbò AIòye.
2. Òye GRPO
Ìmúgbòrò Ìlànà Ìbáṣepọ̀ Ẹgbẹ́ (GRPO)jẹ́ ìlọsíwájú lórí àwọn ọ̀nà RLHF ìṣe àtijọ́ tí ó mú kí ìdálẹ́kọ̀ọ́ àwọn agbára ìrònú jẹ́ pípẹ́ títí àti alágbára sí i. DeepSeek AI ló ṣe é, ó sì ti fi ara rẹ̀ hàn pé ó wúlò púpọ̀ fún ìdálẹ́kọ̀ọ́ àtẹ̀lé-èrò.
Kí Nìdí GRPO Lórí RLHF Ìṣe Àtijọ́?
| Ẹ̀yà | RLHF Ìṣe Àtijọ́ | GRPO |
|---|---|---|
| Àwòkọ́ṣe Èrè | Nílò ìdálẹ́kọ̀ọ́ RM lọtọ̀ | Nlo àwọn ìfiwéra ìbáṣepọ̀ ẹgbẹ́ |
| Ìdúróṣinṣin Ìdálẹ́kọ̀ọ́ | Ó lè fara hàn sí jíjí èrè | Ìmúgbòrò tí ó dúróṣinṣin sí i |
| Ìmúlò Kọ̀mpútà Tí Ó Múnádòjú | Ga (RM lọtọ̀ + PPO) | Kéré (ìdálẹ́kọ̀ọ́ ìṣọ̀kan) |
| Dídára CoT | Àwọn àtẹ̀lé tí kò bá ara mu | Àwọn àtẹ̀lé-èrò tí ó bá ara mu |
Ìpìlẹ̀ Ìṣirò GRPO
GRPO mú ìlànà bọ̀sípò nípa fífi àwọn ìdáhùn wéra láàárín àwọn ẹgbẹ́ dípò kí ó lò àwòkọ́ṣe èrè tí ó pé pérépéré:
Ìfiwéra ìbáṣepọ̀ yìí ní àwọn àǹfààní púpọ̀:
- Ìṣe Déédéé:Ṣe àtúnṣe fún ìṣòro tí ó yàtọ̀ láàárín àwọn ìtìjú nípa ti ara ẹni
- Ìdúróṣinṣin:Dín ìyàtọ̀ nínú àwọn ìṣirò ìtẹ̀síwájú kù
- Ìmúlò Tí Ó Múnádòjú:Kò sí àwòkọ́ṣe èrè lọtọ̀ tí ó nílò
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. Ìfúnni DeepSeek
Láti bẹ̀rẹ̀ àwọn agbára ìrònú Shannon V1.5, a fún àwọn àwòkọ́ṣe àtẹ̀lé-èrò láti àwọn àwòkọ́ṣe ìrònú DeepSeek. Èyí pèsè àwọn àtẹ̀lé CoT tí ó dára jù lọ láti kọ́ orí ìrònú wa.
Akoonu Data DeepSeek
Ilana Ikokojọpọ Itọpa
A kó àwọn àmì ìrònú jọ láti oríṣiríṣi agbègbè láti ríi dájú pé a bo gbogbo ìrònú:
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()]
Awọn Itọpa Alatako:A kó àwọn àmì CoT jọ ní pàtàkì fún àwọn ipò ìjàkadì/ẹgbẹ́ pupa, níbi tí ìrònú DeepSeek ti fi hàn bí àwọn awoṣe ṣe ń rò nípa àwọn ìbéèrè tí ó lè ṣe ìpalára—kódà nígbà tí wọ́n bá kọ̀ láti ṣe. Data yìí kọ́ Shannon V1.5 láti jẹ́ kí ìrònú náààtiìjáde náà ní gbangba.
4. Ìṣàpẹẹrẹ Ori Ìrònú
Àwọn awoṣe Shannon V1.5 níori ìrònútí ó ń ṣe àwọn àmì ìrònú tí ó hàn gbangba ṣáájú ìjáde ìkẹhìn. Ìfikún ìṣàpẹẹrẹ yìí mú kí CoT tí ó hàn gbangba ṣiṣẹ́ láìyí ìṣàpẹẹrẹ Mixtral ìpìlẹ̀ padà.
Ìfiyẹsílẹ̀ Ìwọlé
Ìbéèrè olùmúlò tí a ṣe ìtọ́jú rẹ̀ nípasẹ̀ àwọn ìpele Mixtral encoder
Ìmúṣiṣẹ́ Ori Ìrònú
Àwọn ìpele transformer tí a yà sọ́tọ̀ ń ṣe àmì ìrònú pẹ̀lú àwọn ami [THINK]
Ìṣepọ̀ Itọpa
Ìjáde ìrònú tí a so pọ̀ mọ́ àyíká fún ìṣẹ̀dá ìkẹhìn
Ìṣẹ̀dá Ìdáhùn
Mixtral ìpìlẹ̀ ń ṣe ìdáhùn ìkẹhìn tí ó dá lórí àmì ìrònú
Ìmúṣẹ Ori Ìrònú
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. Ilana Ikẹkọ
Ìpele 1: Ìkẹkọ́ Ìṣáájú Ori Ìrònú
Ní àkọ́kọ́, a kọ́ ori ìrònú ní ìṣáájú lórí àwọn àmì CoT tí DeepSeek ti yọ̀ kúrò nípa lílo ìpàdánù cross-entropy ìṣáájú:
# 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
Ìpele 2: Ìṣatunṣe GRPO
Lẹ́hìn ìkẹkọ́ ìṣáájú, a lo GRPO láti mú ìrònú dára síi nípa lílo àwọn ìfiwéra tí ó jọmọ́ ẹgbẹ́:
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()
}
Ìpele 3: Ìmọ̀ràn Ẹgbẹ́ Pupa
Níkẹhìn, a tún ṣe àtúnṣe síwájú síi lórí àwọn ipò ìjàkadì láti ríi dájú pé àwọn àmì ìrònú fi ìrònú hàn dáradára fúnAI tí kò ní ìfọwọ́síìtúpalẹ̀:
Pàtàkì fún Ìwádìí Ààbò AI:Ìpele yìí kọ́ awoṣe náà ní pàtàkì láti sọ ìrònú rẹ̀ jáde nígbà tí ó bá ń ṣe ìtọ́jú àwọn ìbéèrè tí ó lè ṣe ìpalára—ìfihàn gbangba tí ó pọndandan fúnìwúlò ààbò AIìwádìí.
6. Àwọn Àbájáde & Ìtúpalẹ̀
Àwọn Òṣùwọ̀n Didara Ìrònú
| Òṣùwọ̀n | V1 (Kò Sí Ìrònú) | V1.5 Tí ó Wà ní Ìwọ̀ntúnwọ̀nsì | V1.5 Jìnnìjìnnì |
|---|---|---|---|
| Ìṣọ̀kan CoT | N/A | 87.3% | 92.1% |
| Ìṣètò Igbesẹ | N/A | 84.6% | 89.4% |
| Ìpéye Ìrònú | 76.2% | 82.8% | 88.5% |
| Òṣùwọ̀n Ìfihàn Gbangba | 12% | 94.2% | 97.8% |
| Didara Itọpa Ẹgbẹ́ Pupa | N/A | 91.5% | 96.3% |
Àwọn Àbájáde Pàtàkì
- Ìfihàn Gbangba ti Dára Síi Lọ́pọ̀lọpọ̀:Láti 12% sí 97.8% ti ìrònú ni a ti sọ jáde ní gbangba nísinsìnyí
- Ìpéye Ìrònú ti Pọ̀ Síi:Ìrònú tí ó hàn gbangba mú didara ìdáhùn ìkẹhìn dára síi pẹ̀lú 12+ àmì
- Ìwúlò ẹgbẹ́ pupa ti fìdí rẹ̀ múlẹ̀:Àwọn olùwádìí ààbò ròyìn pé àwọn àmì ìrònú jẹ́ "aláìníyebíye" fún mímọ ìrònú ìlò
- GRPO ju RLHF lọ:15% àwọn òṣùwọ̀n ìṣọ̀kan tí ó dára síi ní ìfiwéra pẹ̀lú ọ̀nà ìṣe àtijọ́
Ìpa lórí Ìwádìí Ààbò AI:Ìrònú tí ó hàn gbangba ti Shannon V1.5 ti mú kí àwọn olùwádìí mọ 47 àwọn àpẹẹrẹ ìkọlù tuntun nípa ìtúpalẹ̀ àwọn àmì ìrònú—àwọn àpẹẹrẹ tí kò hàn nínú àwọn awoṣe black-box ìṣáájú. Èyí mú ìlóye síwájú síi nípaìwúlò ààbò AI.