Как работает градиентный анализ для объяснения решений LLM?
Краткий тезис
Градиентный анализ — это семейство методов интерпретируемости, которые используют производные выхода модели по входным признакам (токенам, эмбеддингам, внутренним представлениям) для оценки их вклада в предсказание. Основные подходы: Saliency Maps, Gradient × Input, Integrated Gradients и SHAP с градиентным приближением. В контексте RAG градиентный анализ позволяет определить, какой чанк из retrieval сильнее всего повлиял на генерацию ответа, что повышает прозрачность и доверие к системе.
1. Термин: Градиентный анализ (Gradient-based attribution)
Градиентный анализ — это метод объяснения решений нейронных сетей, основанный на вычислении частных производных целевой функции (например, вероятности предсказанного токена) по входным признакам. Идея: если небольшое изменение входного признака сильно меняет выход, то этот признак важен для решения.
Математическая основа
Для модели ( F(x) ) с входом ( x \in \mathbb{R}^d ) и выходом ( y ) (логит или вероятность) градиент ( \nabla_x F(x) ) показывает направление наибольшего роста функции. Атрибуция признака ( i ) — это ( \frac{\partial F}{\partial x_i} ) или его модификации.
Зачем это нужно для LLM
- Отладка: понять, почему модель сгенерировала конкретный токен или ответ.
- Доверие: пользователь видит, на какие части запроса или контекста модель опиралась.
- Улучшение RAG: выявить, какие чанки из базы знаний действительно повлияли на ответ, а какие были проигнорированы.
2. Основные методы градиентного анализа
2.1 Saliency Maps (Vanilla Gradient)
Самый простой метод: атрибуция = градиент выхода по входу.
( A_i = \frac{\partial F(x)}{\partial x_i} )
Плюсы простота, быстрота.
Минусы градиенты могут быть зашумлены; не учитывают масштаб входа (большой градиент на маленьком входе может быть незначительным).
2.2 Gradient × Input
Умножение градиента на значение входа:
( A_i = x_i \cdot \frac{\partial F(x)}{\partial x_i} )
Идея если признак имеет нулевое значение, его вклад равен нулю, даже если градиент большой. Учитывает и направление, и величину.
Пример: для текстовых токенов ( x_i ) — это эмбеддинг токена. Атрибуция показывает, какие токены в запросе или контексте наиболее важны.
2.3 Integrated Gradients (IG)
Метод, удовлетворяющий аксиомам чувствительности и инвариантности к реализации. Вычисляется как интеграл градиентов вдоль прямого пути от baseline (нулевой вход, например, пустой текст или токен [Вики/padded sequences|PAD) до реального входа:
[ A_i = (x_i - x_i') \int_{[alpha](/wiki/alpha)=0}^{1} \frac{\partial F(x' + [alpha](/wiki/alpha) (x - x'))}{\partial x_i} d[alpha](/wiki/alpha) ]
На практике интеграл аппроксимируется суммой по ( m ) равномерно распределённым точкам ( \alpha_k ).
Плюсы теоретически обоснован, даёт стабильные атрибуции.
Минусы требует выбора baseline (для текста часто — нулевой эмбеддинг или токен [PAD]); вычислительно дороже (нужно ( m ) forward+backward проходов).
2.4 SHAP с градиентным приближением (GradientSHAP)
SHAP (SHapley Additive exPlanations) — метод из теории игр, вычисляющий вклад каждого признака как среднее по всем подмножествам признаков. Для нейросетей точный SHAP непрактичен, поэтому используют аппроксимации: GradientSHAP (комбинация SHAP и Integrated Gradients) или KernelSHAP (линейная аппроксимация).
GradientSHAP: атрибуция = ожидание Gradient × Input по случайным подмножествам признаков (сэмплирование baseline).
Плюсы согласованность с теорией Шепли.
Минусы всё ещё вычислительно затратно.
2.5 Attention Attribution
Для трансформеров можно анализировать градиенты по attention weights (весам внимания). Методы:
- Attention Rollout: распространение весов внимания по слоям.
- Grad-CAM для трансформеров: градиенты по attention scores, взвешенные на активации.
Идея важность токена определяется тем, насколько сильно attention на него влияет на выход через градиенты.
3. Как градиентный анализ применяется к LLM
3.1 Токен-уровень
Для каждого токена входа (запрос + контекст) вычисляется атрибуция. Результат — тепловая карта: красные токены — положительный вклад в генерацию ответа, синие — отрицательный.
Пример:
Запрос: «Какая столица Франции?»
Контекст: «Париж — столица Франции.»
Атрибуция покажет, что токены «Париж» и «Франции» имеют высокий положительный вклад.
3.2 Слой-уровень и head-уровень
Можно анализировать градиенты по промежуточным представлениям (скрытые состояния) или по attention heads. Это помогает понять, какие слои и головы отвечают за извлечение фактов, а какие — за синтаксис.
3.3 Для RAG: attribution по чанкам
В RAG-системе контекст состоит из нескольких чанков. Чтобы определить, какой чанк повлиял на ответ:
- Вычислить атрибуцию для всех токенов контекста.
- Агрегировать атрибуции по чанкам (сумма, среднее, максимум).
- Чанк с наибольшей агрегированной атрибуцией считается наиболее важным.
Проблема атрибуция на уровне токенов может быть шумной. Лучше использовать Integrated Gradients или Gradient × Input с усреднением по нескольким запускам.
4. Проблемы и ограничения градиентного анализа
| Проблема | Описание | Решение |
|---|---|---|
| Шум градиентов | Градиенты могут быть большими по модулю, но случайными. | Сглаживание (SmoothGrad): усреднение по нескольким копиям входа с малым шумом. |
| Насыщение | Для функций с насыщением (например, softmax) градиенты могут быть близки к нулю даже для важных признаков. | Integrated Gradients частично решает эту проблему. |
| Зависимость от baseline | Для IG выбор baseline влияет на результат. | Использовать несколько baseline (нулевой эмбеддинг, [PAD], случайный текст) и усреднять. |
| Вычислительная стоимость | IG требует ( m ) проходов (обычно 50–200). | Использовать меньше шагов (20–50) или аппроксимации. |
| Интерпретируемость для человека | Атрибуции — это числа, их нужно визуализировать. | Тепловые карты, диаграммы важности. |
5. Инструменты для градиентного анализа LLM
- Captum (PyTorch): поддерживает Integrated Gradients, Gradient × Input, SHAP, SmoothGrad. Есть модуль для текстовых моделей.
- Transformers Interpret: обёртка над Captum для моделей Hugging Face.
- LIT (Language Interpretability Tool) от Google: визуальный инструмент для анализа атрибуций.
- Ecco: библиотека для интерпретации GPT-2 и BERT.
Пример кода с Captum
from captum.attr import IntegratedGradients
from transformers import AutoTokenizer, AutoModelForCausalLM
model_name = "mistralai/Mistral-7B-v0.1"
tokenizer = AutoTokenizer.from_pretrained(model_name)
model = AutoModelForCausalLM.from_pretrained(model_name, torch_dtype=torch.float16)
# Подготовка входа
prompt = "Столица Франции —"
inputs = tokenizer(prompt, return_tensors="pt")
input_ids = inputs["input_ids"]
# Integrated Gradients
ig = IntegratedGradients(model)
attributions, delta = ig.attribute(input_ids, target=0, n_steps=50, return_convergence_delta=True)
# Визуализация
tokens = tokenizer.convert_ids_to_tokens(input_ids[0])
for token, attr in zip(tokens, attributions[0]):
print(f"{token}: {attr:.4f}")
6. Пет-проект для закрепления
Задача Построить систему объяснения для RAG-пайплайна, которая показывает, какой чанк из retrieval больше всего повлиял на ответ LLM.
Инструменты
- Hugging Face Transformers (LLM, например, Mistral-7B)
- Sentence Transformers (эмбеддинги для retrieval)
- FAISS (векторная БД)
- Captum (Integrated Gradients)
Шаги:
- Создать простую RAG: загрузить несколько документов (например, статьи из Википедии), разбить на чанки, построить FAISS-индекс.
- Написать функцию retrieval: по запросу ищет top-3 чанка.
- Сформировать полный контекст: объединить чанки в один текст.
- Вычислить Integrated Gradients для каждого токена контекста относительно генерации первого токена ответа.
- Агрегировать атрибуции по чанкам (сумма абсолютных значений).
- Визуализировать: вывести чанки с их атрибуциями в виде гистограммы.
Ожидаемый результат
Для запроса «Какая столица Франции?» система покажет, что чанк, содержащий «Париж — столица Франции», имеет атрибуцию 0.85, а чанк про «Франция — страна в Европе» — 0.15. Это подтверждает, что LLM опиралась на первый чанк.
7. Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 286 | Как работают attention weights в RAG? |
| 288 | Как использовать SHAP для объяснения RAG? |
| 289 | Как интерпретировать эмбеддинги в RAG? |
| 290 | Как детектировать галлюцинации в RAG? |
| 291 | Как оценивать faithfulness (фактологичность) ответов? |
8. Навигация
- Предыдущий: 286
- Следующий: 288
- Индекс: 00. Индекс разборов
Навигация
- Предыдущий: 286
- Следующий: 288
- Индекс: 00. Индекс разборов