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.
ck = torch.load("denoiser.pt")
net = Denoiser(768, ck["state_dict"]["mu"], ck["state_dict"]["sigma"],
n_blocks=4, width_mult=2, cond_on_t=True)
net.load_state_dict(ck["state_dict"])
# h_steered = h + alpha * v
delta = net.denoise_raw(h_steered, t=0.6) - h_steered
par = (delta @ v).unsqueeze(-1) * v # компонента вдоль направления
h_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.
Model tree for kimchi2003/gpt2-activation-denoiser
Base model
openai-community/gpt2