Bỏ qua

Các kiến trúc đa phương thức thống nhất

Các kiến trúc đa phương thức thống nhất thay thế những mô hình chuyên biệt riêng lẻ bằng một hệ thống duy nhất có khả năng đọc, suy luận và sinh ra nội dung trên văn bản, ảnh, âm thanh và video. File này đề cập đến các mô hình any-to-any (CoDi, NExT-GPT), các LLM đa phương thức nguyên bản (Gemini, GPT-4o), các chiến lược token hoá đa phương thức, và những đánh đổi kiến trúc khi thống nhất hóa.

Lý do cần thống nhất hóa

  • Hãy tưởng tượng một người phiên dịch nói được năm thứ tiếng và có thể chuyển đổi giữa chúng ngay giữa câu mà không cần ngừng lại. Các hệ thống đa phương thức thời kỳ đầu giống như năm người phiên dịch riêng biệt ngồi ở những căn phòng khác nhau, mỗi người phụ trách một ngôn ngữ và chỉ chuyền giấy qua một khe hở trên tường. Một kiến trúc đa phương thức thống nhất chính là người đa ngôn ngữ duy nhất đó: một mô hình với trọng số dùng chung, có thể đọc, viết và suy luận trên văn bản, ảnh, âm thanh, video, thậm chí cả hành động, tất cả trong một lượt truyền xuôi (forward pass) duy nhất.

  • Động lực đến từ cả hai phía thực tiễn lẫn lý thuyết. Về phía thực tiễn, việc duy trì các mô hình chuyên biệt riêng biệt cho mọi cặp phương thức (văn bản-sang-ảnh, ảnh-sang-văn bản, âm thanh-sang-văn bản, v.v.) dẫn đến một sự bùng nổ tổ hợp: \(k\) phương thức đòi hỏi tới \(k(k-1)\) đường ống có hướng. Một mô hình thống nhất gom tất cả những thứ đó vào một hệ thống duy nhất. Về phía lý thuyết, nhận thức của con người không xử lý thị giác và ngôn ngữ trong những mô-đun tách biệt; sự gắn kết xuyên phương thức diễn ra sớm và sâu, và thống nhất hóa là nỗ lực phản chiếu điều đó.

  • Trọng số dùng chung khuyến khích truyền tri thức qua lại giữa các phương thức (transfer across modalities). Một transformer đã học được các khuôn mẫu thời gian trong văn bản (chủ ngữ đứng trước vị ngữ, nguyên nhân đứng trước kết quả) có thể tái sử dụng chính những mạch chú ý (attention) đó cho các khuôn mẫu thời gian trong video (vật thể xuất hiện trước khi nó di chuyển) hay âm thanh (điểm khởi phát trước phần âm vang). Đây là phiên bản đa phương thức của học chuyển giao (transfer learning) mà bạn đã gặp ở Chương 7 với tinh chỉnh mô hình ngôn ngữ và ở Chương 8 với huấn luyện trước trên ImageNet.

  • Một cách hình thức, gọi \(\mathcal{M} = \{m_1, m_2, \ldots, m_k\}\) là một tập hợp các phương thức. Một mô hình thống nhất định nghĩa một hàm có tham số duy nhất \(f_\theta\) ánh xạ bất kỳ tập con nào của các phương thức đầu vào sang bất kỳ tập con nào của các phương thức đầu ra:

\[f_\theta : \mathcal{P}(\mathcal{M}) \rightarrow \mathcal{P}(\mathcal{M})\]
  • trong đó \(\mathcal{P}(\mathcal{M})\) là tập hợp công suất (tất cả các tập con) của các phương thức. Ràng buộc then chốt là \(\theta\) phần lớn được dùng chung; chỉ có những lớp adapter mỏng, đặc thù cho từng phương thức là khác biệt.

Sơ đồ tổng quan mức cao thể hiện nhiều phương thức (văn bản, ảnh, âm thanh, video) được đưa vào một backbone transformer dùng chung và sinh ra đầu ra ở bất kỳ phương thức nào

  • Lời hứa của thống nhất hóa đi kèm với một căng thẳng nền tảng: các phương thức khác biệt về cấu trúc. Văn bản là một chuỗi 1D gồm các token rời rạc. Ảnh là lưới 2D gồm các giá trị pixel liên tục. Âm thanh là một dạng sóng 1D liên tục với thang thời gian rất khác so với văn bản. Video thêm một trục thời gian vào ảnh. Hòa giải những cấu trúc không đồng nhất này thành một chuỗi duy nhất mà transformer có thể tiêu hóa chính là thách thức kỹ thuật cốt lõi của lĩnh vực này.

