Vectors & Matrices in Photo Search
Vector trong tìm kiếm ảnh
Công ty nào đang ứng dụng Vector và ma trận?
Bạn mở Google Photos, gõ “hoàng hôn bãi biển” — hàng trăm tấm ảnh của bạn suốt 5 năm qua hiện ra trong một giây. Không phải bạn đã dán nhãn cho từng tấm. Máy tự nhận ra. Làm sao?
Câu trả lời ngắn: mỗi ảnh được biến thành một mũi tên (vector) trong không gian nhiều chiều. Hai ảnh giống nhau → hai mũi tên chỉ cùng hướng. Việc “so sánh hai bức ảnh” phức tạp được thu gọn thành: so sánh hai mũi tên có cùng hướng không. Mà cái đó thì bạn đã biết làm — nó chính là tích vô hướng và cosine similarity bạn vừa học ở bài trước.
Mỗi thẻ ảnh dưới đây có 3 thanh màu. Mỗi thanh là một con số giữa 0 và 1, mô tả một đặc điểm của ảnh: ấm/lạnh, rộng/hẹp, nhiều chi tiết/ít chi tiết. Trong thực tế, Google dùng 128 đến 2048 con số cho mỗi ảnh — nhưng nguyên tắc giống hệt.
Hai ảnh gần như giống hệt theo cả ba tín hiệu
Quan sát: hai ảnh ngoài trời (hoàng hôn và bãi biển) có cosine cao. Ảnh bếp và ảnh núi thì cosine thấp. Cả một bài toán “hai ảnh có giống nhau không?” thu gọn thành một con số duy nhất.
Vấn đề công ty cần giải quyết
Google Photos lưu trữ hơn 9 nghìn tỷ tấm ảnh, phục vụ 1,5 tỷ người dùng mỗi tháng, với 28 tỷ ảnh mới được tải lên mỗi tuần. Bạn có thể có 20.000 tấm trong thư viện cá nhân — chụp từ nhiều năm, nhiều góc, nhiều đèn, nhiều mùa.
Bài toán cốt lõi: khi bạn gõ từ khoá hoặc bấm vào khuôn mặt bà ngoại, máy phải trả về đúng những ảnh liên quan, trong mili-giây, và phải đúng dù bà đang đội nón lá, đeo kính, hay cười to. Không có thời gian cho máy “xem từng tấm và nghĩ”.
Mỗi ảnh 1 triệu pixel. So sánh 2 ảnh = 1 triệu phép trừ. Hai ảnh cùng chủ thể chụp khác góc → pixel khác hoàn toàn → sai. Hai ảnh khác nhau mà cùng màu → pixel giống → sai. Vô dụng.
Mỗi ảnh → một mũi tên 128 chiều (vector nhúng). Hai ảnh cùng chủ thể → mũi tên chỉ cùng hướng, bất kể góc chụp hay ánh sáng. So sánh = tính cosine. Mili-giây trên hàng tỷ ảnh. Hoạt động.
Bạn có 20.000 ảnh trong thư viện. Nếu so sánh pixel-từng-pixel cho mỗi truy vấn, việc tìm kiếm sẽ tốn bao lâu trên điện thoại?
Cách Vector và ma trận giải quyết vấn đề
Phát hiện đối tượng trong ảnh (face detection, object detection). Một mô hình nhỏ quét qua ảnh, khoanh hình chữ nhật quanh khuôn mặt, xe, cây, món ăn. Mục tiêu chỉ là: tách phần đáng quan tâm khỏi nền.
Mỗi khuôn mặt được đóng khung riêng trước khi đi tiếp.Biến ảnh thành vector (embedding). Mạng FaceNet của Google nhận vùng ảnh khuôn mặt và nhả ra một vector 128 chiều. Được huấn luyện trên 100-200 triệu ảnh, mạng học được quy tắc: cùng người → hai vector gần nhau, khác người → hai vector xa nhau, bất kể ánh sáng hay góc chụp.
Minh hoạ (bản rút gọn 3 chiều thay vì 128):
🌅Hoàng hôn biểnẤm/lạnh0.92Mở/đóng0.95Chi tiết0.30🏖️Bãi biển trưaẤm/lạnh0.65Mở/đóng0.90Chi tiết0.45🏔️Núi sương mùẤm/lạnh0.20Mở/đóng0.95Chi tiết0.25Hai ảnh đầu (hoàng hôn và bãi biển) có ba thanh gần giống nhau → vector gần nhau. Ảnh núi có thanh “ấm” rất thấp → vector xa.
Đo khoảng cách giữa các vector. Với hai vector đã tính, Google dùng cosine similarity hoặc khoảng cách Euclid. Cosine gần 1 → cùng người / cùng cảnh. Gần 0 → hai bức ảnh không liên quan.
Gom các ảnh gần nhau thành cụm(clustering). Tất cả ảnh của cùng một người được xếp chung nhóm → album “Bà Ngoại”. Với hàng tỷ ảnh, Google dùng kỹ thuật tìm láng giềng gần đúng (ANN) để trả kết quả trong mili-giây thay vì so sánh hết 20.000 vector cá nhân của bạn.
Minh hoạ: ở đây 6 ảnh được tự gom thành 3 cụm theo độ tương đồng (mỗi cụm có 2 ảnh gần nhau nhất theo cosine).
Cụm 'ngoài trời ấm'🌅🏖️Cụm 'trong nhà ấm'🍲☕Cụm 'ngoài trời mát'🌃🏔️Bạn đang có 20.000 ảnh trong thư viện. Google cần tìm tất cả ảnh của bà ngoại. Thuật toán nào giúp việc này chạy trong mili-giây?
Con số thật
- Độ chính xác 99,63% trên bộ chuẩn LFW (nhận diện khuôn mặt) — vượt mức 97,53% của con người [1]
- Mỗi khuôn mặt được biểu diễn bằng vector 128 chiều — thay vì so sánh hàng triệu pixel [1]
- Lưu trữ hơn 9 nghìn tỷ tấm ảnh, phục vụ 1,5 tỷ người dùng mỗi tháng [3]
- Tìm kiếm trả kết quả trên hàng tỷ vector chỉ trong mili-giây nhờ thuật toán láng giềng gần đúng (ANN) [4]
Nếu không có Vector và ma trận, app sẽ ra sao?
Không có vector embedding, Google Photos sẽ phải so sánh trực tiếp từng điểm ảnh của mỗi khuôn mặt với hàng tỷ khuôn mặt khác. Chỉ cần bạn đội mũ, đeo kính, hoặc chụp ở ánh sáng khác — kết quả sai hoàn toàn.
Biến mỗi khuôn mặt thành vector 128 chiều, Google chuyển một bài toán nhận diện ảnh siêu phức tạp thành phép đo khoảng cách đơn giản giữa hai mảng số. Đây là bí mật giúp mọi tính năng tìm kiếm thông minh của Photos hoạt động — và cũng là cốt lõi của Spotify gợi ý nhạc, TikTok gợi ý video, và hầu hết AI hiện đại.
- Mỗi ảnh được biến thành một vector 128 chiều — hai ảnh giống nhau có vector gần nhau.
- So sánh hai ảnh = so sánh hai vector = tính cosine similarity. Bài toán phức tạp thu gọn về một con số.
- Hàng tỷ ảnh × hàng tỷ người dùng hoạt động được trong mili-giây nhờ thuật toán tìm láng giềng gần đúng.
Kiểm tra hiểu biết
Google Photos biến mỗi khuôn mặt thành một vector 128 chiều. Vector 128 chiều là gì?