Matryoshka Representation Learning (MRL)
Узнай, как обучение представлениям «Матрешка» (MRL) позволяет создавать многогранные эмбеддинги. Открой для себя способы оптимизации поиска и развертывания на граничных устройствах с помощью Ultralytics YOLO26.
Matryoshka Representation Learning (MRL) — это метод обучения в искусственном интеллекте (AI) и машинном обучении (ML), который заставляет нейронную сеть изучать многоуровневые эмбеддинги в рамках одного выходного вектора. Вдохновленный русскими матрешками, MRL структурирует эмбеддинг так, чтобы важная семантическая информация находилась в самом начале. Это означает, что многомерный вектор (например, размерностью 1024) можно усечь до меньших вложенных подмножеств (вроде 512, 256 или 64 размерностей) без потери исходного представления. Такая гибкость радикально снижает вычислительные затраты, обычно связанные с задачами информационного поиска.
Как работает Matryoshka Representation Learning#
Традиционно модель эмбеддингов обучается для оптимизации определенной функции потерь под фиксированный размер выхода. Если системе требуется меньший вектор для экономии памяти, приходится обучать абсолютно новую модель. MRL решает эту проблему, применяя вложенную функцию потерь на этапе обучения. Он одновременно оптимизирует полное представление и его вложенные подмножества. Такие организации, как OpenAI, внедрили MRL для своих современных API эмбеддингов, позволяя разработчикам динамически отсекать размерности с конца вектора, сохраняя при этом точные оценки косинусного сходства.
Реальные приложения#
MRL предоставляет явные преимущества при балансировке точности, затрат на хранение и пропускной способности памяти.
- Адаптивный векторный поиск для LLM: В конвейерах генерации с дополненным извлечением (RAG) большие языковые модели (LLM) часто полагаются на огромные векторные базы данных. Используя MRL, предприятие может выполнить быстрый грубый семантический поиск, используя первые 64 размерности эмбеддингов, а затем выполнить переранжирование лучших результатов с помощью полных 1024-мерных векторов. Такой двух проходной подход значительно ускоряет векторный поиск и снижает затраты на хранение в базе данных.
- Масштабируемое компьютерное зрение на периферии: При развертывании систем компьютерного зрения с использованием Ultralytics Platform аппаратные ограничения могут сильно различаться. Модель, использующая 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]}")