Các mô hình Any-to-Any

  • Hãy nghĩ về một chiếc điều khiển từ xa đa năng có thể điều khiển tivi, máy điều hòa và hệ thống âm thanh của bạn, tất cả thông qua cùng một giao diện. Các mô hình any-to-any chính là phiên bản AI tương đương: chúng chấp nhận bất kỳ tổ hợp phương thức nào làm đầu vào và sinh ra bất kỳ tổ hợp nào làm đầu ra.

  • CoDi (Composable Diffusion) đạt được việc sinh any-to-any bằng cách huấn luyện các mô hình khuếch tán (diffusion) đặc thù cho từng phương thức, sau đó căn chỉnh không gian tiềm ẩn (latent space) của chúng thông qua một cơ chế điều kiện dùng chung. Mỗi phương thức có một quá trình khuếch tán riêng (nhắc lại các mô hình khuếch tán từ file 04 của chương này), nhưng các mạng dự đoán nhiễu được điều kiện hóa trên một lớp cross-attention chung thấy đồng thời các embedding từ tất cả phương thức đầu vào. Điều này cho phép CoDi sinh ra, chẳng hạn, một bức ảnh và âm thanh tương ứng từ một câu lệnh văn bản chỉ trong một lượt duy nhất.

  • NExT-GPT chọn một cách tiếp cận kiến trúc khác. Nó kết nối một backbone LLM (bộ não) với các bộ mã hóa (encoder) đặc thù cho từng phương thức ở phía đầu vào và các bộ giải mã (decoder) đặc thù cho từng phương thức ở phía đầu ra thông qua các lớp chiếu (projection layers) nhẹ. Các encoder đầu vào (ví dụ, một encoder ảnh từ CLIP, một encoder âm thanh từ CLAP) dịch mỗi phương thức vào không gian embedding của LLM. LLM thực hiện suy luận trên chuỗi token kết hợp và phát ra các "token tín hiệu phương thức" đặc biệt để định tuyến thông tin đến decoder thích hợp (ví dụ, Stable Diffusion cho ảnh, AudioLDM cho âm thanh). Chỉ có các lớp chiếu là được huấn luyện; LLM và các encoder/decoder chuyên biệt được giữ nguyên (frozen).

  • Gemini (Google DeepMind) là đa phương thức nguyên bản ngay từ khâu huấn luyện trước. Khác với cách tiếp cận cắm-và-chạy (plug-and-play) của NExT-GPT, transformer của Gemini được huấn luyện từ đầu trên các chuỗi đan xen (interleaved) gồm token văn bản, ảnh, âm thanh và video. Điều này có nghĩa là các khuôn mẫu chú ý xuyên phương thức hình thành một cách tự nhiên trong quá trình huấn luyện trước thay vì bị gắn thêm vào sau này. Mô hình sử dụng bộ token hoá SentencePiece cho văn bản và học một bộ token hoá thị giác tương tự các phương pháp VQ đã thảo luận ở file 03 của chương này.

  • GPT-4o ("o" viết tắt cho "omni" - toàn năng) đại diện cho một khuôn mẫu khác nữa: một mô hình đầu-cuối (end-to-end) nơi tất cả phương thức dùng chung cùng một transformer và cùng một mục tiêu dự đoán token tiếp theo. Đầu vào âm thanh được xử lý thành các token phổ (spectral tokens), ảnh thành các token patch, và văn bản thành các token cận từ (subword tokens), tất cả được đưa vào một chuỗi duy nhất. Mô hình sinh ra các token đầu ra được giải mã bởi các đầu ra đặc thù cho từng phương thức. Đổi mới then chốt là độ trễ thấp nhờ loại bỏ chuỗi xếp tầng các mô hình ASR, LLM và TTS riêng biệt mà các hệ thống trước đó như GPT-4V dựa vào.

So sánh các khuôn mẫu kiến trúc cho CoDi (khuếch tán được căn chỉnh), NExT-GPT (hub LLM với các chuyên gia bị đóng băng) và kiểu Gemini (huấn luyện trước đan xen nguyên bản)

  • Những mô hình này nằm trên một phổ về độ sâu tích hợp:

    • Tích hợp nông (NExT-GPT): các chuyên gia bị đóng băng được nối bằng các adapter được huấn luyện. Xây dựng nhanh, nhưng suy luận xuyên phương thức bị hạn chế.
    • Tích hợp trung bình (CoDi): điều kiện hóa dùng chung trên các bộ sinh đặc thù cho từng phương thức. Căn chỉnh tốt hơn, vẫn giữ tính mô-đun.
    • Tích hợp sâu (Gemini, GPT-4o): một mô hình duy nhất được huấn luyện đầu-cuối trên tất cả phương thức. Suy luận xuyên phương thức phong phú nhất, nhưng tốn kém nhất để huấn luyện.

Các bộ mã hóa/giải mã đặc thù phương thức với một Backbone dùng chung

  • Hãy hình dung một nhà máy có một dây chuyền lắp ráp duy nhất (backbone dùng chung) nhưng có những bến bãi nạp liệu khác nhau cho nguyên liệu thô (encoder) và những bộ phận xuất hàng khác nhau cho hàng hóa hoàn thiện (decoder). Mỗi bến bãi chuyên biệt cho loại hàng mà nó chở, nhưng một khi đã vào trong nhà máy, mọi thứ di chuyển trên cùng một băng chuyền.

  • Khuôn mẫu kiến trúc chủ đạo cho các mô hình thống nhất sử dụng cấu trúc ba phần này:

    • Các bộ mã hóa phương thức \(E_m\) chuyển đổi đầu vào thô từ phương thức \(m\) thành một chuỗi các vector embedding \(\mathbf{h}_1^m, \mathbf{h}_2^m, \ldots, \mathbf{h}_{n_m}^m\), mỗi vector có số chiều \(d\).
    • Một backbone transformer dùng chung \(T_\theta\) xử lý các embedding được nối (concatenated) hoặc đan xen từ tất cả phương thức đầu vào bằng self-attention.
    • Các bộ giải mã phương thức \(D_m\) chuyển đổi các embedding đầu ra của backbone trở lại định dạng nguyên bản của phương thức \(m\) (token văn bản, pixel ảnh, dạng sóng âm thanh).
  • Với văn bản, encoder thường là một bảng tra cứu embedding \(E_\text{text}(w) = \mathbf{W}_e[w]\) với \(w\) là chỉ số token, giống hệt như bạn đã thấy ở Chương 7 với các transformer. Với ảnh, encoder thường là một Vision Transformer (ViT) chia ảnh thành các patch rồi chiếu tuyến tính từng patch, như đã đề cập ở Chương 8. Với âm thanh, encoder tính toán một mel spectrogram rồi xử lý nó bằng một frontend tích chập hoặc một Audio Spectrogram Transformer (AST), như đã thảo luận ở Chương 9.

  • Backbone dùng chung là một transformer tiêu chuẩn với self-attention trên tất cả các token phương thức. Với một chuỗi đầu vào được nối \(\mathbf{H} = [\mathbf{h}_1^{m_1}, \ldots, \mathbf{h}_{n_1}^{m_1}, \mathbf{h}_1^{m_2}, \ldots, \mathbf{h}_{n_2}^{m_2}]\), self-attention cho phép mọi token chú ý đến mọi token khác bất kể phương thức:

\[\text{Attention}(\mathbf{Q}, \mathbf{K}, \mathbf{V}) = \text{softmax}\left(\frac{\mathbf{Q}\mathbf{K}^\top}{\sqrt{d_k}}\right)\mathbf{V}\]
  • Đây là cùng công thức chú ý từ Chương 7, nhưng giờ đây \(\mathbf{Q}\), \(\mathbf{K}\)\(\mathbf{V}\) chứa các token từ nhiều phương thức. Một token patch ảnh có thể chú ý đến một token văn bản, cho phép suy luận xuyên phương thức mà không cần bất kỳ mô-đun cross-attention riêng biệt nào.

  • Các embedding phương thức (modality embeddings) được cộng thêm vào mỗi token để backbone biết token đó đến từ phương thức nào. Điều này tương tự như embedding vị trí (positional embeddings) nhưng mã hóa danh tính phương thức thay vì vị trí trong chuỗi. Một vector có thể học được \(\mathbf{e}_m \in \mathbb{R}^d\) được cộng vào mọi token từ phương thức \(m\):

