Zero-shot и Few-shot Learning в NLP

Определения

Zero-shot Learning (ZSL) — это способность модели выполнять задачи без каких-либо примеров обучения. Она делает это за счёт обобщённых знаний, полученных во время предобучения.

Few-shot Learning (FSL) — это метод, при котором модели предоставляется всего несколько примеров (обычно от 1 до 5), чтобы лучше понять структуру задачи.

Архитектура

Zero-shot и Few-shot Learning реализуются в трансформерных архитектурах (GPT, Mistral, LLaMA и тд.) за счёт трех основных внутренних механизмов:

  • Предобученные эмбеддинги: модель уже имеет какие либо знания.

  • Контекстное внимание (Self-Attention): позволяет адаптироваться к входным данным.

  • Обучение без градиентного спуска: модель не обновляет веса, а работает с внутренними представлениями.

Как это работает в трансформерах?

Трансформер работаетавто-регрессионно (последовательно предсказывает каждый следующий токен):

Где:

  • ɯ_t — следующее слово, предыдущие же слова задают контекст.

  • ɯ_i​ (i ∊ [1, t-1]) — предыдущие токены.

  • P (ɯ_t) — вероятность появления токена.

После обработки входных токенов через self-attention и FFN-слои, модель подаёт выходные представления в линейный слой + softmax, который превращает их в вероятности.

Финальная формула:

Где:

  • h_t​ — представление скрытого состояния на шаге ttt.

  • W — матрица весов, сопоставляющая скрытые состояния с токенами словаря.

  • Softmax преобразует сырые логиты в вероятности.

Zero-shot в архитектуре

  • Модель получает только запрос (промпт) и вычисляет вероятности возможных токенов.

  • Она полагается на латентные представления из предобученного корпуса.

  • Процесс основан на знаниях, встроенных в веса модели.

Few-shot в архитектуре

  • Входная последовательность включает несколько примеров (input-label pairs).

  • Модель сравнивает паттерны в примерах и адаптирует вероятностное распределение.

  • Это создаёт динамическую адаптацию к новой задаче без дообучения.

Компоненты архитектуры

Токенизация и эмбеддинги

Перед подачей в трансформер текст проходит через токенизатор (например, Byte-Pair Encoding или SentencePiece).

  • Zero-shot: промпт сразу конвертируется в токены.

  • Few-shot: примеры и запрос объединяются в единый контекстный блок.

Многоголовое внимание (Multi-Head Attention)

Позволяет учитывать сразу несколько интерпретаций входного текста.

  • Zero-shot: внимание распределяется только по входному запросу.

  • Few-shot: внимание анализирует как примеры, так и новый вход.

Feedforward-слои и нормализация

После self-attention модель проходит через нелинейные преобразования (MLP-слои) и нормализуется.

  • Это помогает выявлять скрытые закономерности в примерах few-shot.

Выходной слой (Softmax over Vocabulary)

Модель предсказывает токены, вычисляя вероятности для каждого слова в словаре.

  • Zero-shot: softmax основан на общем знании модели.

  • Few-shot: softmax сдвигается в сторону примеров, которые были в контексте.

Математика адаптации к контексту (Few-shot)

Few-shot работает за счёт байесовского обновления вероятностей. Если x — входной текст, а y — ожидаемый ответ, то:

  • D — дополнительные примеры (few-shot).

  • P (D∣y, x)— насколько данные соответствуют известным примерам.

  • P (y∣x) — базовая вероятность ответа без примеров (zero-shot).

  • P (D∣x) — нормализующий член.

Что объясняет, почему добавление примеров сужает распределение вероятностей и повышает точность.

Почему это работает без обновления весов?

Трансформеры обучены так, что могут использовать контекст как временную память. Когда мы даём примеры в промпте:

  • Self-attention «вычисляет» правило из входных данных.

  • Feedforward-слои экстраполируют это правило на новый вход.

  • Модель имитирует обучение, хотя веса остаются неизменными.

Такой механизм называют in-context learning (ICL) — «обучение в контексте».

Разница между Zero-shot, Few-shot и Fine-tuning в продакшене.

Zero-shot и Few-shot не требуют обучения, но имеют более высокие затраты на обработку запроса (из-за длинных промптов в Few-shot).

Fine-tuning требует значительных затрат на обучение, но затем дешев в использовании.

Zero-shot Learning

  • Использует внутренние знания модели без примеров.

  • Хорошо работает на обобщенных задачах (классификация, генерация, перевод).

  • Ограниченная точность, особенно в узкоспециализированных доменах.

  • Низкие вычислительные затраты: 0.3 — 1 teraFLOPs на запрос.

Few-shot Learning

  • Позволяет модели лучше понять контекст задачи за счёт нескольких примеров.

  • Требует продуманного выбора примеров (prompt engineering).

  • Эффективен в случаях, когда доступно мало размеченных данных.

  • Средние вычислительные затраты: 0.5 — 2 teraFLOPs на запрос.

Fine-tuning

  • Требует большого количества размеченных данных.

  • Позволяет модели адаптироваться под конкретный домен.

  • Долгое обучение, высокая стоимость вычислений, но максимальная точность.

  • Очень высокие затраты на обучение: 100 — 500+ teraFLOPs.

Выбор подхода зависит от задачи: если требуется быстро протестировать модель на новой задаче, Zero-shot или Few-shot — оптимальный вариант. Если же необходима максимальная точность и стабильность, Fine-tuning остаётся лучшим решением.

© Habrahabr.ru