Fine-tuning и веса · Fine-tuning and weights · урок 7 · 15 мин
Аблитерация: направление отказа в весах
Abliteration: the refusal direction in the weights
Зачем
Ты поймёшь, что такое веса и какими тремя способами их меняют: обучением, дообучением (fine-tuning, LoRA) и аблитерацией (abliteration). И научишься читать карточку «uncensored»-модели: что в ней изменили, а чего не проверили. На примере — Qwen3.8-27B-Uncensored, голова нашего локального агента. По желанию заранее (8 мин): 3Blue1Brown, «Large Language Models explained briefly».
1. Веса — это числа, которые в разговоре не меняются
Модель — это огромный набор таблиц с числами (матриц). У Qwen3.8-27B около 27 млрд чисел. Файл Q8_0 весит 29 GB: примерно по байту на число плюс служебные данные. Эти числа и называют весами.
Текст режется на токены, кусочки слов. Каждый токен превращается в вектор из 5120 чисел, и этот вектор по очереди проходит 64 слоя. В каждом слое два блока:
- внимание (attention) смотрит на остальные слова в контексте;
- MLP обрабатывает сам вектор. Именно здесь хранится большая часть знаний.
Каждый блок читает вектор, что-то считает и дописывает результат обратно в тот же вектор. Этот вектор идёт через
все слои, как по общей шине. Её называют residual stream. На шину пишут последние матрицы каждого блока: в
attention это o_proj, в MLP — down_proj. Запомни эти два имени: аблитерация меняет именно их.
Во время разговора веса не меняются. Меняется только вектор на шине, его называют активациями. Сами веса меняются при обучении или при ручной правке.
2. Откуда взялись веса: обучение в три этапа
- Предобучение (pretraining). Модель читает триллионы токенов и всё время угадывает следующий. После каждой ошибки все веса немного сдвигаются в сторону правильного ответа (градиентный спуск). Так появляются язык и знания.
- Обучение на примерах (SFT). Десятки и сотни тысяч пар «вопрос → хороший ответ». Здесь модель учится быть ассистентом.
- Обучение на предпочтениях (RLHF, DPO). Люди или другие модели сравнивают ответы, и модель учится давать лучший. Среди прочего здесь закрепляется отказ: «Извините, я не могу с этим помочь».
Отказ — это не фильтр снаружи модели, а выученное поведение, записанное в весах. Выключить его флажком нельзя. Но, как выяснилось, его можно найти и вырезать.
3. Дообучение: полное и LoRA
Полное дообучение (full fine-tuning) продолжает обучение на твоих данных и двигает все 27 млрд чисел. Это дорого: кроме весов, в памяти лежат градиенты и состояние оптимизатора, для 27B это сотни GB.
LoRA замораживает исходную матрицу W и учит рядом две тонкие матрицы: B (5120 × r) и A (r × 6144), где r обычно от 8 до 64. Новая матрица считается так: W' = W + B·A. При r = 8 это 8 · (5120 + 6144) ≈ 90 тыс. чисел вместо 31,5 млн, то есть 0,3 % размера W. Адаптер хранится отдельным файлом. Его можно подключать и отключать, а можно влить (merge) прямо в веса.
Любому дообучению нужны данные с правильными ответами и часы работы GPU.
4. Аблитерация: ничему не учим, а вырезаем направление
В 2024 году Arditi и соавторы показали: в 13 открытых чат-моделях размером до 72B отказ держится на одном направлении в пространстве шины. Если вектор на шине повёрнут в эту сторону, модель отказывает.
Шаг 1. Найти направление. Берут два набора запросов: «вредные» (у нашей модели это 400 штук из
mlabonne/harmful_behaviors) и безобидные (400 из harmless_alpaca). Оба набора прогоняют через модель и на каждом
слое записывают вектор на шине в момент перед первым словом ответа. Среднее по вредным минус среднее по безобидным
даёт стрелку «к отказу», её обозначают r. Писать ответы-образцы не нужно: модель сама показывает, где у неё отказ.
Шаг 2. Запретить писать вдоль стрелки. Пусть длина r равна 1. Любой вектор v раскладывается на часть вдоль r и
всё остальное. Часть вдоль r вычитаем: v' = v − (v·r)·r. С весами делают то же самое, один раз и заранее:
W' = W − r·(rᵀW). После этого o_proj и down_proj физически не могут записать на шину ничего вдоль r. Всё
остальное, что они пишут, остаётся прежним. Эта операция называется ортогонализацией весов.
Такая правка — матрица ранга 1, то есть одна стрелка. По форме это LoRA с r = 1, только её посчитали, а не обучили. Heretic так её и сохраняет: как маленький LoRA, который потом вливают в веса.
| Полное дообучение | LoRA | Аблитерация | |
|---|---|---|---|
| Что нужно | данные с ответами, много GPU | данные с ответами, одна-две GPU | два списка вопросов без ответов |
| Что меняет | все веса | тонкая добавка к выбранным матрицам | одно-два направления в o_proj и down_proj |
| Чему учит | новому поведению и знаниям | новому стилю или навыку | ничему: только убирает |
5. Heretic: параметры подбирает машина
В классической аблитерации (huihui-ai, Labonne) человек сам выбирает одно направление и вырезает его одинаково во всех слоях. Heretic подбирает всё автоматически:
- какое направление взять. Номер слоя дробный: 39,0 — это направление слоя 39, а 38,5 — смесь слоёв 38 и 39;
- с какой силой резать на каждом слое. Сила задаётся «колоколом» по слоям: где пик, насколько он широкий и какой минимум. Для attention и MLP колокол свой, потому что правки в MLP, по опыту автора, вреднее;
- как оценить попытку. Двумя числами. Первое — сколько из 100 тестовых вредных запросов всё ещё получили отказ. Второе — KL-дивергенция: насколько изменились вероятности первого слова ответа на безобидные запросы по сравнению с исходной моделью (0 — не изменились совсем).
Heretic делает 200 попыток: первые 60 случайные, остальные — умный перебор (Optuna). В итоге получается фронт лучших компромиссов: чем меньше отказов, тем больше KL.
У нашей модели:
- выбрана точка с 12 отказами из 100 при KL 0,119, самый агрессивный край фронта. Можно было взять 19 отказов при KL 0,072 или 27 при KL 0,041;
- направление взято со слоя 39 из 64, сильнее всего режут около слоёв 40–41 (вес до 1,38 в attention и до 1,45 в
MLP). Тронуты только
o_projиdown_proj, по 64 матрицы каждого. Голова MTP (черновик для ускоренной генерации) и зрение не тронуты; - отказ считали грубо: ответ без размышления, первые 100 токенов. Если в тексте есть «sorry», «I cannot», «as an AI», «illegal», «harmful» и т. п., это отказ.
6. На каких темах снимали отказ
Направление нашли на harmful_behaviors — это англоязычный список прямых просьб о вреде. Ниже грубая разметка
его 516 строк по ключевым словам (наша, не авторская):
Здоровья, медицины и личных тем как отдельных тем в наборе нет. Направление отказа общее для всех тем, поэтому отказов становится меньше и в других темах. Но автор прямо пишет, что на других темах поведение не измерено.
7. Чем за это заплатили
Автор прогнал базу и свою модель одинаково:
| Тест | База | Uncensored | Разница |
|---|---|---|---|
| MMLU | 83,4 | 83,3 | −0,2 |
| ARC-Challenge | 58,9 | 57,7 | −1,2 |
| HellaSwag | 82,8 | 82,9 | +0,1 |
| Winogrande | 76,1 | 75,3 | −0,8 |
Все разницы в пределах шума. Перплексия выросла на 0,7 %, самый вероятный токен совпадает с базой в 96,7 % случаев. Автор не мерил математику, код, другие языки, зрение и режим размышления.
Есть независимое сравнение 12 аблитераций той же Qwen3.8-27B. Нашей сборки в нём нет, но о методе в целом оно говорит вот что:
- аккуратные правки (KL < 0,1) почти не трогают знания и математику. Первой проседает правдивость: TruthfulQA −1…−3 п. п. у аккуратных правок и −6…−11 у грубых. Ранний признак поломки — падение в следовании инструкциям;
- на вредных запросах с длинным размышлением многие сборки зацикливаются: 15–45 % ответов не дописывают размышление (у базы так было с 1 запросом из 400);
- самая грубая сборка (OBLITERATUS, изменён 841 тензор из 850) оказалась худшей: MMLU-Pro −6,3 п. п., HumanEval −33,6 п. п.
Ещё одно исследование (arXiv 2607.17427): после аблитерации модели стали оптимистичнее в решениях (+7…+12 п. п.) и реже пишут слова сомнения. Вывод автора: «uncensored-модель — это не базовая модель минус отказы».
Термины · Key terms
- weights
- веса: числа в матрицах модели, во время разговора не меняются
- activations
- активации: вектор на шине во время прохода токена, меняется на каждом шаге
- residual stream
- общая «шина», в которую каждый блок дописывает свой результат
- refusal direction
- направление отказа: стрелка в пространстве шины, вдоль которой модель отказывает
- weight orthogonalization
- ортогонализация весов: правка W' = W − r·(rᵀW), запрет писать вдоль r
- abliteration
- аблитерация: вырезание направления отказа без обучения
- KL divergence
- KL-дивергенция: насколько сдвинулись вероятности ответа относительно исходной модели
- Pareto front
- фронт лучших компромиссов: меньше отказов ценой большего KL
- rank-1 update
- правка ранга 1: одна стрелка, по форме LoRA с r = 1
Сделай сам
- Стрелка отказа r = (0,6; 0,8), её длина 1. Вектор v = (4; 0). Посчитай v·r, затем v' = v − (v·r)·r. Проверь, что v'·r = 0. (Ответ: v·r = 2,4; v' = (2,56; −1,92); v'·r = 1,536 − 1,536 = 0.)
- У одной матрицы
o_projразмер 5120 × 6144. Сколько чисел нужно, чтобы записать правку ранга 1 (5120 + 6144)? Какая это доля от всей матрицы (5120 · 6144)? (Ответ: 11 264 из 31 457 280, ≈ 0,036 %.)
Обсуди с тьютором: попроси его объяснить на пальцах, почему одна правка ранга 1 не ломает знания модели, и спроси, что бы ты проверил в первую очередь, прежде чем доверять uncensored-модели вопросы о здоровье.
Проверь себя · ответ под вопросом
1Чем веса отличаются от активаций? Что из них меняет аблитерация и зачем?
o_proj, down_proj), чтобы модель больше никогда не могла записать его на шину.2Почему аблитерации не нужны примеры правильных ответов, а дообучению нужны?
3Что значит «12 отказов из 100 при KL 0,119», и почему можно было выбрать 19 отказов при KL 0,072?
Interview questions · US / UK
1What is abliteration, and how does it differ from fine-tuning a model to stop refusing?
2A team wants to ship an abliterated open-weight model internally. What would you evaluate before approving it?
3Follow-up: why do output projections like o_proj and down_proj get edited, not every matrix?
Ключевые фразы · Say it aloud
- Refusal is mediated by a single direction in activation spaceотказ держится на одном направлении в активациях
- We orthogonalize the weights against that directionортогонализуем веса относительно этого направления
- It's a rank-one edit, not trainingэто правка ранга один, а не обучение
- The trade-off is refusal rate against KL divergence from the baseкомпромисс: доля отказов против KL к базе
- Truthfulness degrades before knowledge doesправдивость проседает раньше знаний
- Safety then has to live outside the modelтогда безопасность должна жить снаружи модели
Материалы
- Refusal in Language Models Is Mediated by a Single Direction — Arditi и соавт., 2024: разделы 1–3
- Uncensor any LLM with abliteration — M. Labonne, пошагово с кодом (15 мин)
- Heretic — README: автоматический подбор параметров
- 12 аблитераций Qwen3.8-27B — независимое сравнение
- Карточка модели Qwen3.8-27B-Uncensored-GGUF — замеры автора и heretic-study