\[\tilde{\mathbf{h}}_i^m = \mathbf{h}_i^m + \mathbf{e}_m + \mathbf{p}_i\]
  • trong đó \(\mathbf{p}_i\) là embedding vị trí cho vị trí \(i\).

Kiến trúc encoder-backbone-decoder thể hiện các patch ảnh, token văn bản và khung âm thanh cùng đi vào một transformer dùng chung, với các decoder đặc thù cho từng phương thức ở phía đầu ra

Token hóa đa phương thức

  • Hãy tưởng tượng bạn đang viết một bức thư bao gồm cả văn bản tiếng Anh và những bản phác họa bằng tay. Bạn có thể viết một câu, vẽ một sơ đồ, viết thêm một câu nói về sơ đồ đó, rồi dán một bản nhạc vào. Bức thư là một luồng tuyến tính duy nhất đan xen những "phương thức" khác nhau. Token hóa đa phương thức làm chính xác điều đó: nó chuyển đổi văn bản, ảnh, âm thanh và video thành một chuỗi phẳng (flat) duy nhất gồm các token mà transformer xử lý từ trái sang phải.

  • Với văn bản, token hóa đã được thiết lập vững chắc: byte-pair encoding (BPE) hoặc SentencePiece sinh ra một từ vựng gồm các token cận từ, như đã đề cập ở Chương 7. Thách thức là mở rộng ý tưởng này sang các phương thức liên tục.

  • Với ảnh, có hai hướng tiếp cận rộng. Cách rời rạc (discrete) dùng một VQ-VAE hoặc VQ-GAN (chi tiết ở file 03 của chương này) để ánh xạ mỗi ảnh sang một chuỗi các chỉ số sổ codebook. Nếu codebook có \(|\mathcal{C}|\) mục và một ảnh được mã hóa thành \(n\) code, ảnh trở thành \(n\) token rời rạc được rút từ một từ vựng có kích thước \(|\mathcal{C}|\), tương thích trực tiếp với từ vựng văn bản. Cách liên tục dùng một encoder ViT hoặc CNN để sinh ra \(n\) vector embedding liên tục, được chiếu tuyến tính vào số chiều embedding của transformer. Gemini và GPT-4o dùng các biến thể của cách liên tục; các bộ sinh ảnh tự hồi quy (autoregressive) như Parti và LlamaGen lại chọn hướng rời rạc.

  • Với âm thanh, tín hiệu thường được chuyển đổi thành một mel spectrogram rồi hoặc được rời rạc hóa bằng một codec âm thanh nơ-ron (ví dụ EnCodec, SoundStream, sinh ra các token rời rạc phân cấp) hoặc được chiếu liên tục qua một encoder có học. AudioLM, chẳng hạn, biểu diễn âm thanh như một chuỗi các token rời rạc từ nhiều mức codebook, sau đó mô hình hóa chúng theo kiểu tự hồi quy.

  • Với video, token hóa xây dựng trên token hóa ảnh nhưng cũng phải nén chiều thời gian. Một chiến lược phổ biến dùng một 3D VQ-VAE (như trong VideoGPT hoặc Cosmos Tokeniser từ file 03) lượng tử hóa các patch không-thời-gian (spatiotemporal) thành các token rời rạc. Hệ số nén thời gian là then chốt: video thô ở 24 fps sinh ra quá nhiều token mỗi giây nếu không giảm mẫu thời gian (temporal downsampling) triệt để.

  • Một khi tất cả phương thức đã được token hóa, chúng được đan xen (interleaved) thành một chuỗi duy nhất với các token phân cách đặc biệt đánh dấu ranh giới phương thức. Một định dạng điển hình trông như sau:

[TEXT] The cat sits on a mat [/TEXT] [IMAGE] <img_tok_1> <img_tok_2> ... <img_tok_n> [/IMAGE] [AUDIO] <aud_tok_1> ... <aud_tok_m> [/AUDIO]
  • Transformer sau đó xử lý toàn bộ chuỗi hỗn hợp này bằng cơ chế chú ý nhân quả (causal) hoặc hai chiều (bidirectional) tiêu chuẩn của nó. Các token phân cách phương thức thực hiện hai nhiệm vụ: chúng thông báo cho mô hình về ranh giới phương thức và đóng vai trò là "điểm gộp" (pooling points) mà ở đó các biểu diễn tóm tắt từng đoạn phương thức.

Chuỗi token đan xen thể hiện các token văn bản, token ảnh rời rạc và token codec âm thanh chảy qua một transformer duy nhất với các dấu hiệu ranh giới phương thức

  • Một lựa chọn thiết kế then chốt là ngân sách token (token budget). Một bức ảnh được token hóa thành 256 token và một caption văn bản 50 token nghĩa là ảnh chiếm 5 lần nhiều hơn của cửa sổ ngữ cảnh (context window). Các mô hình phải cân bằng độ phân giải (nhiều token = nhiều chi tiết hơn) với độ dài ngữ cảnh (nhiều token = chi phí bộ nhớ và tính toán cao hơn). Các kỹ thuật như gộp token (token merging - dần dần kết hợp các token tương tự) và token hóa thích ứng (adaptive tokenisation - dùng ít token hơn cho vùng đơn giản và nhiều hơn cho vùng phức tạp) giúp quản lý sự đánh đổi này.

