Autoencoder
Autoencoder học cách nén dữ liệu thành một mã biểu diễn gọn và tái tạo dữ liệu từ mã đó mà không cần nhãn. Nội dung đề cập cấu trúc, các biến thể, phát hiện bất thường và code.
Autoencoder là mạng nơ-ron được huấn luyện để tái tạo chính đầu vào của nó. Bộ mã hóa ánh xạ đầu vào thành mã gọn, thường gọi là biểu diễn tiềm ẩn; bộ giải mã ánh xạ mã trở lại thành bản tái tạo; quá trình huấn luyện tối thiểu hóa sai khác giữa đầu vào và bản tái tạo. Vì mục tiêu chính là đầu vào, autoencoder học từ dữ liệu chưa gán nhãn, một dạng học không giám sát ngày nay thường được xếp vào học tự giám sát. Để mạng hữu ích, cần có ràng buộc ngăn mạng sao chép thẳng đầu vào, chẳng hạn nút thắt hẹp, thêm nhiễu, che một phần đầu vào hoặc phạt độ thưa; các ràng buộc này buộc mạng học cấu trúc giúp nén dữ liệu. Autoencoder được dùng cho giảm chiều, phát hiện bất thường, khử nhiễu, tiền huấn luyện và làm bước nén trong các trình tạo ảnh hiện đại.
Cách Autoencoder hoạt động#
Bộ mã hóa f ánh xạ đầu vào x thành mã z = f(x), bộ giải mã g tạo bản tái tạo x̂ = g(z), còn quá trình huấn luyện tối thiểu hóa reconstruction loss, chẳng hạn sai số bình phương trung bình giữa x và x̂, bằng backpropagation. Trong autoencoder thiếu hoàn chỉnh, z có ít chiều hơn x nhiều, nên mã là bản tóm tắt trong không gian tiềm ẩn, chỉ giữ lại thông tin cần thiết cho bộ giải mã. Autoencoder tuyến tính được huấn luyện bằng sai số bình phương sẽ học cùng không gian con với phân tích thành phần chính (PCA), kết quả được Pierre Baldi và Kurt Hornik chứng minh vào năm 1989; các hàm kích hoạt phi tuyến cho phép autoencoder sâu nắm bắt cấu trúc cong mà PCA không thể biểu diễn. Trong bài báo đăng trên Science năm 2006, Geoffrey Hinton và Ruslan Salakhutdinov cho thấy autoencoder sâu tạo ra mã chiều thấp tốt hơn PCA đáng kể đối với hình ảnh và tài liệu.
Các biến thể không phụ thuộc vào nút thắt hẹp thay vào đó làm nhiễu đầu vào, nhưng vẫn đánh giá bản tái tạo so với dữ liệu gốc sạch:
Các loại autoencoder#
- Khử nhiễu: Thêm nhiễu vào đầu vào và huấn luyện mạng khôi phục dữ liệu gốc sạch, như Pascal Vincent và các cộng sự mô tả năm 2008. Các đặc trưng được học có khả năng chống chịu nhiễu tốt, và model đã huấn luyện có thể làm sạch hình ảnh hoặc tín hiệu bị nhiễu.
- Thưa: Sử dụng nhiều đơn vị mã hơn số đầu vào nhưng phạt số lượng đơn vị được kích hoạt cùng lúc. Autoencoder thưa được huấn luyện trên các activation nội bộ của mô hình ngôn ngữ lớn (LLMs) phân tách chúng thành nhiều đặc trưng, mỗi đặc trưng thường tương ứng với một khái niệm có thể diễn giải.
- Biến phân (VAE): Encoder xuất ra một phân phối xác suất trên các mã, còn mức phạt KL-divergence giữ phân phối này gần với phân phối chuẩn tắc, nhờ đó giải mã một mã được lấy mẫu ngẫu nhiên sẽ tạo ra dữ liệu mới. Diederik Kingma và Max Welling giới thiệu VAE vào năm 2013.
- Lượng tử hóa vector (VQ-VAE): Ánh xạ mỗi vector mã tới mục gần nhất trong codebook được học thông qua lượng tử hóa vector, chuyển hình ảnh hoặc âm thanh thành các token rời rạc mà model tự hồi quy có thể tạo ra.
- Che khuất: Ẩn phần lớn đầu vào và tái tạo các phần bị thiếu. Autoencoder che khuất (MAE) ẩn 75% patch của hình ảnh; encoder được huấn luyện theo cách này trở thành một backbone mạnh cho các tác vụ thị giác khác. Segment Anything Model (SAM) của Meta, chạy trong package Ultralytics, xây dựng image encoder dựa trên Vision Transformer được tiền huấn luyện bằng MAE; SAM 2 sử dụng encoder Hiera được tiền huấn luyện bằng MAE, vì vậy các đặc trưng đứng sau mọi mask có thể được điều khiển bằng prompt đều được học trước tiên bằng cách điền vào các patch bị ẩn.
Phát hiện bất thường bằng sai số tái tạo#
Autoencoder chỉ được huấn luyện bằng dữ liệu bình thường sẽ tái tạo tốt các đầu vào bình thường nhưng tái tạo kém các đầu vào lạ, vì vậy sai số tái tạo có thể dùng làm điểm bất thường cho lỗi sản xuất, giao dịch gian lận hoặc máy móc sắp hỏng mà không cần nhãn bất thường. Đoạn mã PyTorch bên dưới huấn luyện một autoencoder nhỏ trên bộ chữ số viết tay đi kèm scikit-learn, loại bỏ toàn bộ chữ số 7, rồi so sánh sai số trên các chữ số giữ lại để kiểm thử với sai số trên các chữ số 7:
import torch
from sklearn.datasets import load_digits
from torch import nn
# 8x8 handwritten digits scaled to [0, 1]; every 7 is held out as the unseen anomaly
digits = load_digits()
x = torch.tensor(digits.data / 16, dtype=torch.float32)
normal, sevens = x[digits.target != 7], x[digits.target == 7]
train, test = normal[:1200], normal[1200:]
# Encoder: 64 pixels to an 8-number code; decoder: code back to 64 pixels
torch.manual_seed(0)
encoder = nn.Sequential(nn.Linear(64, 32), nn.ReLU(), nn.Linear(32, 8))
decoder = nn.Sequential(nn.Linear(8, 32), nn.ReLU(), nn.Linear(32, 64), nn.Sigmoid())
model = nn.Sequential(encoder, decoder)
optimizer = torch.optim.Adam(model.parameters(), lr=0.01)
for step in range(1000):
optimizer.zero_grad()
nn.functional.mse_loss(model(train), train).backward() # reconstruction error
optimizer.step()
with torch.no_grad():
for name, data in [("Held-out digits", test), ("Unseen 7s", sevens)]:
print(f"{name}: reconstruction error {nn.functional.mse_loss(model(data), data):.4f}")Đoạn mã in ra sai số tái tạo 0.0163 cho các chữ số giữ lại để kiểm thử và 0.0547 cho chữ số 7, trung bình cao hơn 3,4 lần; ngưỡng áp dụng cho sai số của từng hình ảnh biến khoảng cách này thành cờ bất thường. Autoencoder cũng có thể khái quát hóa quá tốt và tái tạo chính xác một số bất thường, vì vậy các hệ thống thực tế điều chỉnh kích thước nút thắt và ngưỡng trên dữ liệu validation có chứa các bất thường đã biết.
Autoencoder và các khái niệm liên quan#
- Mạng đối sinh (GAN): Generator của GAN ánh xạ nhiễu ngẫu nhiên thành dữ liệu và học từ discriminator, không cần encoder hay mục tiêu tái tạo. VAE cũng tạo dữ liệu; hàm mục tiêu dựa trên likelihood giúp huấn luyện ổn định hơn nhưng thường tạo ra hình ảnh mờ hơn.
- U-Net: Có cấu trúc encoder-decoder tương tự nhưng ánh xạ đầu vào sang một mục tiêu khác, chẳng hạn mask phân đoạn, đồng thời đưa các kết nối tắt vòng qua nút thắt; trong autoencoder, các kết nối này sẽ cho phép mạng sao chép đầu vào.
- Học tương phản: Học biểu diễn bằng cách so sánh các mẫu với nhau, vì vậy các đặc trưng nắm bắt những điểm phân biệt giữa hình ảnh và bỏ qua chi tiết ở cấp pixel mà loss tái tạo phải giữ lại.
- Embedding: Mã do encoder tạo ra là một dạng embedding, và autoencoder là một trong nhiều cách để học embedding.
Autoencoder trong tạo ảnh#
Model khuếch tán tiềm ẩn như Stable Diffusion chạy quy trình khuếch tán bên trong không gian tiềm ẩn của autoencoder, rồi giải mã kết quả trở lại thành pixel ở bước cuối. Stable Diffusion 1.x sử dụng autoencoder được điều chuẩn KL, nén hình ảnh RGB 512×512 thành latent 64×64×4, ít hơn 48 lần số giá trị mà model khuếch tán phải xử lý ở mỗi bước khử nhiễu.










