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





