Sau một thời gian tìm hiểu và làm việc với mô hình Diffusion, mình viết bài này với hy vọng bài viết này sẽ có ích phần nào với các bạn muốn tìm hiểu về Diffusion Models.
Một số từ tạm dịch
- Diffusion: khuếch tán
- Quasi-static process: quá trình chuẩn tĩnh
- Thermodynamic Equilibrium: cân bằng nhiệt động học (NĐH)
- Forward Diffusion Process: quá trình khuếch tán thuận
- Reverse Diffusion Process: quá trình đảo ngược
- Transition kernel: nhân biến đổi.
Lời mở đầu
Diffusion Models đứng sau một số sản phẩm đình đám trong lĩnh vực sinh ảnh. Ứng dụng của loại mô hình này đã được mở rộng sang Object Detection, Image Segmentation,... Danh sách này nhiều khả năng sẽ còn mở rộng hơn nữa. Bài viết này sẽ giới thiệu từ ý tưởng cơ bản, những khái niệm (cực kỳ đơn giản) trong nhiệt động học đã truyền cảm hứng cho Diffusion Models trong học sâu. Sau đó, ta sẽ đi đến lý thuyết và cách huấn luyện Diffusion Models trong học sâu.
I. Từ Nhiệt động học
1. Diffusion là gì?
Khuếch tán là hiện tượng chuyển động của các phân tử (hoặc ion, năng lượng...) từ vùng có mật độ cao hơn sang vùng có mật độ thấp hơn.
2. Thermodynamic Equilibrium là gì?
Bản thân từ Equilibrium mang nghĩa là cân bằng. Một hệ (system) để được gọi là Cân bằng nhiệt động học cần đồng thời đạt được các điều kiện:
- Cân bằng về nhiệt
- Cân bằng cơ học
- Cân bằng hoá học
- Cân bằng pha
Hình 2: Hai hệ gồm khí bên trong bình. Bên trái: hệ cân bằng nhiệt. Bên phải: hệ không cân bằng nhiệt.
Chúng ta không cần thiết phải hiểu về 4 yếu tố kể trên. Nhưng sẽ tốt hơn nếu chúng ta hình dung được những yếu tố này. Ví dụ, xét đến yếu tố đầu tiên là Cân bằng nhiệt. Một hệ được gọi là Cân bằng nhiệt nếu nhiệt độ tại mọi điểm của hệ là giống nhau. Hình 2 minh hoạ một hệ cân bằng nhiệt(bên trái) và một hệ không cân bằng nhiệt (bên phải). Ta có thể thấy ở hình bên trái nhiệt độ tại các điểm của hệ khá "giống" nhau, còn ở hình bên phải nhiệt độ ở các điểm là rất khác nhau.
3. Quasi-static process
Như vậy ta đã biết một hệ cân bằng NĐH phải cân bằng về nhiều mặt. Xét một hệ cân bằng NĐH sử dụng các hạt đặt trên đỉnh pít tông để nén khí như trong hình 3. Giả sử ban đầu hệ có thể tích là là áp suất là . Mỗi cặp (, ) sẽ xác định một trạng thái.
Giả sử các hạt này là rất nhẹ và có rất nhiều hạt trên đỉnh pít tông. Nếu ta lấy ra một hạt trên đỉnh pít tông. Thể tích khí ở bên dưới sẽ nới rộng ra một chút là đạt được trạng thái cân bằng mới (, ). Lấy ta tiếp tục việc lấy ra dần từng hạt một cách chậm rãi ta sẽ thu được (, ), (, ), ...(, ). Với T là số lần lấy hạt ra, và các trạng thái (, ) đều cân bằng NĐH (). Quá trình chuyển từ trạng thái (, ) sang (, ) cực kỳ chậm như vậy là quasi-static.
Lý do người ta quan tâm đến quá trình quasi-static là tất cả Quá trình có thể đảo ngược đều là quá trình quasi-static. Nếu ta thêm lại dần dần các hạt đã lấy ra (từng chút từng chút một như lúc lấy ra) ta sẽ thu được các trạng thái trung gian. Trong điều kiện lý tưởng (các hạt vô cùng nhẹ, không có ma sát, thả không vận tốc ban đầu,...), các trạng thái trung gian sẽ chính là đảo ngược quá trình lấy ra (, ), (, ),...(, ), (, ). Quá trình đảo ngược này được minh hoạ trong hình 4.
II. Diffusion trong Deep Learning
Trong phần này chúng ta sẽ tìm hiểu cách ý tưởng Diffusion trong Deep Learning được triển khai.
1. Ý tưởng tổng quan
Ý tưởng cơ bản của Diffusion trong Deep Learning là phá hủy cấu trúc của dữ liệu một cách có hệ thống và cực kỳ chậm thông qua Quá trình khuếch tán thuận. Quá trình này có tính lặp lại và được minh họa ở hình 6. Sau đó chúng ta sẽ học cách để đảo ngược quá trình này. Quá trình đảo ngược được minh họa ở hình 7.
Cụ thể hơn, chúng ta sẽ định nghĩa quá trình khuếch tán thuận. Quá trình này chuyển phân phối phân phối dữ liệu (vốn phức tạp) sang một phân phối đơn giản và có thể dễ dàng làm việc (như lấy mẫu). Sau đó ta sẽ học cách để đảo ngược quá trình này. Nếu làm được điều này, Quá trình đảo ngược sẽ được sử dụng để sinh dữ liệu. Trong hai quá trình này, chúng ta chỉ cần sử dụng mạng neural để học cách thực hiện quá trình đảo ngược. Quá trình thuận hoàn toàn được cố định (fully defined, fixed) trước hoặc chỉ cần học một số biến phụ. Trong bài viết này, chúng ta sẽ cố định hoàn toàn Quá trình thuận.
Hy vọng đến đây chúng ta đã hình dung được phần nào ý tưởng diffusion trong Deep Learning. Sau đây chúng ta sẽ đi vào tìm hiểu chi tiết của hai quá trình trên.
2. Quá trình khuếch tán thuận
Quá trình thuận xuất phát từ phân phối của dữ liệu và chuyển đổi dần dần thành phân phối có thể dễ dàng làm việc hơn . Phân bố của được chọn trước là một prior.
Trong hình 8, ở quá trình thuận, là dữ liệu; là các biến ẩn (latent) có cùng chiều với , T là số bước biến đổi. Quá trình khuếch tán được mô tả bằng một chuỗi Markov, nghĩa là trạng thái chỉ phụ thuộc vào . Nhân biến đổi (transition kernel) được chọn sao cho:
Với là tốc độ khuếch tán ở bước t. Đặt , và qua các phép biến đổi, ta có:
Đây là một tính chất quan trọng của quá trình thuận. Tính chất này trên cho phép ta lấy mẫu được ở một bước t bất kỳ một cách trực tiếp (mà không phải đi từ bước 0, 1, 2,... rồi mới đến t). Phần biến đổi để thu được công thức trên các bạn có thể xem ở đây.
Phân phối của quá trình thuận thu được bằng cách bắt đầu từ và áp dụng nhân biến đổi bên trên qua T bước là:
Như đã nói ở trên, quá trình khuếch tán thuận mà chúng ta lựa chọn đã hoàn toàn được cố định. Như vậy chúng ta cần chọn trước các giá trị , còn được gọi là lịch trình phương sai. Các giá trị này cần thoả mãn hai điều kiện:
- Tổng lượng nhiễu phải đủ lớn giúp chuyển phân phối dữ liệu trở thành nhiễu đẳng hướng Gaussian.
- Lượng nhiễu ở mỗi bước phải đủ nhỏ để có thể đảo ngược được. Điều này tương tự như điều kiện để một quá trình là quasi-static ở phần I.
Giá trị của T phải được chọn trước. Để thoả mãn hai điều kiện trên thì T bắt buộc phải đủ lớn. T càng lớn thì ta có thể làm cho càng nhỏ. Để tóm tắt lại phần này mình xin trích lại slide của tác giả paper ở hình 9.
3. Quá trình đảo ngược
Quá trình đảo ngược cũng là một chuỗi Markov có những trạng thái như quá trình thuận nhưng theo chiều ngược lại, như được thể hiện ở hình 8. Quá trình đảo ngược còn được gọi quá trình sinh. Phân phối của quá trình sinh có được qua T bước áp dụng nhân biến đổi (tương tự quá trình thuận):
Với . Để đảo ngược được chúng ta chỉ cần xác định nhân biến đổi ngược và biến đổi T bước để thu được . Vì nhỏ nên ta biết rằng nhân biến đổi này cũng là một phân phối Gaussian. Còn mean và covariance của phân phối này thì chúng ta có thể sử dụng mạng neural để ước lượng. Ta có thể viết nhân biến đổi ngược dưới dạng tổng quát như sau:
Chi phí tính toán của Diffusion Model chủ yếu đến từ chi phí tính toán của hai mô hình và . Để tóm tắt lại phần này, mình lại xin trích slide của tác giả ở hình 10.
Tips: hãy chú ý rằng các phân phối liên quan đến quá trình thuận là , với quá trình đảo ngược là
4. Huấn luyện
4.1 Hàm mục tiêu
Như đã nói ở trên với đủ nhỏ, là phân bố Gaussian. Chúng ta không thể dễ dàng ước lượng được phân phối này vì nó yêu cầu sử dụng cả tập dữ liệu. Tuy nhiên chúng ta có thể xác định được phân phối này khi đặt điều kiện trên bằng cách áp dụng quy tắc Bayes. Ta có . Qua các phép biến đổi ta có thể viết lại như sau:
với và với
Chi tiết phần biến đổi để ra được công thức trên các bạn có thể xem thêm ở đây.
Việc huấn luyện được thực hiện bằng cách tối ưu chặn của Negative Log Likelihood:
Hàm mục tiêu này có thể được viết lại thành tổng của các thành phần KL-divergence và entropy để có thể tính toán dễ dàng.
Trong đó, là hằng số vì quá trình thuận không có gì để học cả nên ta có thể bỏ qua thành phần này.
Để tối ưu , tác giả sử dụng một bộ decoder riêng, nhân biến đổi lúc này được tính theo cách riêng, bài viết này sẽ không nói kỹ về phần này.
Để tối ưu , chúng ta cần một mạng neural học xấp xỉ . Vì là hằng số nên chúng ta chỉ cần huấn luyện để dự doán . Nhưng thay vì dự đoán trực tiếp , để đơn giản hơn, chúng ta có thể chỉ cần dự đoán vì các thành phần khác của đã biết:
Như vậy ta đã quy việc giải bài toán sinh dữ liệu về bài toán hồi quy. Đối với các thành phần KL-divergence, việc tính toán có thể thực hiện khá đơn giản vì các phân phối đều là Gaussian.
4.2 Kiến trúc mô hình
Nhìn chung Diffusion Models không cần kiến trúc chuyện dụng như Flow Models. Do yêu cầu về chiều của đầu ra phải giống với chiều của đầu vào, các mạng tương tự U-Net thường được sử dụng. Những mô hình này có một vài thay đổi so với thông thường để xét đến cả yếu tố bước thời gian (t). Một cách làm đơn giản là mã hoá thông tin thời gian dưới dạng position embedding có dạng hình sin rồi thêm vào mỗi khối residual.
Tra cứu (sẽ cập nhật sau)
Phần cuối cũng bài viết cung cấp mục tra cứu và giải thích các ký hiệu phổ biến được sử dụng.
Lời kết
Trong bài này mình đã trình bày cơ bản về Diffusion Models qua góc nhìn của mình. Phần kết nối giữa Khuếch tán trong Nhiệt động học và trong Học sâu mình không trình bày nhiều vì muốn các bạn có hình dung riêng. Hy vọng các bạn thấy bài viết này hữu ích. Nếu có vấn đề hay thắc mình gì đừng ngại cho mình biết ở phần comment nhé. Cảm ơn các bạn đã đọc bài. Hẹn gặp lại ở bài viết sau về chủ đề Diffusion Models.