Connect with us

Trí tuệ nhân tạo

Hiểu Mô Hình Khuếch Tán: Một Cái Nhìn Sâu Vào AI Sáng Tạo

mm
Understanding Diffusion Models: A Deep Dive into Generative AI

Mô hình khuếch tán đã nổi lên như một phương pháp mạnh mẽ trong AI sáng tạo, tạo ra những kết quả đỉnh cao trong việc tạo hình ảnh, âm thanh và video. Trong bài viết kỹ thuật chuyên sâu này, chúng ta sẽ khám phá cách hoạt động của mô hình khuếch tán, những đổi mới chính của chúng và lý do tại sao chúng trở nên thành công đến vậy. Chúng ta sẽ đề cập đến nền tảng toán học, quá trình huấn luyện, thuật toán lấy mẫu và các ứng dụng tiên tiến của công nghệ mới thú vị này.

Giới Thiệu Về Mô Hình Khuếch Tán

Mô hình khuếch tán là một lớp mô hình sáng tạo học cách khử nhiễu dữ liệu dần dần bằng cách đảo ngược một quá trình khuếch tán. Ý tưởng cốt lõi là bắt đầu với nhiễu thuần túy và lặp đi lặp lại tinh chỉnh nó thành một mẫu chất lượng cao từ phân phối mục tiêu.

Cách tiếp cận này được lấy cảm hứng từ nhiệt động lực học không cân bằng – cụ thể là quá trình đảo ngược sự khuếch tán để khôi phục cấu trúc. Trong bối cảnh học máy, chúng ta có thể nghĩ về nó như việc học cách đảo ngược việc thêm nhiễu dần dần vào dữ liệu.

Một số lợi thế chính của mô hình khuếch tán bao gồm:

  • Chất lượng hình ảnh đỉnh cao, vượt trội GANs trong nhiều trường hợp
  • Huấn luyện ổn định mà không có động lực đối kháng
  • Có khả năng song song hóa cao
  • Kiến trúc linh hoạt – bất kỳ mô hình nào ánh xạ đầu vào đến đầu ra có cùng chiều đều có thể được sử dụng
  • Nền tảng lý thuyết vững chắc

Hãy cùng đi sâu hơn vào cách hoạt động của mô hình khuếch tán.

Source: Song et al.

Source: Song et al.

Phương trình vi phân ngẫu nhiên chi phối các quá trình thuận và nghịch trong mô hình khuếch tán. SDE thuận thêm nhiễu vào dữ liệu, dần dần biến đổi nó thành một phân phối nhiễu. SDE nghịch, được hướng dẫn bởi một hàm điểm số đã học, loại bỏ nhiễu một cách tiến triển, dẫn đến việc tạo ra hình ảnh thực tế từ nhiễu ngẫu nhiên. Cách tiếp cận này là chìa khóa để đạt được hiệu suất sáng tạo chất lượng cao trong các không gian trạng thái liên tục

Quá Trình Khuếch Tán Thuận

Quá trình khuếch tán thuận bắt đầu với một điểm dữ liệu x₀ được lấy mẫu từ phân phối dữ liệu thực, và dần dần thêm nhiễu Gaussian qua T bước thời gian để tạo ra các phiên bản nhiễu ngày càng tăng x₁, x₂, …, xT.

Tại mỗi bước thời gian t, chúng ta thêm một lượng nhỏ nhiễu theo:

x_t = √(1 - β_t) * x_{t-1} + √(β_t) * ε

Trong đó:

  • β_t là một lịch trình phương sai kiểm soát lượng nhiễu được thêm vào ở mỗi bước
  • ε là nhiễu Gaussian ngẫu nhiên

Quá trình này tiếp tục cho đến khi xT gần như là nhiễu Gaussian thuần túy.

Về mặt toán học, chúng ta có thể mô tả điều này như một chuỗi Markov:

q(x_t | x_{t-1}) = N(x_t; √(1 - β_t) * x_{t-1}, β_t * I)

Trong đó N biểu thị một phân phối Gaussian.

Lịch trình β_t thường được chọn là nhỏ cho các bước thời gian đầu và tăng dần theo thời gian. Các lựa chọn phổ biến bao gồm lịch trình tuyến tính, cosine hoặc sigmoid.

Quá Trình Khuếch Tán Nghịch

Mục tiêu của một mô hình khuếch tán là học đảo ngược của quá trình này – để bắt đầu với nhiễu thuần túy xT và dần dần khử nhiễu để khôi phục một mẫu sạch x₀.

Chúng ta mô hình hóa quá trình nghịch này như:

p_θ(x_{t-1} | x_t) = N(x_{t-1}; μ_θ(x_t, t), σ_θ^2(x_t, t))

Trong đó μ_θ và σ_θ^2 là các hàm đã học (thường là mạng nơ-ron) được tham số hóa bởi θ.

