Autoencoder là gì: cách nén và tái tạo dữ liệu bằng mạng nơ-ron

Autoencoder là gì: cách nén và tái tạo dữ liệu bằng mạng nơ-ron

Autoencoder là gì? Đây là kiến trúc mạng nơ-ron hai phần, gồm encoder nén dữ liệu đầu vào thành một mã nhỏ hơn và decoder dựng lại dữ liệu gốc từ mã đó. Mô hình không cần nhãn để huấn luyện, nên nó thuộc nhóm học không giám sát và được dùng làm nền tảng cho nhiều bài toán khác.

Sơ đồ kiến trúc autoencoder với đầu vào, tầng encoder, mã nén, tầng decoder và đầu ra

Cấu trúc của một autoencoder

Giả sử dữ liệu đầu vào là một ảnh chữ số viết tay kích thước 8×8, tức 64 giá trị pixel nguyên. Bộ dữ liệu load_digits của scikit-learn đúng như vậy: mỗi mẫu có 64 chiều, tổng cộng 1.797 ảnh chia làm 10 lớp chữ số. Đưa ảnh này vào encoder, ta thu được một vector mã chỉ còn 3 chiều. Decoder nhận vector 3 chiều ấy và trả về một bản 64 pixel gần với ảnh gốc.

Điểm cốt lõi nằm ở chỗ tầng ẩn của autoencoder hẹp hơn đầu vào. Nếu ta cho phép mã rộng bằng hoặc bằng số chiều đầu vào, mô hình chỉ cần học cách chép y nguyên đầu vào sang đầu ra và trở thành một máy sao chép vô dụng. Chính cái cổ chai buộc mô hình phải chọn ra thông tin quan trọng nhất, giống như cách nén ZIP buộc phần mềm tìm ra cấu trúc lặp trong dữ liệu.

Quá trình huấn luyện chỉ tối ưu một hàm chi phí tái tạo: sai khác giữa đầu ra và đầu vào. Nếu ta còn thêm một số hạng phạt độ dài của mã thì tổng chi phí là tổng của hai thành phần đó.

Autoencoder tuyến tính chính là PCA

Một kết quả lý thuyết quan trọng: khi cả encoder và decoder đều là hàm tuyến tính, và hàm chi phí là bình phương trung bình, thì toàn bộ bài toán tối ưu giảm về phân tích thành phần chính. Giá trị kích hoạt ở tầng ẩn chính là toạ độ dọc theo các vector riêng đầu tiên của ma trận hiệp phương sai dữ liệu, còn đầu ra chính là phép chiếu trực giao của dữ liệu lên không gian con đó.

Nói cách khác, với một lớp ẩn tuyến tính, bạn không học được gì mà PCA chưa làm được. Chỉ khi đưa hàm kích hoạt phi tuyến vào, autoencoder mới vượt qua được giới hạn đó và trở thành một dạng PCA phi tuyến. Đây là lý do các bài nghiên cứu đầu tiên về autoencoder nhiều lớp đều so sánh trực tiếp với PCA.

Sơ đồ khử nhiễu bằng autoencoder: ảnh nhiễu đầu vào, biểu diễn nén, ảnh đã khử nhiễu và đặc trưng cần tách
Sơ đồ variational autoencoder với khối không gian latent, tầng encoder, tầng decoder và luồng đầu vào cùng đầu ra

Các biến thể quan trọng

Autoencoder khử nhiễu

Ta thêm nhiễu ngẫu nhiên vào dữ liệu trước khi đưa vào mô hình, rồi bắt mô hình tái tạo lại bản sạch. Nhiễu có thể là nhiễu Gaussian, che khuất ngẫu nhiên hay nhiễu muối tiêu. Kết quả là một mô hình đã học được biểu diễn đặc trưng ổn định hơn trước nhiễu, nhờ điều kiện bắt mô hình phải đẩy thông tin nhiễu ra khỏi mã.

Autoencoder thưa

Ở đây ta thêm hình phạt khiến phần lớn phần tử mã tiến gần bằng không, buộc mô hình dùng mã một cách tiết chế. Biến thể thưa còn cho phép tầng ẩn rộng hơn đầu vào, chẳng hạn chỉ giữ các giá trị kích hoạt lớn nhất trong mỗi mẫu.

Autoencoder co giãn

Biến thể này cộng thêm một hàm phạt đo bình phương chuẩn Frobenius của ma trận Jacobi của encoder, tức là biến dạng cục bộ của đầu vào không được thay đổi mạnh ở tầng mã.

