Диагностика Mock-интервью
Главная · Мультимодальные модели

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

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

Интуиция

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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