Matryoshka Representation Learning (MRL)
Узнай, как обучение представлений «матрёшка» (MRL) позволяет создавать эмбеддинги разной детализации. Разберись, как оптимизировать поиск и развертывание Ultralytics YOLO26 на периферийных устройствах.
Обучение представлений Матриошка (MRL) — это метод обучения в искусственном интеллекте (AI) и машинном обучении (ML), который заставляет нейросеть формировать многоуровневые эмбеддинги в одном выходном векторе. Вдохновлённый русскими матрёшками, MRL организует эмбеддинг так, чтобы наиболее важная семантическая информация находилась в начале. Это означает, что высокоразмерный вектор, например с 1024 измерениями, можно усечь до вложенных подмножеств меньшего размера — например, до 512, 256 или 64 измерений — без потери исходного представления. Такая гибкость существенно сокращает вычислительные затраты, обычно связанные с задачами поиска информации.
Как работает обучение представлений Матриошка#
Традиционно модель эмбеддингов обучают оптимизировать заданную функцию потерь для фиксированного размера выходного вектора. Если системе нужен вектор меньшего размера для экономии памяти, приходится обучать совершенно новую модель. MRL решает эту задачу, применяя вложенную функцию потерь на этапе обучения. Она совместно оптимизирует полное представление и его вложенные подмножества. Такие организации, как OpenAI, используют MRL в современных API эмбеддингов, позволяя разработчикам динамически удалять конечные измерения вектора и при этом сохранять точность оценок косинусного сходства.
Примеры применения в реальных условиях#
MRL даёт заметные преимущества при поиске баланса между точностью, затратами на хранение и пропускной способностью памяти.
- Адаптивный векторный поиск для LLM: В конвейерах генерации с дополнением извлечёнными данными (RAG) большие языковые модели (LLMs) часто используют обширные векторные базы данных. С помощью MRL компания может выполнять быстрый предварительный семантический поиск, используя первые 64 измерения эмбеддингов, а затем повторно ранжировать лучшие результаты по полным векторам из 1024 измерений. Такой двухэтапный подход значительно ускоряет векторный поиск и снижает расходы на хранение данных в базе.
- Масштабируемое компьютерное зрение на периферии: При развёртывании систем компьютерного зрения с помощью платформы Ultralytics аппаратные ограничения могут сильно различаться. Модель с MRL может передавать полноразмерные визуальные эмбеддинги на мощный сервер для облачного развёртывания, но при работе на маломощных устройствах периферийных вычислений без проблем переключаться на передачу усечённых эмбеддингов из 128 измерений. Так можно оптимизировать задержку, не переобучая модель.
Различия между смежными понятиями#
Чтобы правильно использовать MRL, полезно отличать этот метод от более ранних способов сжатия данных.
- MRL и снижение размерности: Такие алгоритмы, как PCA (метод главных компонент) или t-SNE, применяются после обучения для сжатия данных. MRL, напротив, изначально встраивается в архитектуру нейросети при обучении, сохраняя более глубокие нелинейные взаимосвязи.
- MRL и прунинг модели: Прунинг удаляет веса и слои из самой нейросети, чтобы ускорить инференс, например при создании уменьшенного варианта модели Ultralytics YOLO. MRL не меняет размер модели, а только размер выходного вектора, который она формирует.
Практическая реализация#
Усечь эмбеддинг MRL очень просто, для этого не нужна сложная логика семантической индексации. Поскольку наиболее важные признаки сосредоточены в первых измерениях, достаточно просто взять срез массива. В следующем примере показано усечение имитированного мультимодального выхода YOLO26 с помощью базовых операций с тензорами PyTorch.
import torch
# Simulate a full 1024-dimensional MRL embedding returned by a model
full_embedding = torch.rand(1, 1024)
# To deploy on memory-constrained hardware, simply slice the first 256 dimensions
# Because the model was trained with MRL, this subset remains highly accurate
truncated_embedding = full_embedding[:, :256]
print(f"Original size: {full_embedding.shape[1]}, Compressed size: {truncated_embedding.shape[1]}")








