Что такое synthetic data collapse (когда синтетические данные деградируют со временем)?
Краткий тезис
Synthetic data collapse — это явление, при котором модели, обученные на данных, сгенерированных другой LLM, постепенно теряют качество: уменьшается разнообразие ответов, усиливаются систематические ошибки (bias), а ошибки накапливаются от поколения к поколению. Это критическая проблема для RAG и RAG|Agentic RAG, где синтетические данные часто используются для дообучения или создания контекстов. Основные причины — потеря diversity, усиление bias и накопление ошибок; профилактика включает смешивание с реальными данными, ансамблевые генерации и регулярное обновление промптов.
1. Термин: Synthetic data collapse (коллапс синтетических данных)
Synthetic data collapse (также известен как model collapse или data degeneration) — это процесс, при котором модель, обученная на данных, порождённых другой моделью (или самой собой), со временем деградирует. Каждое новое поколение модели становится менее разнообразным, более зашумлённым и менее точным.
Термин «Коллапс» (collapse) означает резкое ухудшение качества, часто нелинейное — после нескольких итераций модель может «схлопнуться» до узкого набора шаблонных ответов.
Ключевая идея: синтетические данные не содержат новой информации, они лишь перерабатывают уже известное. Если использовать их как единственный источник обучения, модель начинает «зацикливаться» на собственных ошибках и теряет способность к обобщению.
2. Причины synthetic data collapse
2.1 Потеря разнообразия (loss of diversity)
Синтетические данные, сгенерированные одной LLM, имеют ограниченное разнообразие — модель склонна к повторению типичных паттернов, особенно если используется temperature < 1.0 или top-p < 1.0. Со временем редкие, но важные варианты ответов исчезают.
Пример: если первая модель генерирует только три варианта ответа на вопрос о погоде («солнечно», «дождливо», «облачно»), то следующая модель, обученная на этих данных, никогда не увидит «снег» или «туман». Через несколько поколений разнообразие сужается до одного-двух вариантов.
2.2 Усиление систематических ошибок (bias amplification)
Любая LLM имеет неотъемлемые bias (смещения) — например, культурные, гендерные, стилистические. Когда синтетические данные генерируются моделью с bias, следующая модель учится на этих искажённых данных и усиливает bias. Каждое поколение делает смещение более выраженным.
Пример: если первая модель чаще генерирует ответы с мужскими местоимениями для профессий, то вторая модель будет делать это ещё чаще, третья — ещё, пока женские варианты не исчезнут полностью.
2.3 Накопление ошибок (error accumulation)
Модели не идеальны — они допускают фактические ошибки, логические нестыковки, грамматические погрешности. Когда такие ошибки попадают в обучающие данные следующей модели, та учится их повторять и может добавить новые. Со временем ошибки накапливаются, и качество ответов падает.
Пример: первая модель неправильно указывает дату события. Вторая модель, обученная на этом, не только повторяет дату, но и добавляет неверные детали. Третья модель уже «знает» целую вымышленную историю.
3. Механизм коллапса: поколения моделей
Процесс можно описать как итеративный цикл:
- Поколение 0 исходная модель (например, GPT-4) генерирует синтетический датасет.
- Поколение 1 новая модель (например, LLaMA) обучается на этом датасете. Она наследует bias и ошибки исходной модели, но теряет часть diversity из-за ограниченного размера выборки и дискретизации.
- Поколение 2 модель поколения 1 генерирует новый датасет, который используется для обучения поколения 2. Diversity ещё меньше, bias ещё сильнее, ошибки множатся.
- Поколение N модель «схлопывается» — выдаёт однообразные, часто бессмысленные или повторяющиеся ответы.
Исследование работа «The Curse of Recursion: Training on Generated Data Makes Models Forget» (Shumailov et al., 2023) показала, что даже небольшая доля синтетических данных в обучающей выборке может привести к коллапсу после нескольких итераций.
4. Примеры synthetic data collapse
4.1 Эксперимент с Gaussian mixture
В статье Shumailov et al. авторы смоделировали коллапс на простом примере: исходные данные — смесь двух гауссиан. После нескольких итераций обучения на сгенерированных данных распределение «схлопывается» в одну гауссиану, теряя вторую моду.
4.2 Текстовый пример
Предположим, исходная модель генерирует короткие биографии известных людей. После нескольких поколений:
- Поколение 0: «Альберт Эйнштейн родился в 1879 году в Германии. Он разработал теорию относительности.»
- Поколение 1: «Эйнштейн родился в 1879 году. Он создал теорию относительности.»
- Поколение 2: «Эйнштейн родился в 1879. Теория относительности.»
- Поколение 3: «Эйнштейн 1879 относительность.»
- Поколение 4: «1879 относительность.»
Теряется не только грамматика, но и факты (страна, имя).
5. Связь с RAG и Agentic RAG
В контексте RAG (Retrieval-Augmented Generation) и Agentic RAG синтетические данные часто используются для:
- Дообучения (fine-tuning) retriever или generator на специфическую предметную область.
- Создания синтетических вопросов и ответов для оценки качества retrieval.
- Генерации контекстов для агентов (например, при автоматическом создании инструкций).
Проблема если синтетические данные, используемые для fine-tuning, содержат коллапс, то модель может:
- Ухудшить качество retrieval (retriever будет хуже находить релевантные документы).
- Генерировать менее разнообразные и более шаблонные ответы.
- Усилить bias в ответах агента.
Особенно опасно в Agentic RAG, где агент может многократно использовать собственные сгенерированные данные для самообучения (self-play, iterative refinement). Без контроля коллапс наступает быстрее.
6. Профилактика synthetic data collapse
6.1 Смешивание с реальными данными (real data mixing)
Самый надёжный способ — всегда добавлять некоторую долю реальных, человеческих данных в обучающую выборку. Рекомендуемая пропорция: 10–30% реальных данных от общего объёма.
Почему это работает реальные данные содержат естественное разнообразие, редкие паттерны и меньше систематических ошибок. Они «разбавляют» синтетику и не дают модели схлопнуться.
6.2 Ансамблевая генерация (ensemble generation)
Использовать несколько разных LLM для генерации синтетических данных, а затем объединять их. Каждая модель имеет свои bias и ошибки, поэтому ансамбль даёт более разнообразный и сбалансированный датасет.
Пример: генерация данных с помощью GPT-4, Claude и LLaMA, затем перемешивание и дедупликация.
6.3 Регулярное обновление промптов генерации
Промпты, используемые для генерации синтетических данных, должны периодически меняться. Это предотвращает «застревание» модели в одном стиле или тематике.
Практика каждые N итераций менять формулировку, добавлять случайные элементы (например, рандомизировать примеры в few-shot), использовать разные уровни детализации.
6.4 Фильтрация и контроль качества
После генерации синтетических данных необходимо фильтровать:
- Удалять дубликаты и near-duplicates.
- Проверять факты (factuality) с помощью внешних источников.
- Оценивать diversity (например, через n-gram разнообразие или эмбеддинг-расстояния).
6.5 Использование нескольких поколений с оценкой
Не стоит обучать модель на многих поколениях синтетических данных подряд. Лучше после каждого поколения оценивать качество (например, на бенчмарке) и останавливаться, если метрики начинают падать.
7. Метрики для обнаружения коллапса
| Метрика | Описание | Как измерять |
|---|---|---|
| Perplexity | Растёт при ухудшении качества генерации | На валидационном наборе реальных данных |
| Self-BLEU | Показывает разнообразие внутри сгенерированного датасета | Чем выше Self-BLEU, тем меньше diversity |
| Distinct-n | Доля уникальных n-грамм в сгенерированных текстах | Падение distinct-1,2,3 указывает на коллапс |
| Accuracy на бенчмарке | Падение точности на стандартных тестах (MMLU, HellaSwag) | Сравнение поколений |
| Embedding diversity | Среднее попарное косинусное расстояние между эмбеддингами ответов | Уменьшение расстояния → коллапс |
8. Пример кода: симуляция коллапса на простом датасете
import random
from collections import Counter
# Исходный набор фраз (имитация реальных данных)
real_phrases = [
"сегодня солнечно",
"идет дождь",
"облачно с прояснениями",
"снегопад",
"туман",
"ветрено",
"гроза",
"град",
]
# Функция генерации синтетических данных (имитация LLM)
def generate_synthetic(phrases, n=100):
# Модель "запоминает" только самые частые фразы
counter = Counter(phrases)
# Выбираем топ-3 по частоте, остальные с малой вероятностью
top = [p for p, _ in counter.most_common(3)]
result = []
for _ in range(n):
if random.random() < 0.8:
result.append(random.choice(top))
else:
result.append(random.choice(phrases))
return result
# Симуляция поколений
phrases = real_phrases.copy()
for gen in range(5):
synthetic = generate_synthetic(phrases, n=200)
# Оценка diversity: количество уникальных фраз
unique = len(set(synthetic))
print(f"Поколение {gen}: уникальных фраз = {unique}")
# Новое поколение "обучается" на синтетике
phrases = synthetic
Ожидаемый вывод количество уникальных фраз будет уменьшаться с каждым поколением, пока не останется 1–2 фразы.
Пет-проект для закрепления
Задача разработать систему мониторинга synthetic data collapse для RAG-пайплайна.
Инструменты Python, Hugging Face Transformers, FAISS, RAGAS.
Шаги:
- Создайте небольшой корпус реальных документов (например, 100 статей из Википедии).
- Используйте LLM (например, Mistral-7B) для генерации синтетических вопросов и ответов по этим документам.
- Обучите простой retriever (например, Sentence-BERT) на реальных данных, затем дообучите на синтетических.
- После каждой итерации дообучения оценивайте:
- Diversity сгенерированных ответов (Self-BLEU, distinct-n).
- Accuracy retrieval (hit rate, MRR) на реальном тестовом наборе.
- Faithfulness ответов (с помощью RAGAS).
- Внедрите профилактику: на каждой итерации добавляйте 20% реальных данных в обучающую выборку.
- Сравните динамику метрик с и без профилактики.
Ожидаемый результат вы увидите, что без смешивания с реальными данными метрики падают после 2–3 итераций, а с профилактикой — стабильны.
Связь с другими вопросами
| Вопрос | Тема |
|---|---|
| 687 | Что такое synthetic data generation и как её использовать в RAG? |
| 689 | Как оценивать качество синтетических данных? |
| 45 | Что такое data contamination и как её избежать? |
| 120 | Как дообучать (fine-tune) LLM на синтетических данных? |
| 310 | Какие метрики diversity используются для оценки генерации? |
| 512 | Как работает self-play в обучении агентов? |
Навигация
- Предыдущий: 687
- Следующий: 689
- Индекс: 00. Индекс разборов