Что такое differential privacy для LLM и как она работает?

Краткий тезис

Differential privacy (DP) — это математическое определение приватности, гарантирующее, что добавление или удаление одного образца из обучающего набора не изменит выход модели более чем на заданную величину ε. Для LLM DP реализуется через DP-SGD (parallelism|Differentially Private Stochastic Gradient Descent): на каждом шаге градиенты обрезаются по норме, а затем к ним добавляется контролируемый шум. Это предотвращает запоминание моделью конфиденциальных данных, но снижает точность на 5–15% и замедляет обучение. DP критически важна для приложений в медицине, финансах и других областях с чувствительными данными.


1. Определение differential privacy

Differential privacy — это формальное свойство алгоритма (например, обучения модели), которое ограничивает влияние любого отдельного элемента данных на результат. Говорят, что алгоритм M удовлетворяет (ε, δ)-DP, если для любых двух наборов данных D и D', различающихся ровно на один элемент, и для любого подмножества возможных выходов S выполняется:

Pr[M(D) ∈ S] ≤ e^ε · Pr[M(D') ∈ S] + δ
  • ε (epsilon) — параметр приватности: чем меньше ε, тем сильнее гарантия. Типичные значения: 0.1–10.
  • δ (delta) — вероятность нарушения гарантии (обычно < 1/N, где N — размер датасета).
  • При δ = 0 говорят о чистой ε-DP.

Для LLM алгоритмом M является процесс обучения (или fine-tuning), а выходом — финальные веса модели.


2. Как работает DP-SGD

DP-SGD — стандартный метод внедрения DP в обучение нейросетей. Основные шаги:

  1. Градиентный клиппинг (gradient clipping). Для каждого образца в мини-батче вычисляется градиент. Затем каждый градиент обрезается по L2-норме до заданного порога C:

    g_i' = g_i / max([[1. Как бы вы спроектировали RAG-систему для 10 000 документов с разной структурой|1]], ||g_i||_2 / C)
    

    Это ограничивает максимальное влияние одного образца.

  2. Добавление шума. К усреднённому (или суммированному) обрезанному градиенту добавляется случайный шум, обычно из нормального распределения:

    g_noisy = (1/B) * Σ g_i' + N(0, σ²·C²·I)
    

    где B — размер батча, σ — множитель шума (noise multiplier), управляющий уровнем приватности.

  3. Обновление весов с использованием зашумлённого градиента.

  4. Учёт композиции (privacy accounting). Для оценки общего ε за несколько шагов используется моментный accountant (Rényi DP или zCDP), который даёт более точную оценку, чем наивное сложение.


3. Почему DP важна для LLM

LLM склонны к memorization — запоминанию уникальных или повторяющихся фрагментов обучающих данных. Это может привести к утечке конфиденциальной информации (например, номеров кредитных карт, медицинских записей). Примеры:

  • Модель GPT-2 могла воспроизводить личные данные из Wikipedia.
  • Fine-tuning на приватных данных (например, переписка пациентов) без DP может скомпрометировать приватность.

DP даёт математическую гарантию, что даже если злоумышленник знает все остальные данные, он не сможет определить, присутствовал ли конкретный образец в обучении.


4. Реализация DP-SGD на практике

Основные библиотеки:

Пример конфигурации в Opacus:

from opacus import PrivacyEngine

model = YourLLM()
optimizer = torch.optim.SGD(model.parameters(), lr=0.01)
data_loader = torch.utils.data.DataLoader(dataset, batch_size=32)

privacy_engine = PrivacyEngine()
model, optimizer, data_loader = privacy_engine.make_private(
    module=model,
    optimizer=optimizer,
    data_loader=data_loader,
    noise_multiplier=1.0,      # σ
    max_grad_norm=1.0,         # C
    poisson_sampling=True,     # для корректного учёта
)

# Стандартный цикл обучения
for epoch in range(epochs):
    for batch in data_loader:
        optimizer.zero_grad()
        loss = criterion(model(batch), labels)
        loss.backward()
        optimizer.step()

После обучения можно получить потраченный ε:

epsilon = privacy_engine.get_epsilon(delta=1e-5)
print(f"ε = {epsilon:.2f}")

5. Влияние на обучение LLM

АспектБез DPС DP (DP-SGD)
ТочностьБазоваяПадение на 5–15% (зависит от ε)
Скорость обученияСтандартнаяЗамедление в 2–5 раз из-за per-sample clipping
Потребление памятиСтандартноеУвеличение в 2–4 раза (хранение градиентов на образец)
Размер батчаЛюбойРекомендуется большой (лучше соотношение сигнал/шум)
ГиперпараметрыСтандартныеТребуется подбор noise_multiplier, max_grad_norm

Почему падает точность Шум искажает градиенты, что замедляет сходимость и может привести к субоптимальному решению. Компромисс: меньший ε → больше шума → ниже точность.


6. Выбор параметров ε и δ

  • δ обычно выбирают меньше 1/N (N — размер датасета). Для датасета из 1 млн записей δ = 1e-6.
  • ε зависит от требуемого уровня приватности:
    • ε < 1 — сильная приватность (медицина).
    • ε = 1–10 — умеренная приватность (финансы, рекомендации).
    • ε > 10 — слабая приватность (почти как без DP).

На практике для LLM часто используют ε = 3–8, чтобы сохранить приемлемое качество.


7. Ограничения и альтернативы

  • Per-sample clipping требует значительной памяти и времени. Для больших LLM (10B+ параметров) DP-SGD практически неприменим без специальных оптимизаций (например, Ghost Clipping, JAX primitives).
  • Альтернативы:
    • DP-Fine-tuning — применять DP только на этапе дообучения, а не с нуля.
    • PATE (Private Aggregation of Teacher Ensembles) — другой подход, но редко используется для LLM.
    • Дифференциально-приватный вывод (DP inference) — добавление шума в выходные логиты.

8. Пример: DP fine-tuning BERT на медицинских текстах

import torch
from transformers import BertForSequenceClassification, BertTokenizer
from opacus import PrivacyEngine

model = BertForSequenceClassification.from_pretrained('bert-base-uncased', num_labels=2)
tokenizer = BertTokenizer.from_pretrained('bert-base-uncased')

# Подготовка данных (пример)
texts = ["Patient has ...", ...]
labels = [0, 1, ...]
dataset = torch.utils.data.TensorDataset(
    tokenizer(texts, padding=True, truncation=True, return_tensors='pt')['input_ids'],
    torch.tensor(labels)
)
loader = torch.utils.data.DataLoader(dataset, batch_size=16, shuffle=True)

optimizer = torch.optim.AdamW(model.parameters(), lr=2e-5)

privacy_engine = PrivacyEngine()
model, optimizer, loader = privacy_engine.make_private(
    module=model,
    optimizer=optimizer,
    data_loader=loader,
    noise_multiplier=0.5,
    max_grad_norm=1.0,
    poisson_sampling=False,
)

for epoch in range(3):
    for batch in loader:
        optimizer.zero_grad()
        outputs = model(batch[0], labels=batch[1])
        loss = outputs.loss
        loss.backward()
        optimizer.step()

epsilon = privacy_engine.get_epsilon(delta=1e-5)
print(f"Общий ε: {epsilon:.2f}")

9. Применение DP в контексте RAG

В Agentic RAG DP может использоваться для:

  • Приватного fine-tuning эмбеддинговой модели или LLM-генератора на чувствительных документах.
  • DP-ретривер — обучение ретривера с гарантией, что наличие/отсутствие одного документа не повлияет на выдачу.
  • Защита от атак извлечения (membership inference) на этапе генерации ответа.

Однако DP не защищает от утечки через сам контекст (если документ уже попал в промпт). Поэтому в RAG часто комбинируют DP с другими методами (например, шифрование, access control).


Пет-проект для закрепления

Задача: Обучить небольшую LLM (например, DistilGPT-2) на синтетическом датасете с личными данными (имена, адреса) с DP и без, затем сравнить точность и способность модели воспроизводить приватные строки.

Инструменты: Python, Hugging Face Transformers, Opacus, datasets.

Шаги:

  1. Сгенерировать датасет из 1000 текстов, каждый содержит случайное имя и адрес (например, "John Doe lives at 123 Main St").
  2. Разделить на train/test.
  3. Обучить DistilGPT-2 без DP (стандартный fine-tuning) — замерить perplexity и способность генерировать точные имена/адреса из train.
  4. Обучить с DP (ε=3, δ=1e-5) — замерить те же метрики.
  5. Сравнить: насколько упала perplexity, сколько приватных строк модель запомнила (проверить, генерирует ли она их при промпте "The patient is").

Ожидаемый результат: Модель без DP будет часто воспроизводить точные имена/адреса (утечка), модель с DP — нет, но её perplexity будет выше на 10–20%.


Связь с другими вопросами

ВопросТема
615Безопасность и приватность в RAG
618Атаки на LLM (inference, extraction)
619Этические аспекты и compliance (GDPR)
621Federated learning для LLM
625Аудит и мониторинг моделей
630Обработка чувствительных данных в пайплайне

Навигация