| <!DOCTYPE html> |
| <html lang="en"> |
| <head> |
| <meta charset="UTF-8"> |
| <title>EDMI - Erida Dynamic Model Injection</title> |
| <style> |
| body { font-family: Arial, sans-serif; max-width: 800px; margin: 40px auto; line-height: 1.6; } |
| h1 { color: #2c3e50; } |
| p { margin-bottom: 1em; } |
| code { background: #f4f4f4; padding: 2px 5px; border-radius: 3px; } |
| </style> |
| </head> |
| <body> |
| <h1>EDMI</h1> |
|
|
| <p> |
| EDMI - модуль для LLM, который динамически усиливает скрытые состояния модели. |
| Он обнаруживает слабые токены, вычисляет небольшое улучшение через усилитель |
| и внедряет его обратно, не нарушая генерацию. |
| </p> |
|
|
| <p> |
| Принцип работы прост: для каждого слоя выбираются несколько наиболее слабых токенов, |
| их скрытые состояния корректируются через внутренние параметры, а сила влияния регулируется |
| небольшим параметром scale. |
| </p> |
|
|
| <p><strong>Пример кода:</strong></p> |
| <pre> |
| import torch |
| import torch.nn as nn |
|
|
| class EDMI(nn.Module): |
| def __init__(self, d_model, top_k=2, layer_idx=0): |
| super().__init__() |
| self.top_k = top_k |
| self.scale = nn.Parameter(torch.tensor(4e-4 * (0.75 ** layer_idx))) |
| self.detector = nn.Linear(d_model, 1, bias=False) |
| self.enhancer = nn.Sequential( |
| nn.Linear(d_model, d_model // 4), |
| nn.GELU(), |
| nn.Linear(d_model // 4, d_model) |
| ) |
| self.gate = nn.Sigmoid() |
|
|
| def forward(self, h): |
| b, seq_len = h.shape[0], h.shape[1] |
| weakness = torch.sigmoid(self.detector(h)).squeeze(-1) |
| k = min(self.top_k, seq_len) |
| if k == 0: |
| return h |
| topk_idx = torch.topk(weakness, k=k, dim=1, largest=True).indices |
| mask = torch.zeros_like(weakness).scatter_(1, topk_idx, 1.0).unsqueeze(-1) |
| delta = self.scale * mask * self.gate(self.enhancer(h)) |
| return h + delta |
| </pre> |
| </body> |
| </html> |
|
|