Quy trình huấn luyện: Huấn luyện trước theo giai đoạn và Tinh chỉnh chung

  • Bạn sẽ không dạy giải tích cho một đứa trẻ trước khi nó biết số học. Tương tự, bạn không thể huấn luyện một mô hình đa phương thức thống nhất trên tất cả phương thức cùng lúc từ khởi tạo ngẫu nhiên và kỳ vọng nó hội tụ tốt. Cách tiếp cận chủ đạo là huấn luyện theo giai đoạn (staged training), trong đó mô hình học dần dần các khả năng xuyên phương thức phức tạp hơn theo thứ tự được sắp xếp cẩn thận.

  • Giai đoạn 1: Huấn luyện trước đơn phương thức. Mỗi bộ mã hóa phương thức được huấn luyện độc lập trên các tập dữ liệu đơn phương thức lớn. Backbone văn bản được huấn luyện trước với một mục tiêu mô hình hóa ngôn ngữ tiêu chuẩn (dự đoán token tiếp theo) trên hàng nghìn tỷ token văn bản, y hệt như ở Chương 7. Bộ mã hóa thị giác được huấn luyện trước trên phân loại ảnh hoặc các mục tiêu tự giám sát (MAE, DINO) như ở Chương 8. Bộ mã hóa âm thanh được huấn luyện trước trên dữ liệu nhận dạng tiếng nói hoặc phân loại âm thanh như ở Chương 9. Giai đoạn này tạo ra các bộ trích xuất đặc trưng đơn phương thức mạnh.

  • Giai đoạn 2: Căn chỉnh xuyên phương thức. Các encoder đã huấn luyện trước được nối với backbone dùng chung, và mô hình được huấn luyện trên dữ liệu đa phương thức có ghép cặp (các cặp ảnh-caption, cặp âm thanh-bản ghi chép) với một mục tiêu đối Contrastive hoặc sinh (generative). Trong giai đoạn này, trọng số encoder có thể bị đóng băng (để giữ lại tri thức đơn phương thức) trong khi chỉ có các lớp chiếu và backbone được cập nhật. Đây là giai đoạn mà sự căn chỉnh kiểu CLIP (từ file 01 của chương này) được gập vào mô hình thống nhất.

  • Giai đoạn 3: Huấn luyện trước đa phương thức chung. Tất cả tham số (hoặc hầu hết) được mở khóa (unfrozen), và mô hình được huấn luyện trên một hỗn hợp dữ liệu đơn và đa phương thức với một mục tiêu dự đoán token tiếp theo duy nhất trên tất cả token phương thức. Hàm mất mát là:

\[\mathcal{L} = -\sum_{t=1}^{T} \log p_\theta(x_t \mid x_{<t})\]
  • trong đó \(x_t\) có thể là một token văn bản, một token ảnh, hoặc một token âm thanh. Mô hình phải học dự đoán token tiếp theo bất kể phương thức, điều này buộc nó phát triển sự hiểu biết xuyên phương thức thực sự.

  • Giai đoạn 4: Tinh chỉnh theo chỉ dẫn và căn chỉnh. Mô hình đã huấn luyện trước được tinh chỉnh trên các tập dữ liệu tuân theo chỉ dẫn được tuyển chọn, bao gồm các chỉ dẫn đa phương thức (ví dụ, "Mô tả bức ảnh này chi tiết", "Video này phát ra âm thanh gì?", "Sinh một bức ảnh về X"). Giai đoạn này thường dùng học tăng cường từ phản hồi con người (RLHF) hoặc tối ưu hóa sở thích trực tiếp (DPO) để căn chỉnh đầu ra của mô hình với sở thích con người.

  • Khởi động (warm-up) đặc thù phương thức là một kỹ thuật dùng trong các giai đoạn để ngăn sụp đổ phương thức (modality collapse). Nếu một phương thức (thường là văn bản, có nhiều dữ liệu huấn luyện nhất) chiếm ưu thế tín hiệu gradient, mô hình có thể "quên" các phương thức yếu hơn. Các chiến lược warm-up bao gồm:

    • Cân bằng gradient: tỷ lệ (scaling) gradient từ mỗi phương thức để chúng đóng góp đều nhau vào phép cập nhật tham số.
    • Lên lịch tỷ lệ dữ liệu: tăng dần tỷ lệ dữ liệu đa phương thức so với dữ liệu đơn phương thức.
    • Trọng số mất mát: gán các trọng số đặc thù phương thức \(\lambda_m\) sao cho tổng mất mát là \(\mathcal{L} = \sum_m \lambda_m \mathcal{L}_m\), với \(\lambda_m\) được tinh chỉnh để cân bằng tốc độ học qua các phương thức.

Sơ đồ quy trình huấn luyện bốn giai đoạn thể hiện huấn luyện trước đơn phương thức, căn chỉnh xuyên phương thức, huấn luyện trước đa phương thức chung và tinh chỉnh theo chỉ dẫn, với các mũi tên chỉ ra tham số nào bị đóng băng hay có thể huấn luyện ở mỗi giai đoạn

  • Tại sao không bỏ qua các giai đoạn? Việc huấn luyện mọi thứ chung từ đầu rất hấp dẫn nhưng lại thất bại trong thực tế vì một số lý do. Thứ nhất, mô hình phải đồng thời học các đặc trưng cấp thấp (phát hiện cạnh, nhận dạng âm vị) và suy luận xuyên phương thức cấp cao, vốn có động lực học rất khác nhau. Thứ hai, phân bố dữ liệu giữa các phương thức mất cân bằng nghiêm trọng (hàng nghìn tỷ token văn bản so với hàng tỷ token ảnh so với hàng trăm triệu đoạn âm thanh). Thứ ba, bề mặt tối ưu hóa phi lồi mạnh, và huấn luyện theo giai đoạn cung cấp một giáo trình (curriculum) dẫn mô hình tới một lưu vực (basin) tốt hơn, tương tự ý tưởng học theo giáo trình từ Chương 6.

