Matryoshka Representation Learning (MRL)
Tìm hiểu cách Matryoshka Representation Learning (MRL) cho phép các nhúng đa hạt (multi-granular embeddings). Khám phá cách tối ưu hóa việc tìm kiếm và triển khai trên edge của Ultralytics YOLO26.
Matryoshka Representation Learning (MRL) là một kỹ thuật huấn luyện trong artificial intelligence (AI) và machine learning (ML) buộc mạng neural học các embeddings đa độ chi tiết trong một vector đầu ra duy nhất. Lấy cảm hứng từ búp bê gỗ lồng nhau của Nga, MRL cấu trúc hóa embedding sao cho các thông tin ngữ nghĩa quan trọng được đặt lên hàng đầu. Điều này có nghĩa là một vector có chiều cao (ví dụ: 1024 chiều) có thể được cắt bớt thành các tập con nhỏ hơn, lồng nhau (như 512, 256 hoặc 64 chiều) mà không làm mất đi biểu diễn cơ bản của nó. Sự linh hoạt này giảm thiểu đáng kể chi phí tính toán thường đi kèm với các tác vụ information retrieval.
Cách thức hoạt động của Matryoshka Representation Learning#
Theo truyền thống, một model embedding được huấn luyện để tối ưu hóa một loss function cụ thể cho một kích thước đầu ra cố định. Nếu một hệ thống yêu cầu một vector nhỏ hơn để tiết kiệm bộ nhớ, một model hoàn toàn mới phải được huấn luyện. MRL giải quyết vấn đề này bằng cách áp dụng một loss function lồng nhau trong giai đoạn huấn luyện. Nó đồng thời tối ưu hóa biểu diễn đầy đủ và các tập con lồng nhau của nó. Các tổ chức như OpenAI have adopted MRL cho các API embedding hiện đại của họ, cho phép các lập trình viên cắt bỏ các chiều ở cuối vector một cách động trong khi vẫn duy trì các điểm số cosine similarity chính xác.
Các ứng dụng trong thực tế#
MRL mang lại những ưu điểm rõ rệt khi cân bằng giữa độ chính xác với chi phí lưu trữ và memory bandwidth.
- Tìm kiếm Vector thích ứng cho LLMs: Trong các pipeline retrieval-augmented generation (RAG), các large language models (LLMs) thường dựa vào các vector databases khổng lồ. Bằng cách sử dụng MRL, một doanh nghiệp có thể thực hiện tìm kiếm semantic search thô và nhanh chóng bằng cách sử dụng 64 chiều đầu tiên của embedding, sau đó sắp xếp lại các kết quả hàng đầu bằng cách sử dụng các vector 1024 chiều đầy đủ. Cách tiếp cận hai bước này đẩy nhanh đáng kể vector search và giảm chi phí lưu trữ cơ sở dữ liệu.
- Computer Vision có khả năng mở rộng ở biên (Edge): Khi triển khai các hệ thống computer vision sử dụng Ultralytics Platform, các giới hạn phần cứng có thể thay đổi rất lớn. Một model tận dụng MRL có thể truyền các visual embedding kích thước đầy đủ đến một server cloud deployment mạnh mẽ, nhưng vẫn có thể chuyển đổi linh hoạt sang việc truyền các embedding 128 chiều bị cắt bớt khi hoạt động trên các thiết bị edge computing công suất thấp, tối ưu hóa latency mà không cần huấn luyện lại model.
Phân biệt các khái niệm liên quan#
Để sử dụng MRL hiệu quả, việc phân biệt nó với các kỹ thuật cũ được sử dụng để nén dữ liệu là rất hữu ích.
- MRL so với Dimensionality Reduction: Các thuật toán như PCA (Principal Component Analysis) hoặc t-SNE được áp dụng sau khi huấn luyện để nén dữ liệu. Ngược lại, MRL được tích hợp sẵn trong kiến trúc mạng neural trong quá trình huấn luyện một cách tự nhiên, bảo tồn các mối quan hệ phi tuyến tính sâu hơn.
- MRL so với Model Pruning: Pruning loại bỏ trọng số và các lớp khỏi mạng neural thực tế để làm cho quá trình suy luận (inference) nhanh hơn, chẳng hạn như tạo ra một biến thể nhỏ hơn của model Ultralytics YOLO. MRL không làm thay đổi kích thước model; nó chỉ thay đổi kích thước của vector đầu ra do model tạo ra.
Triển khai thực tế#
Việc cắt bớt một MRL embedding cực kỳ đơn giản và không đòi hỏi logic semantic indexing phức tạp. Do các tính năng quan trọng nhất được trọng tâm hóa ở các chiều đầu tiên, bạn có thể chỉ cần cắt mảng. Ví dụ sau đây minh họa việc cắt bớt một đầu ra đa phương thức YOLO26 mô phỏng bằng cách sử dụng các PyTorch tensor operations cơ bản.
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]}")





