One-Shot Learning
Học một lần nhận diện một lớp mới từ một ví dụ được gán nhãn duy nhất, thường bằng cách so sánh embedding. Tìm hiểu mạng Siamese, ứng dụng và code.
Học một mẫu là tác vụ nhận diện một lớp mới từ một ví dụ được gán nhãn duy nhất. Một model phân loại ảnh thông thường cần hàng trăm ảnh được gán nhãn cho mỗi lớp và phải huấn luyện lại mỗi khi thêm lớp mới, trong khi con người thường có thể nhận ra khuôn mặt hoặc sản phẩm mới chỉ sau một lần nhìn thấy. Các hệ thống học một mẫu tiến gần hơn đến khả năng đó bằng cách tái sử dụng kiến thức từ nhiều lớp đã học trước: mạng được huấn luyện trên các lớp đó ánh xạ ảnh thành embedding, trong đó ảnh của cùng một đối tượng nằm gần nhau, vì vậy chỉ cần một ví dụ để xác định vị trí của lớp mới. Xác minh khuôn mặt, kiểm tra chữ ký và nhận diện sản phẩm đều hoạt động theo cách này; trong mô hình ngôn ngữ lớn (LLM), prompting một mẫu cung cấp cho model một ví dụ hoàn chỉnh duy nhất về tác vụ trong prompt.
Cách học một mẫu hoạt động#
Hầu hết hệ thống học một mẫu thay việc phân loại bằng việc so sánh. Một mạng nơ-ron thực hiện trích xuất đặc trưng trên ví dụ được lưu và từng truy vấn mới; khoảng cách giữa hai embedding, chẳng hạn khoảng cách Euclid hoặc độ tương đồng cosine, quyết định chúng có khớp hay không. Mạng nơ-ron Siamese mô hình hóa cách tiếp cận này bằng hai nhánh dùng chung các trọng số. Jane Bromley, Yann LeCun và các cộng sự đã sử dụng mạng này để xác minh chữ ký năm 1993; năm 2015, Gregory Koch và các cộng sự huấn luyện một mạng để phân loại ký tự viết tay từ bảng chữ cái mới sau khi chỉ xem một ví dụ của mỗi ký tự:
Mạng embedding được huấn luyện trước trên nhiều lớp khác bằng hàm mất mát tương phản hoặc triplet, kéo các ảnh cùng lớp lại gần nhau và đẩy ảnh khác lớp ra xa, nhờ đó khoảng cách đã học có thể khái quát hóa cho các lớp chỉ xuất hiện sau này. Các phương pháp meta-learning như Matching Networks huấn luyện trên hàng nghìn tác vụ học một mẫu mô phỏng, mỗi tác vụ có một ví dụ cho một số lớp, để model thực hành chính xác bài toán mà model sẽ gặp.
Phân loại một mẫu bằng embedding#
Model phân loại Ultralytics YOLO26 trả về embedding ảnh thông qua embed(), thao tác này gộp đầu ra của layer trước classification head thành một vector cho mỗi ảnh. Ví dụ này xây dựng bộ phân loại one-shot 10 lớp cho CIFAR-10 từ các embedding đó: mỗi lớp chỉ có một ảnh được lưu làm dữ liệu gán nhãn, và mỗi truy vấn nhận nhãn của ảnh đã lưu có độ tương đồng cao nhất:
from pathlib import Path
import torch
import torch.nn.functional as F
from torchvision.datasets.utils import download_and_extract_archive
from ultralytics import YOLO
# CIFAR-10 test images, one folder per class
download_and_extract_archive("https://github.com/ultralytics/assets/releases/download/v0.0.0/cifar10.zip", "data")
images = [sorted(folder.glob("*.png")) for folder in sorted(Path("data/cifar10/test").iterdir()) if folder.is_dir()]
model = YOLO("yolo26n-cls.pt")
# Support set: the first image of each class is its only labeled example (one shot)
shots = torch.stack([model.embed(paths[0], verbose=False)[0] for paths in images])
# Query set: the next 50 images of each class, each labeled with the class of its most similar shot
correct = 0
for label, paths in enumerate(images):
for path in paths[1:51]:
query = model.embed(path, verbose=False)[0]
correct += F.cosine_similarity(shots, query.unsqueeze(0)).argmax().item() == label
print(f"10-way 1-shot accuracy: {correct / 500:.1%} (random guessing: 10%)")Model không bao giờ được huấn luyện trên CIFAR-10, vì vậy độ chính xác được in ra đo lường mức độ mà một ví dụ cho mỗi lớp xác định được lớp đó trong không gian embedding của YOLO26; để thêm lớp thứ mười một, chỉ cần lưu thêm một embedding.
Ứng dụng#
- Xác minh khuôn mặt: Cổng kiểm soát biên giới tự động so sánh ảnh camera trực tiếp với ảnh duy nhất lưu trên chip hộ chiếu; điện thoại và hệ thống kiểm soát truy cập đối chiếu mỗi lần thử với khuôn mặt được ghi nhận khi đăng ký.
- Nhận diện sản phẩm bán lẻ: Cửa hàng liên tục bổ sung sản phẩm mới; chỉ cần một ảnh danh mục cho mỗi mặt hàng là hệ thống có thể nhận diện sản phẩm trên kệ mà không cần huấn luyện lại.
- Học bắt chước một mẫu: Huấn luyện robot thực hiện một biến thể mới của tác vụ, chẳng hạn xếp các khối theo thứ tự mới, sau khi xem một lần trình diễn.
Thách thức#
Một ví dụ duy nhất không thể thể hiện mức độ biến thiên của một lớp, vì vậy ảnh tham chiếu chụp trong điều kiện thiếu sáng, ở góc bất thường hoặc khi vật thể bị che khuất một phần sẽ là điểm neo kém cho mọi lần so sánh sau. Ngưỡng khớp quyết định sự cân bằng giữa chấp nhận nhầm và từ chối nhầm, đồng thời cần được tinh chỉnh trên các cặp validation cho từng ứng dụng; embedding được huấn luyện trên một miền, chẳng hạn ảnh đời thường, sẽ phân tách các lớp kém hơn ở miền khác, chẳng hạn ảnh y tế.
Học một mẫu và các thuật ngữ liên quan#
- Học ít mẫu: Bài toán tổng quát về học từ một vài ví dụ được gán nhãn cho mỗi lớp. Học một mẫu là trường hợp có chính xác một ví dụ, được viết là 1-shot trong ký hiệu N-way K-shot.
- Học không mẫu: Nhận diện các lớp hoàn toàn không có ví dụ, dựa trên mô tả bằng văn bản hoặc thuộc tính.
- Học chuyển giao: Tái sử dụng model được huấn luyện trước cho tác vụ mới, thường bằng cách fine-tune trên nhiều ví dụ được gán nhãn. Các hệ thống học một mẫu cũng dựa vào đặc trưng được chuyển giao, nhưng so sánh trực tiếp các đặc trưng đó mà không cập nhật trọng số.
- Phát hiện bất thường: Học hình thái bình thường và gắn cờ mọi thứ khác xa hình thái đó, qua đó trả lời một vật thể có bất thường hay không thay vì thuộc lớp nào.










