Từ dữ liệu đến không gian ẩn: tổng quan mô hình sinh
Bài này trả lời một câu hỏi đứng riêng: dữ liệu thô, rất nhiều số, có thể được gom vào một vector ẩn như thế nào, và autoencoder, VAE, GAN cùng diffusion dùng ý đó theo những hướng nào. Vector ẩn, thường gọi là latent, là bộ số mà mô hình tự suy ra từ mẫu quan sát được. Ta không đo nó trực tiếp như đo một pixel. Encoder là khối đọc dữ liệu và viết ra vector ấy. Decoder là khối đọc vector ấy để dựng lại dữ liệu, hoặc để tạo một mẫu.
Bài này không dạy cách GAN cho hai mạng học chống nhau, không mô tả từng bước thêm nhiễu rồi khử nhiễu của diffusion, và không chứng minh cận dưới xác suất dùng trong VAE. Ba việc đó cần bài riêng. Phần dưới đủ để thấy không gian ẩn là gì, và để đặt bốn họ cạnh nhau mà không trộn mục tiêu của chúng.
Đọc nhanh. Đi theo thứ tự: từ dữ liệu thô sang không gian biểu diễn, biến ẩn là gì, mô hình phân biệt và mô hình sinh, rồi encoder, decoder và bảng bốn họ. Các mục Đào sâu không nằm trên đường đó.
Từ dữ liệu thô sang không gian biểu diễn
Một ảnh 28 nhân 28 là 784 số. Một đoạn âm thanh là một dãy biên độ rất dài. Một câu là một chuỗi token, tức các mảnh mà mô hình ngôn ngữ coi là đơn vị. Số chiều của dữ liệu thô lớn, trong khi những yếu tố thực sự đổi nội dung thường ít hơn. Với chữ số viết tay, đó là lớp chữ, độ nghiêng, độ dày nét, kích thước, vị trí, và thói tay người viết. Ta không cần nhớ từng pixel như một sự kiện độc lập.
Một mạng có thể học cách biến dữ liệu thô thành một vector số ngắn hơn. Vector đó là một biểu diễn của dữ liệu: một cách ghi nội dung bằng ít số hơn, do chính mô hình tìm ra trong lúc học.

Hình 1. Ví dụ dữ liệu video, âm thanh và văn bản được ánh xạ sang vector số. Hình được cắt từ Sebastian Raschka, Build a Large Language Model (From Scratch), Figure 2.2, Manning, 2025. Hình này minh họa khái niệm representation nói chung; hình không gắn riêng với autoencoder.
Điểm cần giữ: vector không chỉ là đổi định dạng sang số. Khi mô hình học tốt, vị trí của các vector còn có thể phản ánh cấu trúc của dữ liệu. Hai đối tượng mà người xem thấy là gần nhau có thể nằm gần nhau trong không gian các vector đó.