Suy luận chuỗi suy nghĩ (Chain-of-Thought) đa phương thức

  • Khi giải một bài toán hình học, bạn có thể vẽ một sơ đồ, ghi nhãn các góc, viết ra một phương trình, rồi giải nó từng bước. Bạn không nhảy thẳng từ đề bài sang đáp án. Suy luận chuỗi suy nghĩ đa phương thức (multimodal chain-of-thought - CoT) giúp các mô hình làm điều tương tự: sinh ra các bước suy luận trung gian có thể liên quan đến văn bản, chú thích thị giác, hoặc thậm chí các sơ đồ được sinh ra trước khi đi đến đáp án cuối cùng.

  • Trong CoT chỉ-văn bản (như đã khám phá ở phần thảo luận về các chiến lược prompting của Chương 7), mô hình sinh ra một chuỗi các bước suy luận bằng ngôn ngữ tự nhiên. Multimodal CoT mở rộng điều này bằng cách cho phép các bước trung gian tham chiếu hoặc sinh ra nội dung thị giác. Ví dụ, với một ảnh biểu đồ và câu hỏi "Năm nào có doanh số cao nhất?", một mô hình multimodal CoT có thể trước tiên mô tả biểu đồ ("Biểu đồ cho thấy doanh số từ 2018 đến 2023..."), sau đó xác định các đặc trưng thị giác liên quan ("Cột cao nhất xuất hiện ở 2021..."), và cuối cùng đưa ra đáp án ("2021").

  • Một cách hình thức, gọi \(\mathbf{x}\) là một đầu vào đa phương thức và \(y\) là đáp án mục tiêu. Các mô hình dự đoán chuẩn \(p(y \mid \mathbf{x})\) trực tiếp. Chuỗi suy nghĩ giới thiệu phần suy luận trung gian \(\mathbf{r} = (r_1, r_2, \ldots, r_L)\) và phân rã dự đoán thành:

\[p(y \mid \mathbf{x}) = \sum_{\mathbf{r}} p(y \mid \mathbf{r}, \mathbf{x}) \cdot p(\mathbf{r} \mid \mathbf{x})\]
  • Trong thực tế, tổng được xấp xỉ bằng giải mã tham lam (greedy) hoặc tìm kiếm chùm (beam-search) trên các chuỗi suy luận. Các bước suy luận \(r_i\) có thể là token văn bản, tham chiếu đến các vùng ảnh, hoặc thậm chí các token thị giác được sinh ra (ví dụ, một chú thích hộp giới hạn (bounding box) phủ lên ảnh đầu vào).

  • Huấn luyện multimodal CoT thường liên quan đến việc tuyển chọn các tập dữ liệu mà ở đó người gán nhãn cung cấp các dấu vết suy luận đa phương thức từng bước, sau đó tinh chỉnh mô hình trên các dấu vết này. Một số cách tiếp cận chắt lọc (distill) năng lực CoT từ các mô hình giáo viên lớn hơn: giáo viên sinh ra các dấu vết suy luận cho một tập dữ liệu lớn, và mô hình học sinh nhỏ hơn được huấn luyện trên cả đầu vào và các dấu vết của giáo viên.

  • Multimodal CoT đặc biệt mạnh mẽ cho các tác vụ đòi hỏi suy luận không gian (ví dụ, "Quả bóng đỏ có nằm bên trái khối lập phương xanh không?"), suy luận toán học trên sơ đồ (ví dụ, các bài toán hình học), và trả lời câu hỏi thị giác nhiều bước (multi-step VQA) khi đáp án phụ thuộc vào việc kết hợp thông tin từ nhiều vùng của một bức ảnh.

Các tác tử đa phương thức (Multimodal Agents)

  • Hãy nghĩ về một đầu bếp robot trong một căn bếp. Nó nhìn các nguyên liệu trên quầy (thị giác), đọc công thức trên máy tính bảng (văn bản), lắng nghe tiếng hẹn giờ kêu bíp (âm thanh), rồi vật lý nhặt một con dao và thái một củ hành (hành động). Một tác tử đa phương thức (multimodal agent) là phiên bản kỹ thuật số của điều này: một mô hình nhận thức thế giới qua nhiều phương thức, suy luận về việc phải làm gì, và thực hiện các hành động bám sát vào nhận thức của nó.

  • Vòng lặp của tác tử tuân theo chu trình cổ điển quan sát-suy luận-hành động (observe-reason-act):

    1. Quan sát (Observe): Tác tử nhận đầu vào đa phương thức từ môi trường (một ảnh chụp màn hình, chỉ dẫn nói của người dùng, một luồng video).
    2. Suy luận (Reason): Mô hình thống nhất xử lý đầu vào đa phương thức, có thể dùng chuỗi suy nghĩ để lập kế hoạch một chuỗi các bước.
    3. Hành động (Act): Mô hình xuất ra một hành động (một câu trả lời văn bản, một lời gọi công cụ, một cú click chuột tại tọa độ \((x, y)\), một lệnh động cơ robot).
  • Sử dụng công cụ (tool use) là một năng lực then chốt của các tác tử đa phương thức. Mô hình được huấn luyện để nhận ra khi nào nó không thể trả lời trực tiếp một câu hỏi và thay vào đó phải gọi một công cụ bên ngoài: một máy tính, một trình thông dịch mã, một trình duyệt web, hoặc một công cụ tìm kiếm. Mô hình sinh ra một lời gọi công cụ có cấu trúc (ví dụ, search("current weather in London")) như một phần của chuỗi token đầu ra, hệ thống thực thi lời gọi đó, và kết quả được đưa lại như các token đầu vào bổ sung để mô hình xử lý.

  • Định vị thị giác (visual grounding) kết nối ngôn ngữ với các vùng cụ thể trong một bức ảnh hoặc video. Khi một tác tử nói "click nút màu xanh ở góc trên bên phải", nó phải gắn cụm từ "nút màu xanh ở góc trên bên phải" vào tọa độ pixel. Về mặt kiến trúc, điều này đạt được bằng cách huấn luyện mô hình xuất ra tọa độ hộp giới hạn như các token đặc biệt, hoặc bằng cách cho mô hình sinh ra một bản đồ nhiệt (heatmap) phủ lên ảnh chỉ ra vùng được nhắc đến. Điều này mở rộng công việc định vị và tham chiếu đã thảo luận ở file 02 của chương này (Vision Language Models) sang miền hành động.

  • Các tác tử web (web agents) như WebVoyager và SeeAct minh họa các tác tử đa phương thức đang điều hướng các trang web. Tác tử nhận một ảnh chụp màn hình của một trang web, xác định các phần tử tương tác (nút, trường văn bản, liên kết), và xuất ra các hành động (click, gõ, cuộn) để hoàn thành một mục tiêu do người dùng chỉ định. Thách thức then chốt là không gian hành động khổng lồ: một trang web điển hình có hàng trăm mục tiêu click khả thi.