Đổi mới then chốt là chúng ta không cần phải mô hình hóa rõ ràng toàn bộ phân phối nghịch. Thay vào đó, chúng ta có thể tham số hóa nó theo quá trình thuận, mà chúng ta đã biết.

Cụ thể, chúng ta có thể chỉ ra rằng giá trị trung bình tối ưu của quá trình nghịch μ* là:

μ* = 1/√(1 - β_t) * (x_t - β_t/√(1 - α_t) * ε_θ(x_t, t))

Trong đó:

  • α_t = 1 – β_t
  • ε_θ là một mạng dự đoán nhiễu đã học

Điều này cho chúng ta một mục tiêu đơn giản – huấn luyện một mạng nơ-ron ε_θ để dự đoán nhiễu đã được thêm vào ở mỗi bước.

Mục Tiêu Huấn Luyện

Mục tiêu huấn luyện cho mô hình khuếch tán có thể được suy ra từ suy luận biến phân. Sau một số đơn giản hóa, chúng ta đi đến một tổn thất L2 đơn giản:

L = E_t,x₀,ε [ ||ε - ε_θ(x_t, t)||² ]

Trong đó:

  • t được lấy mẫu đồng đều từ 1 đến T
  • x₀ được lấy mẫu từ dữ liệu huấn luyện
  • ε là nhiễu Gaussian được lấy mẫu
  • x_t được xây dựng bằng cách thêm nhiễu vào x₀ theo quá trình thuận

Nói cách khác, chúng ta đang huấn luyện mô hình để dự đoán nhiễu đã được thêm vào ở mỗi bước thời gian.

Kiến Trúc Mô Hình

Kiến trúc U-Net là trung tâm của bước khử nhiễu trong mô hình khuếch tán. Nó có cấu trúc mã hóa-giải mã với các kết nối bỏ qua giúp bảo tồn các chi tiết tinh tế trong quá trình tái tạo. Bộ mã hóa giảm kích thước đầu vào hình ảnh một cách tiến triển trong khi nắm bắt các đặc trưng cấp cao, và bộ giải mã tăng kích thước các đặc trưng đã mã hóa để tái tạo hình ảnh. Kiến trúc này đặc biệt hiệu quả trong các nhiệm vụ yêu cầu định vị chính xác, chẳng hạn như phân đoạn hình ảnh.

Mạng dự đoán nhiễu ε_θ có thể sử dụng bất kỳ kiến trúc nào ánh xạ đầu vào đến đầu ra có cùng chiều. Các kiến trúc kiểu U-Net là một lựa chọn phổ biến, đặc biệt cho các nhiệm vụ tạo hình ảnh.

Một kiến trúc điển hình có thể trông như:

 class DiffusionUNet(nn.Module): def __init__(self): super().__init__() # Downsampling self.down1 = UNetBlock(3, 64) self.down2 = UNetBlock(64, 128) self.down3 = UNetBlock(128, 256) # Bottleneck self.bottleneck = UNetBlock(256, 512) # Upsampling self.up3 = UNetBlock(512, 256) self.up2 = UNetBlock(256, 128) self.up1 = UNetBlock(128, 64) # Output self.out = nn.Conv2d(64, 3, 1) def forward(self, x, t): # Embed timestep t_emb = self.time_embedding(t) # Downsample d1 = self.down1(x, t_emb) d2 = self.down2(d1, t_emb) d3 = self.down3(d2, t_emb) # Bottleneck bottleneck = self.bottleneck(d3, t_emb) # Upsample u3 = self.up3(torch.cat([bottleneck, d3], dim=1), t_emb) u2 = self.up2(torch.cat([u3, d2], dim=1), t_emb) u1 = self.up1(torch.cat([u2, d1], dim=1), t_emb) # Output return self.out(u1) 

Các thành phần chính là:

  • Kiến trúc kiểu U-Net với các kết nối bỏ qua
  • Nhúng thời gian để điều kiện hóa trên bước thời gian
  • Độ sâu và chiều rộng linh hoạt

Thuật Toán Lấy Mẫu

Một khi chúng ta đã huấn luyện mạng dự đoán nhiễu ε_θ của mình, chúng ta có thể sử dụng nó để tạo ra các mẫu mới. Thuật toán l

Tôi đã dành năm năm qua để đắm mình trong thế giới đầy hấp dẫn của Học Máy và Học Sâu. Niềm đam mê và chuyên môn của tôi đã giúp tôi đóng góp vào hơn 50 dự án kỹ thuật phần mềm đa dạng, với trọng tâm đặc biệt vào AI/ML. Sự tò mò không ngừng của tôi cũng đã hướng tôi đến Xử lý Ngôn ngữ Tự nhiên, một lĩnh vực tôi rất mong muốn được khám phá sâu hơn.