Autoencoder biến phân

VAE là bước nhảy lớn nhất. Thay vì xuất ra một điểm trong không gian mã, encoder của VAE xuất ra một phân phối, thường là Gaussian đa chiều. Bài báo gốc của Kingma và Welling năm 2013 giới thiệu thủ thuậc tái tham số hoá để lấy mẫu được trong khi vẫn truyền được gradient về ngược, kèm một hạng phạt là phân khoảng Kullback-Leibler giữa phân phối mã và phân phối tiền tiêu chuẩn.

Bản ví dụ chính thức trên Keras dùng latent_dim bằng 2 và bộ lọc tích chập 32 rồi 64 kênh. Tổng số tham số phần encoder tính ra là 69.076, và trong quá trình huấn luyện hàm chi phí tái tạo rơi từ 473,80 xuống còn 144,20 sau 30 vòng lặp.

So sánh các biến thể

Biến thể Đầu vào khi huấn luyện Mã nhận được Công dụng chính
Tuyến tính Dữ liệu gốc Một điểm PCA, giảm chiều tuyến tính
Khử nhiễu Dữ liệu đã nhiễu Một điểm Làm sạch dữ liệu, tiền xử lý
Thưa Dữ liệu gốc Mã thưa Tách đặc trưng dễ đọc
Co giãn Dữ liệu gốc Mã ổn định cục bộ Tránh biến dạng vùng
Biến phân Dữ liệu gốc Phân phối xác suất Sinh dữ liệu mới, mã theo cụm

Ba ứng dụng thực tế

  • Nén và giảm chiều. Mã của tầng ẩn là một dạng nén học được, dùng để giảm số chiều trước khi đưa vào mô hình khác. Hinton và Salakhutdinov từng dùng một tầng cổ chai 30 đơn vị cho bộ MNIST và cho thấy sai khác tái tạo nhỏ hơn so với 30 thành phần chính đầu tiên của PCA, đồng thời mã dễ phân cụm hơn.
  • Phát hiện bất thường. Chỉ huấn luyện trên dữ liệu bình thường rồi coi sai khác tái tạo là điểm bất thường, đặt ngưỡng ở khoảng phân vị 95 của tập kiểm định. Cần lưu ý mô hình đôi khi tái tạo được cả mẫu lạ, nên đây chỉ là tín hiệu cảnh báo chứ không phải phán quyết.
  • Tiền huấn luyện đặc trưng. Huấn luyện encoder trên dữ liệu không nhãn rồi chỉ giữ lại phần encoder làm đầu vào cho các bài toán có nhãn, giảm đáng kể nhu cầu dữ liệu gán nhãn.

Nguồn tham khảo

Đọc thêm tại bài Autoencoder trên Wikipedia, phần biến thể VAE tại Variational autoencoder, bài gốc của Kingma và Welling trên arXiv 1312.6114, ví dụ xây dựng VAE với số liệu tham số tại Keras Generative VAE, thông tin bộ dữ liệu ảnh chữ số 8×8 tại scikit-learn load_digits và bài tổng quan học biểu diễn tại arXiv 1206.5538.

Tôi là một lập trình viên IOS. Code chính là IOS nhưng thỉnnh thoảng vẫn đá sang Android hoặc web. Mặc dù không quá thông thạo nhưng tôi sẽ chia sẻ những kiến thức mà mình đã tìm hiểu, áp dụng qua.

Bài viết liên quan

Gradient Boosting là gì: thuật toán học máy cho dữ liệu bảng

Gradient Boosting (GBM) là một trong những thuật toán học máy phổ biến nhất để giải quyết bài toán dự báo trên dữ liệu có cấu trúc (tabular data). Thuật…

Xem thêm

Graph Neural Network là gì: cách AI học trên dữ liệu đồ thị

Graph Neural Network là gì: cách AI học trên dữ liệu đồ thị Graph Neural Network (GNN) là lớp mạng nơ-ron được thiết kế riêng cho dữ liệu có cấu…

Xem thêm

Gradient Descent là gì: Thuật toán tối ưu mọi mô hình học máy

Gradient Descent là gì: Thuật toán tối ưu mọi mô hình học máy Gradient descent là thuật toán tối ưu cơ bản nhất của học máy, dùng để tìm các…

Xem thêm
0 0 đánh giá
Article Rating
Theo dõi
Thông báo của
guest
0 Comments
Cũ nhất
Mới nhất Được bỏ phiếu nhiều nhất