Vòng lặp observe-reason-act của một tác tử đa phương thức, thể hiện đầu vào thị giác từ màn hình, quá trình suy luận bên trong mô hình thống nhất, và các hành động đầu ra như click, gõ, hoặc gọi công cụ

  • Các tác tử có thân xác (embodied agents) mở rộng điều này sang các môi trường vật lý. Một robot với camera và microphone nhận đầu vào thị giác và âm thanh, xử lý qua một mô hình thống nhất, và xuất ra các lệnh động cơ. Các dự án như PaLM-E (Google) nhúng dữ liệu cảm biến robot trực tiếp vào chuỗi token của một mô hình ngôn ngữ, cho phép robot tuân theo các chỉ dẫn như "nhặt khối màu xanh gần cái bát" bằng cách gắn chỉ dẫn vào quan sát thị giác của nó và sinh ra một chuỗi các hành động cơ học.

  • Quy trình huấn luyện cho các tác tử thêm một giai đoạn học tăng cường (RL) lên trên quy trình huấn luyện theo giai đoạn tiêu chuẩn. Tác tử tương tác với một môi trường (một desktop giả lập, một trình duyệt web, một trình giả lập robot), nhận phần thưởng khi hoàn thành tác vụ, và cập nhật chính sách (policy) của nó bằng các thuật toán như PPO hoặc REINFORCE. Tín hiệu phần thưởng thường thưa thớt (1 nếu thành công tác vụ, 0 nếu ngược lại), khiến việc tối ưu hóa này trở nên thách thức và phụ thuộc nhiều vào các tiên nghiệm mạnh từ huấn luyện trước đa phương thức.

Các benchmark và đánh giá

  • Đánh giá một mô hình có thể nhìn, nghe, đọc và hành động đòi hỏi một bộ các benchmark đa dạng. Không một thước đo đơn lẻ nào bao quát được năng lực đa phương thức, nên lĩnh vực này dựa vào một tập hợp các đánh giá chuyên biệt.

  • MMLU (Massive Multitask Language Understanding) kiểm tra kiến thức trên 57 môn học thuật. Mặc dù ban đầu chỉ dùng văn bản, nó đóng vai trò là một đường cơ sở: một mô hình đa phương thức thống nhất không được mất đi hiệu năng chỉ-văn bản khi nó có thêm năng lực thị giác. Một sự sụt giảm trong MMLU sau khi huấn luyện đa phương thức báo hiệu sự quên lãng thảm khốc (catastrophic forgetting).

  • MMBench đánh giá sự hiểu biết thị giác-ngôn ngữ trên 20 chiều năng lực chi tiết, bao gồm nhận dạng thuộc tính, hiểu mối quan hệ không gian, và OCR. Mỗi câu hỏi trình bày một bức ảnh và một câu hỏi trắc nghiệm. Benchmark này kiểm tra có hệ thống xem mô hình thực sự hiểu bức ảnh hay đang dựa vào các lối tắt chỉ-văn bản.

  • SEED-Bench cung cấp 19.000 câu hỏi trắc nghiệm trải rộng trên 12 chiều đánh giá cho cả hiểu ảnh và hiểu video. Nó cụ thể kiểm tra sự hiểu thời gian (điều gì xảy ra trước/sau một khung hình nhất định) và suy luận tổ hợp (kết hợp nhiều thuộc tính thị giác).

  • MM-Vet đánh giá các năng lực đa phương thức tích hợp bằng cách yêu cầu các mô hình sử dụng nhiều kỹ năng đồng thời: nhận dạng, OCR, nhận thức không gian, sinh ngôn ngữ, và truy xuất tri thức, tất cả trong một câu hỏi duy nhất.

  • MathVista kiểm tra suy luận toán học trên các đầu vào thị giác: sơ đồ hình học, biểu đồ thống kê, đồ thị hàm, và các hình minh họa khoa học. Benchmark này nhắm cụ thể vào các năng lực chuỗi suy nghĩ đa phương thức.

  • Các benchmark nghe-nhìn như AVQA (Audio-Visual Question Answering) kiểm tra xem các mô hình có thể suy luận về mối quan hệ giữa những gì chúng thấy và những gì chúng nghe hay không. Ví dụ: "Người đang nói có phải là người bên trái hay bên phải?"

  • Các benchmark tác tử như WebArena, OSWorld, và SWE-bench đánh giá việc hoàn thành tác vụ trong các môi trường tương tác. Thước đo thường là tỷ lệ thành công: tác tử hoàn thành đúng bao nhiêu phần trăm tác vụ? Những benchmark này đặc biệt thách thức vì chúng đòi hỏi lập kế hoạch tầm xa (long-horizon) và phục hồi lỗi.

  • Các khung đánh giá toàn diện như LMSYS Chatbot Arena dùng các phán đoán sở thích của con người theo định dạng đối đầu (head-to-head). Hai mô hình được cho cùng một đầu vào đa phương thức, và một trọng tài con người chọn câu trả lời nào tốt hơn. Xếp hạng Elo được tính từ hàng nghìn sự so sánh như vậy, cung cấp một đại lượng vô hướng duy nhất tương quan tốt với chất lượng mô hình tổng thể.

  • Một thách thức dai dẳng trong đánh giá đa phương thức là nhiễm bẩn dữ liệu (data contamination): vì các mô hình này được huấn luyện trên dữ liệu quy mô internet, các ảnh và câu hỏi benchmark có thể xuất hiện trong tập huấn luyện. Việc loại bản sao (deduplication) cẩn thận và tạo ra các tập kiểm tra được giữ riêng (held-out) là những biện pháp bảo vệ thiết yếu nhưng không hoàn hảo.

Các mô hình thế giới (World Models)

  • Hãy tưởng tượng bạn nhắm mắt và hình dung điều gì sẽ xảy ra nếu bạn đẩy một cốc thủy tinh rơi khỏi mép bàn. Bạn "thấy" nó rơi, "nghe" tiếng vỡ, và "cảm thấy" rằng đó sẽ là một ý tưởng tồi. Não bộ bạn đang chạy một mô hình thế giới (world model): một mô phỏng bên trong về cấu trúc vật lý và nhân quả của môi trường có thể dự đoán các trạng thái tương lai trên nhiều phương thức.

  • Trong bối cảnh AI, một mô hình thế giới là một hàm được học dự đoán trạng thái tiếp theo của thế giới cho trước trạng thái hiện tại và một hành động:

\[\hat{s}_{t+1} = g_\phi(s_t, a_t)\]
  • trong đó \(s_t\) là biểu diễn trạng thái hiện tại (có thể bao gồm thông tin thị giác, thính giác và bản thể (proprioceptive)), \(a_t\) là một hành động, và \(\hat{s}_{t+1}\) là trạng thái tiếp theo được dự đoán. Trạng thái \(s_t\) sống trong một không gian tiềm ẩn được học thay vì không gian pixel thô, làm cho bài toán dự đoán trở nên dễ xử lý (tractable).

  • Các mô hình dự đoán video như Sora (OpenAI) và Genie (Google DeepMind) đại diện cho một bước tiến lớn hướng tới các mô hình thế giới. Chúng học cách sinh ra các khung hình video có tính nhất quán thời gian, được điều kiện hóa bởi các câu lệnh văn bản và/hoặc các chuỗi hành động. Mặc dù thường được thảo luận như các bộ sinh video, năng lực cốt lõi bên dưới gần với mô phỏng thế giới hơn: mô hình đã nội tại hóa đủ vật lý (trọng lực, va chạm, che khuất, động lực học chất lưu) để dựng lên các tương lai hợp lý.

  • Sự kết nối với các kiến trúc đa phương thức là sâu sắc. Một mô hình thế giới chỉ dự đoán pixel thì bị hạn chế; một mô hình thế giới thực sự hữu ích dự đoán xuyên phương thức. Nếu bạn đẩy cốc thủy tinh, mô hình thế giới nên dự đoán quỹ đạo thị giác (cốc rơi), sự kiện thính giác (cốc vỡ), và hậu quả ngữ nghĩa (giờ bạn có mảnh thủy tinh vỡ trên sàn). Các kiến trúc đa phương thức thống nhất là ứng viên tự nhiên cho các mô hình thế giới vì chúng đã biểu diễn tất cả phương thức trong một không gian dùng chung.

  • Một cách hình thức, một mô hình thế giới đa phương thức tối ưu hóa:

\[\mathcal{L}_\text{world} = \mathbb{E}\left[\sum_{m \in \mathcal{M}} \lambda_m \| s_{t+1}^m - g_\phi^m(s_t, a_t) \|^2 \right]\]
  • trong đó \(s_{t+1}^m\) là biểu diễn trạng thái thực tế tiếp theo trong phương thức \(m\)\(g_\phi^m\) là đầu dự đoán đặc thù cho phương thức của mô hình thế giới. Động lực tiềm ẩn dùng chung \(g_\phi\) hoạt động trong không gian đa phương thức chung, trong khi các đầu đặc thù phương thức giải mã các dự đoán sang định dạng nguyên bản của mỗi phương thức.

Sơ đồ mô hình thế giới thể hiện một trạng thái tiềm ẩn được cập nhật bởi một hành động, với các đầu giải mã dự đoán các khung hình thị giác tương lai, dạng sóng âm thanh và các mô tả ngữ nghĩa

  • JEPA (Joint Embedding Predictive Architecture - Kiến trúc dự đoán gắn kết embedding), do Yann LeCun đề xuất, cung cấp một khung cho các mô hình thế giới tránh được các cạm bẫy của việc dự đoán ở mức pixel. Thay vì dự đoán các pixel thô (lãng phí dung lượng vào các chi tiết không liên quan như kết cấu chính xác), JEPA dự đoán trong không gian embedding. Mô hình học một encoder ánh xạ các quan sát sang embedding và một bộ dự đoán dự báo các embedding tương lai:
\[\hat{\mathbf{z}}_{t+1} = h_\psi(\mathbf{z}_t, a_t), \quad \mathbf{z}_t = \text{Enc}(s_t)\]
  • Mất mát so sánh các embedding thay vì các quan sát thô, bền vững hơn với sự đồng nhất nhận thức (perceptual aliasing - nhiều cấu hình pixel khác nhau có thể biểu diễn cùng một trạng thái ngữ nghĩa). Cách tiếp cận này đặc biệt nhiều hứa hẹn cho các mô hình thế giới đa phương thức vì nó hoạt động tự nhiên trong không gian embedding dùng chung mà các kiến trúc thống nhất đã cung cấp sẵn.

  • Các mô hình thế giới có các ứng dụng thực tế vượt ra ngoài sự quan tâm học thuật. Trong học tăng cường dựa trên mô hình (model-based RL), tác tử dùng mô hình thế giới để "tưởng tượng" hậu quả của các hành động trước khi thực hiện chúng, giảm mạnh số lượng tương tác với thế giới thực cần thiết (nhắc lại thảo luận về model-based RL từ Chương 11). Trong lái xe tự hành, một mô hình thế giới dự đoán cảnh sẽ tiến triển như thế nào trong vài giây tới cho trước các quyết định lái khác nhau. Trong robotics, một mô hình thế giới cho phép một robot diễn tập tinh thần một chuỗi thao tác trước khi thực thi nó.

  • Biên giới của nghiên cứu mô hình thế giới đang tiến tới các mô hình thế giới tương tác (interactive world models) chạy theo thời gian thực và phản hồi với các hành động tùy ý của người dùng, về cơ bản trở thành các bộ mô phỏng đa năng được học hoàn toàn từ dữ liệu. Genie 2 (Google DeepMind) minh họa điều này cho các môi trường 3D: cho một bức ảnh duy nhất, nó sinh ra một thế giới 3D tương tác, có thể điều khiển mà người dùng có thể khám phá. Sự hội tụ giữa các mô hình thế giới và các kiến trúc đa phương thức thống nhất gợi ý một tương lai nơi một mô hình duy nhất có thể nhận thức, dự đoán, mô phỏng và hành động xuyên tất cả phương thức.

Bài tập lập trình (dùng CoLab hoặc notebook)

Bài 1: Xây dựng một bộ đan xen token đa phương thức tối giản

  • Viết một hàm nhận một chuỗi văn bản và một "ảnh" giả (một mảng 2D nhỏ) rồi đan xen các biểu diễn đã token hóa của chúng thành một chuỗi phẳng duy nhất cùng với các embedding phương thức.
import jax
import jax.numpy as jnp

