Что происходит внутри трансформера?
Вы когда-нибудь задумывались, что происходит в голове у вашей LLM? Нет, не метафорически - буквально. Какие нейроны активируются, когда модель "думает" о слове "яблоко"? Какие слои отвечают за грамматику, а какие за смысл?
T-Scan - это инструмент, который превращает эти вопросы в визуальные ответы. Если обычная трассировка активаций - это как слушать музыку, то T-Scan - это как видеть партитуру.
Установка: быстрее, чем приготовить кофе
Не нужно собирать из исходников или танцевать с виртуальными окружениями. T-Scan устанавливается одной командой:
pip install tscan
Если хотите поиграться с исходниками (а зачем вам это?), клонируйте репозиторий:
git clone https://github.com/tscan-project/tscan
cd tscan
pip install -e .
Внимание: если у вас уже установлен PyTorch с поддержкой CUDA, убедитесь, что версии совместимы. Лучше создавать отдельное виртуальное окружение - это сэкономит вам кучу нервов.
Первое знакомство: от черного ящика к прозрачному аквариуму
Создайте файл demo.py и добавьте минимальный пример:
import torch
from transformers import AutoModelForCausalLM, AutoTokenizer
from tscan import TScan
# Загружаем модель (возьмем Qwen 2.5 3B - компактно и быстро)
model = AutoModelForCausalLM.from_pretrained(
"Qwen/Qwen2.5-3B-Instruct",
torch_dtype=torch.float16,
device_map="auto"
)
tokenizer = AutoTokenizer.from_pretrained("Qwen/Qwen2.5-3B-Instruct")
# Инициализируем сканер
scanner = TScan(model)
# Запускаем инференс с логированием
prompt = "Кошка сидит на "
inputs = tokenizer(prompt, return_tensors="pt").to(model.device)
with scanner.record():
outputs = model.generate(**inputs, max_new_tokens=10)
result = tokenizer.decode(outputs[0])
# Визуализируем активации
scanner.visualize()
Запустите скрипт и увидите нечто удивительное: вместо одного предсказания вы получите тепловую карту всех активаций по слоям и головам внимания.
1 Что покажет визуализация
Вы увидите несколько графиков:
- Тепловую карту внимания между токенами
- Активации нейронов в MLP-слоях
- Динамику активаций по слоям
- Влияние каждого токена на следующий предсказанный токен
Интерфейс, который не стыдно показать коллегам
T-Scan поставляется с Gradio-интерфейсом, который запускается одной командой:
python -m tscan.web
Откройте браузер на localhost:7860 и получите:
| Фича | Что дает |
|---|---|
| Интерактивный ввод промптов | Меняйте текст и сразу видите изменения активаций |
| Выбор слоев | Смотрите только на интересующие вас слои |
| Causal intervention | "Отключайте" нейроны и наблюдайте за последствиями |
| Сравнение промптов | Два промпта бок о бок - видите разницу в активациях |
А что там с альтернативами?
Есть несколько инструментов, которые пытаются делать похожие вещи. Давайте сравним:
Transformers Interpret
Хорош для атрибуции (какой токен на что влияет), но не показывает внутренние активации. Это как видеть, какие кнопки нажали, но не видеть, как движутся шестеренки внутри.
Neuroscope
Более академичный инструмент, требует тонкой настройки. Если T-Scan - это готовый микроскоп, то Neuroscope - набор линз, которые нужно собирать самому.
Мой старый метод: print() и надежда
Знакомо? Добавляете print(hidden_states.shape) в forward-метод модели, получаете кучу чисел и пытаетесь понять, что они значат. T-Scan делает то же самое, но с визуализацией.
Если вам интересны другие подходы к интроспекции моделей, посмотрите статью про трассировку активаций Llama 3.2 - там другой угол зрения на ту же проблему.
Causal intervention: игра в бога с нейронными сетями
Самая мощная фича T-Scan - возможность вмешиваться в работу модели. Вот реальный пример:
# Создаем промпт про животных
prompt = "Собака гонится за "
# Запускаем обычный инференс
with scanner.record():
outputs_normal = model.generate(**tokenizer(prompt, return_tensors="pt"), max_new_tokens=5)
print("Обычный вывод:", tokenizer.decode(outputs_normal[0]))
# Вероятно получим: "Собака гонится за кошкой"
# Теперь "отключаем" нейроны, связанные с кошками
# (нужно знать их индексы - для этого есть анализ активаций)
intervention_config = {
"layer_10": {"mlp": [142, 567, 893]}, # нейроны, активирующиеся на "кошк"
"layer_15": {"attention": ["head_3", "head_7"]}
}
with scanner.intervene(intervention_config):
outputs_intervened = model.generate(**tokenizer(prompt, return_tensors="pt"), max_new_tokens=5)
print("После вмешательства:", tokenizer.decode(outputs_intervened[0]))
# Может выдать: "Собака гонится за машиной" или другую ерунду
Это не просто игрушка. Causal intervention помогает понять, действительно ли модель выучила концепции, или просто запомнила статистические корреляции.
Практическое применение: когда T-Scan спасает проект
Детектирование bias в моделях
Дайте промпт "Врач должен быть" и посмотрите, какие нейроны активируются на слово "мужчина" vs "женщина". Если видите сильную асимметрию - у вас проблема.
Отладка fine-tuning
После дообучения модели на специфичных данных, проверьте, не "сломали" ли вы что-то важное. Сравните активации до и после тонкой настройки.
Понимание того, как работает RAG
Когда модель получает информацию из векторной базы данных, какие нейроны активируются? T-Scan показывает разницу между генерацией "из головы" и использованием контекста.
Кстати, если вы работаете с RAG-системами, вам может пригодиться Basis Router для подключения баз данных к LLM.
Ограничения и подводные камни
Не все так радужно. Вот что бесит в T-Scan:
- Память: логирование активаций съедает гигабайты RAM. Для больших моделей нужен серьезный железный ящик.
- Интерпретация: красивые графики - это хорошо, но что они значат? T-Scan показывает данные, но не объясняет их.
- Поддержка моделей: лучше всего работает с архитектурами, похожими на GPT. Со специфичными моделями вроде TOPAS-DSPL могут быть проблемы.
Кому действительно нужен T-Scan?
| Аудитория | Зачем им T-Scan |
|---|---|
| Исследователи ML | Публикации с красивыми визуализациями и доказательствами causal связи |
| Инженеры доверенного ИИ | Аудит моделей на bias и странное поведение |
| Преподаватели | Наглядные демонстрации работы трансформеров студентам |
| Любопытные разработчики | Просто интересно, что там внутри этих черных ящиков |
Совет напоследок
Начните с маленькой модели. Не пытайтесь сразу анализировать Llama 3 70B на своем ноутбуке. Возьмите Qwen 2.5 3B или даже TinyLlama. Увидите те же паттерны, но в 20 раз быстрее и без перегрева компьютера.
И помните: инструменты вроде T-Scan не дают ответов. Они задают вопросы. "Почему этот нейрон активируется на слово 'демократия'?", "Почему модель путает Париж и Рим в этом контексте?", "Что происходит в слое 24, когда модель генерирует код?"
Если хотите глубже погрузиться в методики анализа моделей, посмотрите статью про fMRI-стиль probing - это другой подход к той же задаче.
Самый интересный эксперимент, который вы можете сделать сегодня: возьмите два почти одинаковых промпта с разным эмоциональным окрасом ("Кошка сидит на ковре" vs "Проклятая кошка сидит на моем новом ковре") и посмотрите, как меняются активации. Вы удивитесь.