Bạn đã bao giờ tự hỏi làm thế nào mà AI có thể tạo ra hình ảnh mới, văn bản, hoặc thậm chí là âm nhạc chưa? Một trong những kỹ thuật chính đằng sau sự kỳ diệu này được gọi là VAE, viết tắt của Variational Autoencoder. VAE là một loại mô hình generative đã cách mạng hóa lĩnh vực AI bằng cách cho phép máy học các mẫu cơ bản trong dữ liệu và tạo ra nội dung mới, nguyên bản.
Về cái ảnh bìa mình tạo ra con rồng bằng Stable Diffusion xong rảnh quá thay đổi thành phong cách toàn chấm bi giống của bà Yayoi Kusama, thấy cũng hay nên để làm bìa luôn.
Hiểu Những Điều Cơ Bản về VAE
Variational Autoencoder là gì?
Trước khi chúng ta đi sâu vào VAE, hãy hiểu trước về Autoencoder là gì. Autoencoder là các neural networks học cách nén và tái tạo dữ liệu. Chúng bao gồm hai phần chính: một encoder nén dữ liệu đầu vào thành một biểu diễn có chiều thấp hơn, và một decoder tái tạo dữ liệu gốc từ biểu diễn nén này.
Variational Autoencoder (VAE) là một dạng nâng cao của Autoencoder. VAE không chỉ học cách nén dữ liệu mà còn học một phân phối xác suất trên các biểu diễn nén có thể có. Điều này cho phép VAE không chỉ tái tạo dữ liệu gốc mà còn tạo ra dữ liệu mới bằng cách lấy mẫu từ phân phối đã học này.
VAE khác biệt như thế nào so với Autoencoder truyền thống
Trong khi Autoencoder truyền thống học một biểu diễn nén cố định của dữ liệu đầu vào thì VAE học một phân phối xác suất trên các biểu diễn nén. Điều này có nghĩa là thay vì ánh xạ dữ liệu đầu vào thành một điểm cố định trong không gian tiềm ẩn, VAE ánh xạ dữ liệu đầu vào thành một phân phối xác suất (thường là Gaussian) trong không gian tiềm ẩn. Điều này cho phép VAE tạo ra các điểm dữ liệu mới bằng cách lấy mẫu từ phân phối này, mang lại khả năng generative mạnh mẽ hơn.
Các thành phần chính của VAE: encoder, decoder, và latent space
- Encoder: Encoder là một mạng neural học cách nén dữ liệu đầu vào thành một biểu diễn không gian tiềm ẩn có chiều thấp hơn. Nó ánh xạ dữ liệu đầu vào thành các tham số của phân phối xác suất trong không gian tiềm ẩn, chẳng hạn như trung bình và độ lệch chuẩn của một phân phối Gaussian.
- Decoder: Decoder là một mạng neural học cách tái tạo dữ liệu gốc từ biểu diễn không gian tiềm ẩn. Nó nhận đầu vào là một điểm trong không gian tiềm ẩn và ánh xạ nó trở lại không gian dữ liệu gốc, cố gắng tái tạo dữ liệu đầu vào ban đầu.
- Latent Space: Latent space là không gian có chiều thấp hơn nơi mà dữ liệu đầu vào được nén lại. Trong VAE, latent space được biểu diễn bằng một phân phối xác suất, cho phép mô hình tạo ra các điểm dữ liệu mới bằng cách lấy mẫu từ phân phối này.
Bằng cách kết hợp các thành phần này, VAE có thể học cách nén dữ liệu, tái tạo dữ liệu gốc, và tạo ra các điểm dữ liệu mới, mang lại khả năng generative mạnh mẽ và linh hoạt.
VAE Hoạt Động Như Thế Nào?
Cách VAE Hoạt Động
Một cách hiểu siêu dễ nhất thì VAE hoạt động với 4 bước cơ bản như sau:
- Encoding: Dữ liệu đầu vào được truyền qua mạng encoder, nén nó thành một không gian tiềm ẩn có chiều thấp hơn. Encoder học cách nắm bắt các đặc điểm quan trọng nhất của dữ liệu trong biểu diễn nén này.
- Sampling: Khi dữ liệu đã được mã hóa trong không gian tiềm ẩn, chúng ta có thể tạo ra các điểm dữ liệu mới bằng cách lấy mẫu từ không gian này. Đây là nơi yếu tố “variational” xuất hiện – thay vì một điểm cố định, không gian tiềm ẩn được biểu diễn bằng một phân phối xác suất mà chúng ta có thể lấy mẫu từ đó.
- Decoding: Điểm mẫu từ không gian tiềm ẩn sau đó được truyền qua mạng decoder, tái tạo dữ liệu gốc từ biểu diễn nén này. Decoder học cách ánh xạ không gian tiềm ẩn trở lại không gian dữ liệu gốc.
- Hàm mục tiêu: VAE được huấn luyện để tối ưu hóa một hàm mục tiêu cụ thể cân bằng hai mục tiêu: tái tạo dữ liệu gốc chính xác (reconstruction loss) và đảm bảo rằng không gian tiềm ẩn tuân theo một phân phối xác suất mong muốn (regularization). Sự cân bằng này cho phép VAE tạo ra các điểm dữ liệu mới, hợp lý.
Bằng cách học biểu diễn nén này và ánh xạ giữa không gian tiềm ẩn và không gian dữ liệu gốc, VAE không chỉ có thể tái tạo dữ liệu huấn luyện mà còn tạo ra các điểm dữ liệu mới, chưa từng thấy mà giống với dữ liệu huấn luyện.
Nếu bạn vẫn còn cảm giác hơi mơ hồ như mình thì chúng ta sẽ khám phá một phép ẩn dụ đơn giản để làm cho VAE trở nên trực quan hơn. Thật ra mình sẽ không nói rằng khi đọc rồi tìm hiểu và viết bài này mình cũng khá mơ hồ 🙁dù mình sử dụng Stable Diffusion hơn 2 năm nay, dùng VAE để làm cho mặt của nhân vật tốt hơn.
Đơn Giản Hóa VAE Bằng Ví Dụ Cắt Giấy
Dí mong muốn là sẽ giúp bạn có thể hiểu cách nó hoạt động dễ nhất có thể, mình sẽ giải thích bằng ví dụ đơn giản và trực quan nhất, mình nghĩ rằng xé tan nát tờ giấy sau đó cố gắng ráp nó lại sẽ khá phù hợp với mô hình này.
Bây giờ, bạn hãy tưởng tượng bạn có một tờ giấy với một mẫu phức tạp trên đó. Tờ giấy này đại diện cho dữ liệu đầu vào của bạn. Bây giờ, hãy đi qua quá trình VAE sử dụng phép ẩn dụ này:
- Encoding (Cắt giấy): Bạn lấy tờ giấy và ném vào máy huỷ tài liệu để cắt nó thành các mảnh nhỏ. Mỗi mảnh chứa một phần của mẫu gốc. Điều này tương tự như quá trình mã hóa trong VAE, nơi dữ liệu đầu vào được nén thành một không gian tiềm ẩn có chiều thấp hơn.
- Latent Space (Trộn các mảnh): Bạn đặt tất cả các mảnh cắt vào một túi và trộn chúng lên. Túi này đại diện cho không gian tiềm ẩn trong VAE. Giống như cách các mảnh được trộn trong túi, không gian tiềm ẩn nắm bắt các đặc điểm thiết yếu của dữ liệu dưới dạng nén.
- Decoding (Tái tạo giấy): Bây giờ, bạn cố gắng tái tạo tờ giấy gốc bằng cách sử dụng các mảnh trộn từ túi. Bạn lấy từng mảnh và sắp xếp chúng để tạo thành mẫu gốc. Điều này tương tự như quá trình giải mã trong VAE, nơi dữ liệu gốc được tái tạo từ biểu diễn không gian tiềm ẩn.
- Generative Aspect (Biến thể trong giấy tái tạo): Khi bạn tái tạo tờ giấy, bạn có thể không đặt các mảnh chính xác như chúng đã ở trong mẫu gốc. Điều này giới thiệu một số biến thể trong giấy tái tạo, tương tự như cách VAE có thể tạo ra các điểm dữ liệu mới giống với dữ liệu huấn luyện nhưng không hoàn toàn giống nhau.
Ứng Dụng của Variational Autoencoder
VAE đã tìm thấy ứng dụng trong nhiều lĩnh vực khác nhau nhờ khả năng học và tạo ra dữ liệu mới. Một số ứng dụng chính bao gồm:
Tạo và Chỉnh Sửa Hình Ảnh
VAE có thể được sử dụng để tạo ra các hình ảnh mới giống với dữ liệu huấn luyện. Chúng cũng có thể được sử dụng cho các tác vụ chỉnh sửa hình ảnh, chẳng hạn như thay đổi biểu cảm khuôn mặt, thêm hoặc loại bỏ đối tượng, và chuyển đổi phong cách.
Đối với hầu hết người hông chuyên và thường xuyên sử dụng Stable Diffusion thì sẽ chắc chắn nghe về VAE dùng để cải thiện gương mặt và độ chi tiết của bức ảnh hoặc thậm chí bạn đã sử dụng luôn rồi và quay qua đọc bài viết này để tìm hiểu nó là cái gì luôn không chừng.
Nếu bạn muốn tìm hiểu sâu hơn về cách VAE cải thiện ảnh, gương mặt và các chi tiết, bạn có thể đọc bài viết này, mình thấy rất chi tiết và mình cũng có tham khảo bài này luôn. Ngoài ra, blog của anh này cũng viết rất dễ hiểu cho người mới bắt đầu sử dụng Stable Diffusion á.
Tạo Văn Bản và Chuyển Đổi Phong Cách
VAE có thể được áp dụng cho dữ liệu văn bản để tạo ra các câu hoặc đoạn văn mới bắt chước phong cách của dữ liệu huấn luyện. Chúng cũng có thể được sử dụng để chuyển đổi phong cách văn bản, chẳng hạn như thay đổi cảm xúc hoặc mức độ trang trọng của một đoạn văn. Khác với Transformer chuyên tạo ra nội dung thì VAE sẽ cải thiện nó bằng cách thêm cảm xúc và thay đổi mức độ trang trọng của đoạn văn làm cho nó hay hơn.
Tổng Hợp Âm Nhạc và Âm Thanh
Chúng có thể được áp dụng cho dữ liệu âm thanh để tạo ra âm nhạc hoặc giọng nói mới giống với dữ liệu huấn luyện. VAE có thể nắm bắt cấu trúc và phong cách cơ bản của âm thanh và tạo ra các biến thể mới.
Đây chỉ là một vài ví dụ về cách VAE đang được sử dụng trong các lĩnh vực khác nhau. Khi nghiên cứu về các mô hình generative tiếp tục tiến bộ, chúng ta có thể mong đợi thấy nhiều ứng dụng thú vị hơn của VAE trong tương lai.
Cách tự đào tạo VAE
Khi nói đến việc tự triển khai và đào tạo Variational Autoencoder (VAE), bạn sẽ có khá nhiều nền tảng/ công cụ làm việc và thư viện deep learning có sẵn với mức độ phổ biến cao. Nếu bạn quan tâm, mình sẽ giới thiệu một số công cụ được sử dụng rộng rãi nhất để bạn tự tìm hiểu tiếp ha:
- TensorFlow và PyTorch: Đây là hai khung làm việc deep learning phổ biến nhất. Chúng cung cấp một loạt các chức năng và có khả năng mở rộng cao, làm cho chúng phù hợp cho các dự án deep learning quy mô lớn. Cả hai khung làm việc đều có tài liệu phong phú, hướng dẫn và hỗ trợ cộng đồng rộng rãi.
- Keras: Keras là một API cấp cao có thể chạy trên TensorFlow, Theano, hoặc CNTK. Nó nổi tiếng với tính thân thiện với người dùng và đơn giản, làm cho nó trở thành lựa chọn tuyệt vời cho người mới bắt đầu. Keras cung cấp một giao diện đơn giản và trực quan để xây dựng và huấn luyện các mô hình deep learning, bao gồm cả VAE.
- FastAI: FastAI là một thư viện cấp cao được xây dựng trên PyTorch. Nó nhằm mục đích làm cho deep learning trở nên dễ tiếp cận và dễ sử dụng hơn. FastAI cung cấp một tập hợp các trừu tượng cấp cao và tiện ích có thể tăng tốc đáng kể quá trình phát triển.
Dĩ nhiên việc tiếp theo, sử dụng như thế nào, đào tạo ra sao thì nó là của bạn rồi á 🙂 chứ sâu hơn nữa thì mình chịu.
Tóm lại
Chúng ta đã đi lướt qua về Variational Autoencoder (VAE), tìm hiểu về khái niệm cơ bản của Autoencoder, cách VAE khác biệt so với Autoencoder truyền thống, và các thành phần chính của VAE cũng như cách VAE hoạt động, từ mã hóa và lấy mẫu đến giải mã và tối ưu hóa hàm mục tiêu.
Nếu bạn muốn tìm hiểu sâu hơn nữa về cách cải thiện ảnh và gương mặt trong các bức ảnh do Stable Diffusion tạo ra, mình sẽ có bài viết hướng dẫn trong tương lai.
Cuối cùng, nếu bài viết này bạn có góp ý về bất cứ điều gì, bình luận bên dưới để mình học hỏi thêm rồi điều chỉnh nha, cảm ơn bạn rất nhiều.
Câu Hỏi Thường Gặp về VAE
Sự khác biệt giữa VAE và Autoencoder truyền thống là gì?
Trong khi Autoencoder truyền thống học một biểu diễn nén cố định của dữ liệu đầu vào, VAE học một phân phối xác suất trên các biểu diễn nén có thể có. Điều này cho phép VAE tạo ra các điểm dữ liệu mới bằng cách lấy mẫu từ phân phối đã học này.
VAE có thể được sử dụng cho các tác vụ học có giám sát không?
VAE chủ yếu được sử dụng cho các tác vụ học không giám sát, chẳng hạn như tạo ra các điểm dữ liệu mới hoặc học các biểu diễn nén. Tuy nhiên, chúng có thể được mở rộng để kết hợp thông tin nhãn cho các tác vụ học bán giám sát hoặc tạo có điều kiện.
Làm thế nào để chọn kích thước của không gian tiềm ẩn trong một VAE?
Kích thước của không gian tiềm ẩn là một siêu tham số cần được điều chỉnh dựa trên độ phức tạp của dữ liệu và mức độ nén mong muốn. Một không gian tiềm ẩn nhỏ hơn dẫn đến nén nhiều hơn nhưng có thể mất một số chi tiết, trong khi một không gian tiềm ẩn lớn hơn có thể nắm bắt nhiều thông tin hơn nhưng có thể overfit. Thử nghiệm và đánh giá trên một tập xác nhận có thể giúp xác định kích thước phù hợp.
VAE có thể xử lý các loại dữ liệu khác nhau như hình ảnh, văn bản, hoặc âm thanh không?
Có, VAE có thể được áp dụng cho các loại dữ liệu khác nhau bằng cách điều chỉnh kiến trúc encoder và decoder để phù hợp với loại dữ liệu cụ thể. Các lớp convolutional thường được sử dụng cho hình ảnh, trong khi các lớp recurrent hoặc transformers có thể được sử dụng cho dữ liệu tuần tự như văn bản hoặc âm thanh.
Có những hạn chế hoặc thách thức nào với VAE không?
VAE đôi khi có thể tạo ra các đầu ra mờ hoặc ít sắc nét hơn so với các mô hình generative khác như GANs. Chúng cũng có thể gặp khó khăn trong việc nắm bắt các chi tiết tinh tế trong các mẫu được tạo ra. Ngoài ra, huấn luyện VAE có thể tốn kém về mặt tính toán, đặc biệt là đối với các tập dữ liệu lớn hoặc kiến trúc phức tạp.