# Mô phỏng token hóa đa phương thức: token văn bản + token "patch ảnh"
def interleave_modalities(text_tokens, image_patches, embed_dim=32, key=jax.random.PRNGKey(0)):
    """Đan xen token văn bản và token ảnh với các embedding phương thức được học."""
    k1, k2, k3 = jax.random.split(key, 3)
    n_text = text_tokens.shape[0]
    n_img = image_patches.shape[0]
    # Các ma trận chiếu ngẫu nhiên (thay thế cho các encoder thật)
    W_text = jax.random.normal(k1, (text_tokens.shape[-1], embed_dim)) * 0.02
    W_img = jax.random.normal(k2, (image_patches.shape[-1], embed_dim)) * 0.02
    # Embedding phương thức: một cho văn bản, một cho ảnh
    mod_emb = jax.random.normal(k3, (2, embed_dim)) * 0.02
    text_embs = text_tokens @ W_text + mod_emb[0]  # (n_text, embed_dim)
    img_embs = image_patches @ W_img + mod_emb[1]   # (n_img, embed_dim)
    # Đan xen: token [IMG] trước, sau đó token [TEXT] (như LLaVA)
    combined = jnp.concatenate([img_embs, text_embs], axis=0)
    print(f"Chuỗi kết hợp: {n_img} ảnh + {n_text} văn bản = {combined.shape[0]} token")
    return combined

# Thử nghiệm: 5 token văn bản (dim 16) và 4 patch ảnh (dim 64)
text = jax.random.normal(jax.random.PRNGKey(1), (5, 16))
image = jax.random.normal(jax.random.PRNGKey(2), (4, 64))
seq = interleave_modalities(text, image)
# Thử nghiệm: đổi embed_dim, đảo thứ tự đan xen, thêm phương thức thứ ba

Bài 2: Trực quan hóa các mẫu chú ý xuyên phương thức

  • Tạo một chuỗi đa phương thức tổng hợp và tính các điểm self-attention để xem các token ảnh chú ý đến token văn bản và ngược lại như thế nào.
import jax
import jax.numpy as jnp
import matplotlib.pyplot as plt

def cross_modal_attention(n_text=6, n_img=4, d=32, key=jax.random.PRNGKey(42)):
    """Tính và trực quan hóa chú ý giữa các token văn bản và ảnh."""
    k1, k2, k3 = jax.random.split(key, 3)
    # Mô phỏng embedding token cho hai phương thức
    text_embs = jax.random.normal(k1, (n_text, d))
    img_embs = jax.random.normal(k2, (n_img, d))
    seq = jnp.concatenate([img_embs, text_embs], axis=0)  # (n_img+n_text, d)
    # Các phép chiếu Q, K được học
    Wq = jax.random.normal(k3, (d, d)) * 0.1
    Wk = jax.random.normal(jax.random.PRNGKey(99), (d, d)) * 0.1
    Q, K = seq @ Wq, seq @ Wk
    scores = Q @ K.T / jnp.sqrt(d)
    attn = jax.nn.softmax(scores, axis=-1)
    # Vẽ biểu đồ
    labels = [f"img_{i}" for i in range(n_img)] + [f"txt_{i}" for i in range(n_text)]
    fig, ax = plt.subplots(figsize=(7, 6))
    ax.imshow(attn, cmap="viridis")
    ax.set_xticks(range(len(labels))); ax.set_xticklabels(labels, rotation=45, fontsize=8)
    ax.set_yticks(range(len(labels))); ax.set_yticklabels(labels, fontsize=8)
    ax.set_xlabel("Key (được chú ý đến)"); ax.set_ylabel("Query (chú ý từ)")
    ax.set_title("Bản đồ self-attention xuyên phương thức")
    plt.colorbar(ax.images[0], ax=ax, shrink=0.8)
    plt.tight_layout(); plt.show()

cross_modal_attention()
# Thử nghiệm: tăng d, thêm một mặt nạ nhân quả, quan sát cách các mẫu chú ý thay đổi

Bài 3: Mô phỏng huấn luyện theo giai đoạn với trọng số mất mát đặc thù phương thức

  • Minh họa cách các trọng số mất mát đặc thù phương thức ảnh hưởng đến một vòng lặp huấn luyện đa phương thức giả. Quan sát cách cân bằng các mất mát ngăn một phương thức chiếm ưu thế.
import jax
import jax.numpy as jnp
import matplotlib.pyplot as plt

def staged_training_sim(steps=200, key=jax.random.PRNGKey(7)):
    """Mô phỏng huấn luyện đa phương thức với trọng số mất mát phương thức có thể điều chỉnh."""
    # Hai 'phương thức' với các thang mất mát khác nhau (mất mát văn bản ~lớn gấp 10 lần mất mát ảnh)
    losses_text, losses_img = [], []
    param = jnp.array([0.0, 0.0])  # Tham số dùng chung được cập nhật bởi cả hai mất mát phương thức
    lr = 0.05
    # Thử đổi các trọng số này để thấy hiệu ứng lên sự cân bằng hội tụ
    lambda_text, lambda_img = 1.0, 5.0  # tăng trọng số cho phương thức yếu hơn

    for step in range(steps):
        k1, k2, key = jax.random.split(key, 3)
        noise_t = jax.random.normal(k1, ()) * 0.3
        noise_i = jax.random.normal(k2, ()) * 0.1
        loss_t = (param[0] - 3.0) ** 2 + noise_t  # mục tiêu văn bản = 3.0
        loss_i = 0.1 * (param[1] - 1.0) ** 2 + noise_i  # mục tiêu ảnh = 1.0 (thang nhỏ hơn)
        # Gradient kết hợp có trọng số
        grad_t = lambda_text * 2 * (param[0] - 3.0)
        grad_i = lambda_img * 0.2 * (param[1] - 1.0)
        param = param - lr * jnp.array([grad_t, grad_i])
        losses_text.append(float(loss_t)); losses_img.append(float(loss_i))

    fig, ax = plt.subplots(figsize=(8, 4))
    ax.plot(losses_text, label=f"Mất mát văn bản (trọng số={lambda_text})", alpha=0.7)
    ax.plot(losses_img, label=f"Mất mát ảnh (trọng số={lambda_img})", alpha=0.7)
    ax.set_xlabel("Bước huấn luyện"); ax.set_ylabel("Mất mát"); ax.legend()
    ax.set_title("Cân bằng mất mát phương thức trong huấn luyện theo giai đoạn")
    plt.tight_layout(); plt.show()

staged_training_sim()
# Thử nghiệm: đặt lambda_img=1.0 và xem mất mát ảnh hội tụ chậm hơn nhiều