Hình 2. Ví dụ một không gian embedding hai chiều, trong đó các khái niệm gần nhau có xu hướng nằm gần nhau. Cắt từ Raschka, Figure 2.3.
Không gian chứa những vector này được gọi là không gian biểu diễn. Khi vector là biến trung gian mà mô hình tự học, không có mặt sẵn trong dữ liệu đo được, ta gọi nó là biểu diễn ẩn, và không gian chứa nó là không gian ẩn, hay latent space. Hình 2 là một không gian embedding, tức một trường hợp của không gian biểu diễn, vẽ ở hai chiều để mắt đọc được. Gần nhau trên hình là một gợi ý về gần nhau về nội dung. Đó là một ví dụ minh họa, không phải một bảo đảm hình học cho mọi mô hình sau này.
Biến ẩn không phải một nhãn có sẵn
Lấy ảnh khuôn mặt làm dữ liệu quan sát, ký hiệu là . Ảnh đó có thể được nghĩ như kết quả của nhiều yếu tố không ghi trong file: góc quay đầu, ánh sáng, biểu cảm, màu tóc, hình dạng mặt, nền. Tập các yếu tố ấy gói trong một vector, ký hiệu là . Trong dữ liệu thật ta thường chỉ có . Không có nhãn đúng cho từng thành phần của . Học biểu diễn, hay representation learning, là để mô hình tự tìm một hữu ích cho việc định làm sau đó: tái tạo, phân loại, hoặc sinh mẫu.
Sơ đồ trên là một cách kể: các yếu tố ẩn đi qua một quá trình tạo, rồi mới thành dữ liệu ta thấy. Khi huấn luyện, mũi tên thường đi ngược. Ta có , và muốn suy một dùng được.
Không nên đọc từng chiều của như một công tắc mang tên sẵn. Không có bảo đảm rằng chiều thứ nhất là độ nghiêng, chiều thứ hai là độ sáng, chiều thứ ba là độ dày nét. Ý nghĩa thường nằm rải trên nhiều chiều. Việc ép mỗi yếu tố có nghĩa tách khỏi các yếu tố khác là một bài toán riêng, gọi là học biểu diễn tách yếu tố. Tiếng Anh hay gọi là disentangled representation. Bài này chỉ cần ý yếu hơn: là bản tóm tắt do mô hình học, chưa phải một bảng thuộc tính đã được đặt tên.
Mô hình phân biệt và mô hình sinh
Mô hình phân biệt, discriminative model, trả lời câu hỏi đầu vào này thuộc lớp nào. Với ảnh mèo hay chó, ta chỉ cần một ánh xạ từ dữ liệu sang nhãn.
Cùng ý đó viết bằng xác suất có điều kiện của nhãn khi đã biết đầu vào. Nhãn là , đầu vào là .
Mô hình không phải mô tả ảnh mèo trông như thế nào. Nó chỉ cần một ranh giới đủ để chọn nhãn.
Mô hình sinh quan tâm cách dữ liệu có thể được tạo ra. Mục tiêu khái quát là học phân phối của chính dữ liệu: với mỗi vùng của không gian dữ liệu, dữ liệu kiểu đó thường gặp đến mức nào.
Khi có thêm một điều kiện , chẳng hạn nhãn lớp hoặc một câu mô tả, mục tiêu là phân phối của dữ liệu khi điều kiện đó đã biết.
Nếu phân phối học được đủ tốt, ta có thể lấy mẫu: rút một dữ liệu mới trông giống tập huấn luyện, mà không bắt buộc trùng một mẫu đã có. “Đủ tốt” là một điều kiện thật. Có một mạng encoder và một mạng decoder chưa suy ra điều kiện ấy.
Autoencoder thông thường ngồi gần nhánh tái tạo hơn nhánh sinh. Nó học dựng lại mẫu đã quan sát. Nhiều vùng trong latent space có thể không tương ứng với dữ liệu hợp lệ, vì không có gì trong lúc học bắt decoder phải xử lý những vùng đó. VAE thêm một cấu trúc xác suất lên latent space để việc lấy mẫu có một phân phối nguồn rõ. Việc đó mở được hướng lấy mẫu. Nó không biến mọi điểm rút ra thành một ảnh đẹp. GAN và diffusion, đặt ngay dưới, sinh dữ liệu bằng mục tiêu khác, không bằng cách nén rồi giải nén một mẫu có sẵn.
Encoder, decoder, và bốn họ đặt cạnh nhau
Encoder biến dữ liệu thành biểu diễn . Decoder dùng để tạo lại hoặc sinh dữ liệu. Đầu ra, ký hiệu , là bản dựng lại hoặc bản sinh, khác với đã quan sát. Sơ đồ chung đi từ dữ liệu quan sát sang mã, rồi sang đầu ra ấy.
Cùng một hình encoder rồi decoder xuất hiện ở nhiều họ, nhưng ý của và cách huấn luyện không giống nhau. Bảng dưới đặt bốn họ cạnh nhau để thấy chỗ khác đó.
| Mô hình | Encoder | Decoder hoặc generator | Mục tiêu chính | |
|---|---|---|---|---|
| Autoencoder | Có | Vector xác định, một điểm cho mỗi đầu vào | Tái tạo | Học biểu diễn và tái tạo |
| VAE | Có | Biến ngẫu nhiên có phân phối | Mô hình hóa | Latent space xác suất, rồi mới lấy mẫu |
| GAN | GAN cơ bản thường không cần encoder | Nhiễu rút từ một phân phối đơn giản | Generator | Sinh mẫu; một mạng thứ hai phân biệt thật và giả |
| Diffusion | Không theo encoder–decoder một lượt | Trạng thái nhiễu qua nhiều bước | Mạng khử nhiễu | Học đảo quá trình thêm nhiễu |
Autoencoder giữ một mã xác định: cùng một đầu vào, encoder trả cùng một điểm. Decoder phải dựng lại đầu vào từ điểm đó. Mục tiêu là sai khác giữa bản dựng lại và đầu vào. Lấy một mã mới từ một phân phối có sẵn không nằm trong mục tiêu ấy.
VAE vẫn có encoder và decoder, nhưng encoder mô tả cả một vùng các mã có thể cho đầu vào đó, rồi một mã được rút trong vùng. Khi sinh mẫu mới, mã thường được rút từ một phân phối đơn giản đã chọn từ trước, gọi là prior, tức giả định về mã trước khi thấy một mẫu cụ thể. Bài VAE trong chương này đi vào tâm, độ rộng, và cách huấn luyện. Bài tổng quan chỉ cần chỗ đứng của VAE: mã là biến ngẫu nhiên, không còn một điểm cứng.
GAN cơ bản không nén một ảnh có sẵn thành mã. Generator, mạng sinh, nhận một vector nhiễu rút từ phân phối đơn giản và biến nó thành một mẫu. Một mạng thứ hai, mạng phân biệt, được giao việc nhận ra mẫu thật và mẫu do generator tạo. Hai mạng học trong thế đối kháng. Bài này dừng ở mô tả vai trò đó. Cách viết hàm mục tiêu và cách cập nhật xen kẽ không nằm ở đây.
Diffusion cũng không nén một phát thành một vector rồi giải nén. Câu chuyện huấn luyện là thêm nhiễu dần vào dữ liệu, rồi học một mạng để đi ngược: từ trạng thái nhiễu hơn về trạng thái sạch hơn. Mã ở đây là trạng thái nhiễu qua nhiều bước, không phải một latent vector rút một lần. Số bước, lịch nhiễu, và kiến trúc mạng khử nhiễu thuộc bài diffusion.
Mô hình sinh tuần tự không bắt buộc một latent vector gọn: nó dựa trên phần tử tiếp theo khi các phần tử trước đã biết. Bài này không khai triển cách tính đó.
Thứ tự trong chương này đi từ autoencoder sang VAE, vì autoencoder là hình encoder, mã, decoder đơn giản nhất. VAE thêm xác suất lên chính mã đó. GAN và diffusion ở các chương sau dùng mục tiêu khác. Sơ đồ trên chỉ đặt chúng cạnh hai họ đầu, để một từ “mô hình sinh” không bị dùng cho bốn việc khác nhau.
Đào sâu: ba phân phối đủ để đọc VAE
Phần này không thuộc đường đọc nhanh. Nó chỉ để khi gặp ký hiệu ở bài VAE, ba chữ đã có nghĩa bằng lời.
Prior là giả định về mã ẩn trước khi nhìn một mẫu cụ thể. VAE thường chọn prior là phân phối chuẩn nhiều chiều, tâm ở gốc, các chiều độc lập và cùng phương sai bằng một. Viết gọn, với là ma trận đơn vị:
Nghĩa thực hành: các mã mà ta sẽ lấy khi sinh mẫu mới được khuyến khích nằm trong vùng của phân phối chuẩn đó, không phải một đám mây mã tùy ý do encoder tự chọn.
Decoder, khi đã có một mã , mô tả dữ liệu có thể được tạo ra thế nào. Tham số của decoder, tức các trọng số của khối giải mã, ký hiệu là . Với ảnh mà mỗi pixel được coi như một lần tung đồng xu có trọng số, đầu ra có thể là xác suất Bernoulli. Với dữ liệu liên tục, một lựa chọn hay gặp là phân phối Gaussian, tức phân phối chuẩn. Lựa chọn này phải khớp cách dữ liệu được chuẩn hóa. Chưa có một phân phối đầu ra đúng cho mọi bài.
Phân phối của mã khi đã thấy , gọi là phân phối hậu nghiệm, thường không tính trực tiếp được. Encoder học một phân phối gần đúng thay cho nó. Phân phối gần đúng đó được gọi là . Bộ tham số của encoder được gọi là . Câu đọc ký hiệu, sau khi hai chữ ấy đã có nghĩa, là encoder gắn với đầu vào đang xét:
Một câu đủ dùng nếu phần ký hiệu còn nặng: encoder đoán vùng mã hợp với đầu vào; decoder dùng một mã trong vùng đó để tạo lại đầu vào.
Đào sâu: biểu diễn ẩn dùng vào việc gì
Giảm chiều biến đầu vào lớn thành vector nhỏ hơn để lưu, để vẽ, hoặc để đưa sang mô hình khác. Vector nhỏ hơn là biểu diễn tốt khi nó giữ phần việc phía sau cần và bỏ phần không cần. Hai ảnh khác hẳn mà rơi vào cùng một mã là nén quá tay.
Tái tạo hoặc khử nhiễu lấy mục tiêu từ chính dữ liệu, nên có thể dùng mẫu chưa gán nhãn. Nhãn vẫn cần khi việc cuối là phân loại và ta muốn đo encoder trên việc đó.
Phát hiện bất thường là một hướng dùng autoencoder: học trên dữ liệu coi là bình thường, rồi nghi ngờ mẫu có sai số tái tạo cao. Đây là hướng thực hành, không phải bảo đảm. Mẫu lạ vẫn có thể được tái tạo tốt nếu decoder quá linh hoạt. Ngưỡng phải được kiểm trên tập có bất thường đại diện.
Sinh và sửa dữ liệu chỉ đứng vững khi không gian mã được tổ chức để việc lấy mẫu có nghĩa. Lúc đó ta có thể rút một mã mới rồi giải mã, nội suy giữa hai mã, hoặc đổi một phần thuộc tính rồi giải mã. Autoencoder cơ bản chưa hứa điều này. Ba câu hỏi giúp khỏi gán một mô hình tái tạo thành một mô hình sinh. Mã được tạo bằng cách nào: một điểm xác định, một mẫu ngẫu nhiên, hay nhiều bước nhiễu? Mất mát ép mã học điều gì: chỉ tái tạo, hay thêm một ràng buộc lên phân phối của mã? Khi sinh dữ liệu mới, mã được lấy từ đâu? Nếu câu thứ ba không có trả lời rõ, mô hình đang ở phía biểu diễn và tái tạo.
Nguồn đã dùng
- Ian Goodfellow, Yoshua Bengio, Aaron Courville, Deep Learning, Chapter 14: Autoencoders: https://www.deeplearningbook.org/contents/autoencoders.html
- Diederik P. Kingma, Max Welling, Auto-Encoding Variational Bayes, arXiv:1312.6114: https://arxiv.org/abs/1312.6114
- TensorFlow, Intro to Autoencoders: https://www.tensorflow.org/tutorials/generative/autoencoder
- TensorFlow, Convolutional Variational Autoencoder: https://www.tensorflow.org/tutorials/generative/cvae
Nếu chỉ đọc bài này
Dữ liệu nhiều chiều có thể đi qua một vector ẩn do mô hình tự học. Encoder viết vector đó, decoder đọc nó. Gần nhau trong không gian biểu diễn, như Hình 2, là một hình ảnh để nhớ, không phải bảo đảm rằng mọi chiều đã mang một nghĩa riêng. Mô hình phân biệt học nhãn khi đã có đầu vào. Mô hình sinh học cách dữ liệu phân bố, rồi mới nói tới lấy mẫu. Autoencoder, VAE, GAN và diffusion đứng cạnh nhau vì cùng liên quan tới dữ liệu mới hoặc tới biểu diễn, nhưng mã của chúng khác loại: một điểm để tái tạo, một phân phối trên mã, nhiễu đi vào generator, hoặc nhiễu được gỡ dần qua nhiều bước. Chưa có câu trả lời cho việc mã mới lấy từ đâu thì mô hình vẫn đang ở phía tái tạo.
Bài kế đi vào autoencoder: cổ chai buộc mã ngắn hơn đầu vào, và mục tiêu là tái tạo chính đầu vào đó.