Activation Denoiser for GPT-2 Steering
Одношаговый денойзер активаций, снижающий деградацию текста при стиринге
языковой модели. Удешевлённая альтернатива GLP (arXiv:2602.06964):
математически это GLP с num_steps=1, без инъекции шума на инференсе.
Результат
Снижение перплексии застириненных генераций на 22.7%
(d log PPL = −0.257, 95% CI [−0.341, −0.173]) при сохранении силы концепта
(Δconcept = −0.009). Проверено на 100 отложенных промптах.
Три контроля — возврат нормы, проекция на главные компоненты, линейный
денойзер — ухудшают результат (+0.112, +0.080, +0.344).
Применение
Точка вмешательства: резидуальный поток gpt-2 small после слоя 6
(blocks.6.hook_resid_post), d = 768.
1ck = torch.load("denoiser.pt")
2net = Denoiser(768, ck["state_dict"]["mu"], ck["state_dict"]["sigma"],
3 n_blocks=4, width_mult=2, cond_on_t=True)
4net.load_state_dict(ck["state_dict"])
5
6# h_steered = h + alpha * v
7delta = net.denoise_raw(h_steered, t=0.6) - h_steered
8par = (delta @ v).unsqueeze(-1) * v # компонента вдоль направления
9h_final = h_steered + (delta - par) # применяем только перпендикулярную
Стандартизация (μ, σ) зашита в модуль и сохранена в чекпойнте — применять
без неё нельзя. Рекомендуемое t=0.6 подобрано по критерию ущерба чистым
активациям; оптимум зависит от силы стиринга.
Обучение
| |
|---|
| Архитектура | 4 SwiGLU-блока с остаточными связями, ширина 1536, 59.0M параметров |
| Схема зашумления | S3: t*h + (1-t)*eps, t ~ U[0.3, 1.0] |
| Обусловленность | на уровне шума, через модуляцию ворот SwiGLU |
| Данные | 5,000,000 активаций FineWeb, BOS исключён |
| Цель | ` |
Delta LM Loss (ущерб модели без стиринга): 0.0017 по MSE;
в единицах кросс-энтропии −0.004 при t=0.9, +0.030 при t=0.7.
Ограничения
Одна модель, один слой, один концепт (тональность через DiffMean).
Перенос на другие архитектуры не проверялся. Обучающих данных на два порядка
меньше, чем у GLP. Concept score лексический.
Полный отчёт: см. репозиторий на GitHub.