# Как LLM видят изображения

> LLM понимает только последовательности токенов, поэтому картинку превращают в «визуальные слова»: ViT режет её на патчи, CLIP учит энкодер смыслу изображений, а проектор подаёт визуальные токены в языковую модель (VLM).

Раздел: [Мультимодальные модели](https://ml-book.com/s/multimodal/) · Страница темы: https://ml-book.com/t/multimodal-llm/ · Обновлено: 2026-07-07 · Источник: ml-book.com, учебник делается сообществом

## Интуиция

Языковая модель — это машина предсказания следующего токена. У неё нет глаз: на вход она принимает только последовательность векторов-эмбеддингов. Значит, чтобы модель «увидела» фотографию, картинку нужно превратить в такую же последовательность векторов, как и текст.

Представь, что описываешь картину другу по телефону: ты мысленно делишь её на фрагменты — «слева домик, над ним красная крыша, справа солнце» — и передаёшь кусок за куском. Современные мультимодальные модели (multimodal LLM, VLM — visual language model) делают буквально то же самое: изображение режется на маленькие квадратики, и каждый квадратик становится «визуальным словом» в общей последовательности.

## Как это работает: ViT и CLIP

Основа почти всех VLM — Vision Transformer (ViT). Он поступает с картинкой так:

- изображение режется на патчи (patch) фиксированного размера — обычно 14×14 или 16×16 пикселей;
- пиксели каждого патча вытягиваются в один длинный вектор и умножаются на обучаемую матрицу — это линейная проекция (linear projection) в пространство эмбеддингов;
- к каждому вектору добавляется позиционный эмбеддинг (где патч стоял в картинке), и дальше работает обычный [трансформер](https://ml-book.com/t/transformer/).

Число визуальных токенов легко посчитать:

`N = (H / P) × (W / P)`

где H×W — разрешение картинки, P — размер патча. Например, 336×336 при патче 14 даёт 24 × 24 = 576 токенов — ровно столько «стоит» одна картинка в классической LLaVA.

Но откуда энкодер знает *смысл* патчей? Здесь ключевую роль сыграл CLIP — модель, обученную контрастивно (contrastive learning) на сотнях миллионов пар «картинка–подпись»: эмбеддинги правильных пар сближаются, эмбеддинги неправильных — раздвигаются. После такого претрейна эмбеддинг картинки живёт в одном пространстве с текстом, и появляется zero-shot классификация: сравниваем эмбеддинг фото с эмбеддингами фраз «фото кошки», «фото собаки» — и берём ближайший, без всякого дообучения.

> **💡 Ключевая мысль**
>
> Картинка для LLM — просто ещё несколько сотен токенов в последовательности. Отличие лишь в том, что их эмбеддинги пришли не из текстового словаря, а из vision-энкодера через проектор.

> 🎛 Интерактивная визуализация — на странице темы: https://ml-book.com/t/multimodal-llm/

## Архитектура VLM: LLaVA-подход

Самый распространённый рецепт сборки VLM (его популяризовала LLaVA) — три детали:

- **Замороженный vision-энкодер** (обычно CLIP ViT) — превращает картинку в набор патч-эмбеддингов;
- **Проектор (адаптер)** — маленький MLP или cross-attention-модуль (как Q-Former в BLIP-2), который переводит визуальные эмбеддинги в пространство [эмбеддингов](https://ml-book.com/t/embeddings/) LLM: выравнивает и размерность, и «язык» векторов;
- **Обычная LLM** — получает визуальные токены вперемешку с текстовыми и генерирует ответ как обычно.

Обучают такую модель в два этапа. Сначала alignment-претрейн: на парах «картинка–подпись» учится *только проектор*, а энкодер и LLM заморожены — дёшево и быстро. Затем visual instruction tuning: SFT на диалогах с картинками («что на фото?», «прочитай таблицу»), где обычно размораживают и LLM. После этого модель не просто «подписывает» картинки, а умеет разговаривать о них.

## Сколько стоит картинка

Одна картинка — это сотни, а то и тысячи токенов: число зависит от разрешения и размера патча. Это прямо влияет на цену запроса в API и на то, сколько картинок влезет в контекст. Для изображений высокого разрешения используют tiling: картинка режется на несколько фрагментов стандартного размера (плюс уменьшенная «глобальная» копия), каждый кодируется отдельно — деталей видно больше, но и токенов кратно больше. Токенизация текста устроена иначе — про неё см. [BPE](https://ml-book.com/t/tokenization/).

## Типичные слабости VLM

Знать их полезно и для собеседования, и для продакшна: мелкий текст (буквы меньше патча «растворяются» при сжатии в вектор), точный счёт объектов, пространственные отношения («слева от», «за») и галлюцинации деталей — модель уверенно «додумывает» то, чего на картинке нет, опираясь на языковой приор.

> **⚠️ Подводный камень**
>
> Vision-энкодер сжимает каждый патч в один вектор: всё, что мельче патча, модель скорее «угадает по контексту», чем реально увидит. Спроси VLM, который час на смазанных наручных часах, — она назовёт время уверенно и, скорее всего, неверно. Не доверяй VLM точное чтение мелких цифр без tiling или OCR.

> **🎤 На собеседовании**
>
> - «Как картинка попадает в LLM?» — режется на патчи → каждый патч линейно проецируется в вектор (ViT) → проектор выравнивает векторы с пространством LLM → визуальные токены идут в последовательность вместе с текстовыми.
> - «Что даёт CLIP-претрейн?» — контрастивное обучение на парах картинка–текст кладёт изображения и подписи в общее пространство: энкодер «знает смысл» картинки, работает zero-shot классификация.
> - «Почему картинка дорогая по токенам?» — токенов N = (H/P)×(W/P): сотни на одну картинку, при tiling — тысячи; это и цена API, и съеденный контекст.
> - «Почему VLM не читает мелкий текст?» — детали меньше патча теряются при кодировании; лечится повышением разрешения/tiling или связкой с OCR.

## Связанные темы

- [Архитектура трансформера](https://ml-book.com/t/transformer/)
- [Эмбеддинги и word2vec](https://ml-book.com/t/embeddings/)
- [Свёрточные сети (CNN)](https://ml-book.com/t/cnn/)
- [Omni-модели: все модальности в одной](https://ml-book.com/t/omni-models/)

---

Интерактив, тест из 12 вопросов и карточки терминов — на странице темы: https://ml-book.com/t/multimodal-llm/
Весь учебник в markdown: https://ml-book.com/llms-full.txt · Оглавление для агентов: https://ml-book.com/llms.txt
