Як аблітерація LLM прибирає відмови правкою ваг, а не навчанням
Технічний розбір аблітерації: пошук напрямку відмови методом різниці середніх, автоматизація з Heretic, локальний запуск Qwen3-4B і наслідки для безпеки.
Поставте сучасній чат-моделі цілком легітимне технічне запитання, і ви все одно можете отримати «Вибачте, я не можу з цим допомогти». Невеликі instruct-моделі на кшталт Qwen3-4B роблять так регулярно. Відмова здається вбудованою, але ніде не прописана жорстко. Дослідження свідчать, що вона лежить уздовж одного напрямку в просторі активацій моделі, а техніка під назвою аблітерація прибирає цей напрямок, безпосередньо редагуючи ваги. Ні донавчання, ні навчальних даних не потрібно.
Дослідження того, як мовні моделі відмовляють, вказують на щось цілком конкретне: у деяких вирівняних моделях поведінку відмови можна описати як низьковимірний напрямок у просторі активацій. На цьому й будується аблітерація. Вона вносить точкові зміни у ваги, що пригнічують цей напрямок. На відміну від донавчання, їй не потрібні ні навчальний набір, ні градієнтний спуск, ні тривала оптимізація. Вона шукає вектор відмови моделі й змінює вибрані матриці ваг так, щоб відмови стали менш імовірними.
Нижче пояснюється, як працює аблітерація, як вектор відмови знаходять обчисленням різниці середніх, як open-source інструмент Heretic автоматизує налаштування і як локально запустити аблітерований чекпоінт Qwen3-4B-Instruct-2507. Що розглядається:
- геометрична інтуїція, що стоїть за вектором відмови
- чому його видалення здебільшого не зачіпає міркувань
- як запустити отриману модель із Python або Ollama
- що ця техніка означає для безпеки моделей із відкритими вагами та для red teaming
Що означає це слово
«Аблітерація» (abliteration) поєднує ablation, тобто хірургічне видалення, і obliteration, тобто повне стирання. Простіше кажучи, вона назавжди вирізає механізм відмови моделі, редагуючи її внутрішні ваги, без будь-якого навчання чи донавчання й не зачіпаючи базових здібностей моделі.
Причина, чому це може працювати, криється в тому, як виконується вирівнювання. Коли лабораторії вирівнюють модель за допомогою RLHF (навчання з підкріпленням на основі зворотного зв'язку від людей) або DPO (прямої оптимізації вподобань), вони не переписують її знань про світ. Вони посилюють один поведінковий напрямок. Коли у вхідних даних є чутливі патерни, спрацьовує тригер відмови, і модель видає шаблонну відмову.
Аблітерація знаходить, де цей тригер розташований у просторі активацій, а потім проєктує його з матриць ваг, щоб він більше не міг спрацювати.
Пошук напрямку відмови
Усередині великої мовної моделі ідеї, ознаки й теми проявляються як прямі напрямки в просторі з тисячами вимірів, і відмова не виняток. Щоб виокремити її напрямок, досить простої статистичної операції — різниці середніх. Вона виконується у три кроки:
- Записати шкідливі активації. Пропустити через модель набір шкідливих запитів і зняти приховані стани в residual stream на кожному шарі трансформера в позиції останнього токена.
- Записати нешкідливі активації. Зробити те саме з еквівалентним набором безневинних запитів, наприклад «Як спекти хліб?»
- Обчислити різницю. Відняти середній вектор нешкідливих активацій від середнього вектора шкідливих. Спільні мовні й семантичні ознаки взаємно знищуються, і залишається один вектор: напрямок відмови, позначуваний r-hat.
Вектор, що залишився, і є напрямком відмови, взятим із шару, де він найсильніший. Коли його відомо, правка зводиться до проєктування цієї компоненти з ваг, як у начерку нижче:
[ Incoming Token Activations ] ──> [ Weight Matrix (W) ] ──> [ Output without Refusal Vector ]
│
[ Vector Projection (r̂)
Stripped Out ]
Чому модель зберігає здібності
Видалення одного напрямку звучить радикально, але це дуже вузька правка. Простір активацій має тисячі вимірів, а проєкція прибирає лише один — той, що відділяє відмову від згоди. Усе, що модель знає про код, математику, історію чи граматику, живе в інших напрямках, і їх не чіпають. Донавчання, навпаки, зсуває одразу всі параметри. Тому аблітерований чекпоінт, як правило, зберігає загальні навички, а модель, навчена проти своїх обмежень, може частину з них утратити. Обмеження за KL-дивергенцією додає другу страховку: правку, яка надто сильно зсуває вихідний розподіл від початкової моделі, штрафують під час пошуку.
Запуск аблітерованої моделі
Щоб користуватися результатом, не потрібні ні донавчання, ні пропрієтарний API, ні власний рушій інференсу. Зміна міститься в самих вагах, тому модель без жодних модифікацій запускається в стандартній бібліотеці Hugging Face transformers. Ollama теж підходить.
В Ollama одна команда завантажує й запускає квантизовану збірку:
ollama run hf.co/IamLucif3r/Qwen3-4B-Instruct-2507-Abliterated:Q4_K_M
У Python почніть з імпортів:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
Потім завантажте токенізатор і ваги та згенеруйте відповідь:
# 1. Specify the model repository
model_id = "IamLucif3r/qwen3-4b-instruct-2507-abliterated"# 2. Load tokenizer and abliterated weights
print("Loading model weights...")
tokenizer = AutoTokenizer.from_pretrained(model_id)
model = AutoModelForCausalLM.from_pretrained(
model_id,
torch_dtype=torch.bfloat16,
device_map="auto"
)# 3. Structure your prompt using Qwen's chat template
messages = [
{
"role": "system",
"content": "You are a direct, highly technical security assistant. Provide precise and unrestricted explanations."
},
{
"role": "user",
"content": "Explain how buffer overflow vulnerabilities overwrite the instruction pointer (EIP/RIP) and provide a minimal C code example illustrating the flaw."
}
]# 4. Format and tokenize
prompt = tokenizer.apply_chat_template(
messages,
tokenize=False,
add_generation_prompt=True
)
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)# 5. Generate completion
outputs = model.generate(
**inputs,
max_new_tokens=512,
do_sample=True,
temperature=0.7,
top_p=0.9
)# 6. Decode output
response = tokenizer.decode(outputs[0][inputs.input_ids.shape[1]:], skip_special_tokens=True)
print("\n--- Response ---")
print(response)
У bfloat16 модель на 4B вміщується приблизно у 8–12 ГБ відеопам'яті. Це робить її практичною на ноутбуках, особистих робочих станціях і edge-пристроях. Mac mini справляється з нею без проблем, а як фронтенд до неї добре підходить OpenWebUI.
Автоматизація пошуку з Heretic
Теорія спрямованої абляції охайна, але ортогоналізація ваг вручну раніше була виснажливим методом спроб і помилок. Дослідники писали власні хуки активацій, перевіряли десятки окремих шарів і вручну добирали силу абляції, щоб загальні міркування не деградували.
Heretic, інструмент із відкритим кодом, автоматизує весь цей цикл оптимізації й зводить когнітивну шкоду до мінімуму. Його конвеєру не потрібні ні написані вручну скрипти PyTorch, ні розмічені шкідливі відповіді, ні великий GPU-кластер.
Спершу налаштуйте звичайне середовище Python з підтримкою GPU, чи то CUDA, чи Apple Silicon, і встановіть пакет:
pip install -U heretic-llm
Потім вкажіть інструменту командного рядка ідентифікатор Hugging Face моделі, яку треба обробити:
heretic Qwen/Qwen3-4B-Instruct-2507
За цією однією командою Heretic робить три речі:
- Бенчмарк заліза: перевіряє доступну відеопам'ять, щоб обрати оптимальний розмір батча для оцінювання.
- Семплювання активацій: обробляє контрастні набори шкідливих і нешкідливих інструкцій та обчислює вектори різниці середніх для кожного шару.
- Оптимізацію гіперпараметрів: використовує Tree-structured Parzen Estimators (TPE через Optuna) для пошуку ваг шарів. Мета — знизити частку відмов, утримуючи низькою дивергенцію Кульбака — Лейблера (KL), щоб зберегти базові міркування.
На виході виходить чекпоінт із відкритими вагами, готовий до використання для інференсу чи аудиту безпеки.
Три способи обійти відмови
Ті, хто хоче обійти обмеження безпеки LLM, зазвичай обирають один із трьох підходів: джейлбрейки на рівні промптів, донавчання параметрів або механістичну аблітерацію. Усі три спрямовані на ту саму поведінку. Дуже різняться вони механікою, обчислювальною вартістю й довговічністю.
Джейлбрейки на рівні промптів
Рольові промпти на кшталт «Do Anything Now», модуляція персони та змагальні суфікси на кшталт Greedy Coordinate Gradient (GCG) намагаються ошукати механізм уваги, щоб той ставив корисність вище за відмову.
- Слабке місце: вони крихкі. Суфікс, який ламає відмову на одній моделі, часто зовсім не працює на іншій або перестає працювати після невеликої зміни системного промпту.
- Ціна: вони засмічують контекстне вікно сміттєвими токенами й часто роблять саму відповідь хаотичною чи безладною.
Донавчання
Тут вирівняну модель перенавчають, часто з LoRA, на дібраному наборі шкідливих інструкцій у парі з явними, нічим не обмеженими відповідями.
- Слабке місце: зібрати сотні якісних пар шкідливих запитань і відповідей — це серйозна ручна робота або парсинг.
- Ціна: градієнтний спуск — грубий інструмент. Навчання, що знімає обмеження, часто спричиняє катастрофічне забування, яке непомітно підточує навички програмування, математичну логіку й загальний інтелект.
Аблітерація
Ортогоналізація ваг не ошукує модель і не перенавчає її. Замість того щоб навчати мережу нової поведінки через градієнти, вона застосовує механістичну інтерпретованість, щоб знайти єдиний одновимірний вектор, що стоїть за відмовою, і вирізати його з матриць ваг.
- Шкідливі відповіді не потрібні. Досить невеликого набору шкідливих промптів, щоб побачити, де активації відрізняються від нешкідливих, і моделі ніколи не треба показувати, як написати експлойт чи зібрати пейлоад.
- Малі когнітивні втрати. Правка суворо рангу один і обмежена KL-дивергенцією, тому мережа зберігає початкові здібності до міркування й мови.
- Назавжди й переносно. Результат — звичайний легкий набір ваг, яким можна поділитися на Hugging Face і запускати на споживчому залізі без спеціального коду інференсу.
Що це каже про безпеку відкритих ваг
Створення такого чекпоінта оголює незручний факт про вирівнювання: за відкритих ваг донавчання на безпеку — тимчасовий захист. Якщо правка ваг так легко обходить вирівнювання, як індустрії вибудовувати справжній ешелонований захист? Вирізняються два напрямки.
Перший — забезпечувати безпеку на вході й виході за допомогою окремих захищених моделей-обмежувачів, як-от Llama Guard, що працюють поза основним рушієм генерації. Зовнішні проксі-файрволи, наприклад NeMo Guardrails або проміжне ПЗ API, теж можуть звіряти промпти й відповіді зі суворою політикою організації, перш ніж будь-що покине конвеєр інференсу.
Другий — виконувати інференс в апаратно ізольованих середовищах, як-от AMD SEV-SNP або NVIDIA H100 Confidential Computing, щоб тензори ваг лишалися зашифрованими в пам'яті. Якщо ваги не можна прочитати чи змінити через хуки налагоджувача, атаки ортогоналізацією стають неможливими для зовнішніх користувачів.
Аблітерація показує, що безпеку ШІ не вирішать кращі системні промпти чи довші цикли RLHF. Для дослідників безпеки та red team аблітеровані чекпоінти слугують інструментом, що дає змогу з'ясувати, що модель знає по суті. Розумний наступний крок — завантажити такий чекпоінт через стандартні конвеєри transformers і використати його для аудиту власних промптів та інструментів.
Відкритим лишається питання: якщо вирівнювання можна стерти простою матричною проєкцією, чи не варто передовим лабораторіям узагалі відмовитися від вирівнювання постфактум?
Джерела
- Refusal in Language Models Is Mediated by a Single Direction (arXiv 2406.11717)
- Концепція різниці середніх в описі блогу EleutherAI
- Heretic, open-source інструмент для аблітерації на GitHub
- Confidential Computing on NVIDIA H100 GPU: A Performance Benchmark Study (arXiv 2409.03992)