Skip to content

Mô hình khuếch tán (diffusion model)

Spread the love

Mô hình khuếch tán (diffusion model) là một loại mô hình taọ sinh, có khả năng tạo ra dữ liệu mới, chẳng hạn như hình ảnh, bằng cách học cách đảo ngược một quá trình thêm nhiễu. Hãy tưởng tượng bạn lấy một bức ảnh rõ nét, sau đó dần dần thêm nhiễu vào theo nhiều bước nhỏ cho đến khi nó trở thành nhiễu hoàn toàn. Một mô hình khuếch tán được huấn luyện để thành thạo việc đảo ngược quá trình này. Sau khi được huấn luyện, nó có thể bắt đầu với nhiễu ngẫu nhiên và từng bước “khử nhiễu” để tạo ra một hình ảnh hoàn toàn mới và chân thực. 🧠


Quá trình Thuận (Thêm nhiễu)

Phần đầu tiên này là một quy trình toán học cố định—không có gì được học ở đây. Mục tiêu là lấy một hình ảnh thực từ tập dữ liệu của bạn và thêm dần một lượng nhỏ nhiễu Gaussian qua một chuỗi các bước thời gian, T.

  1. Bắt đầu với một hình ảnh sạch (x_0) từ dữ liệu huấn luyện của bạn.
  2. Xác định một “lịch trình phương sai”. Lịch trình này, \beta_1, \beta_2, …, \beta_T, quyết định lượng nhiễu được thêm vào ở mỗi bước.
  3. Thêm nhiễu. Mặc dù có thể thực hiện từng bước, một thuộc tính quan trọng cho phép chúng ta nhảy thẳng đến bất kỳ bước thời gian t nào và có được một hình ảnh nhiễu x_t từ ảnh gốc x_0.

Công thức cho bước nhảy này là:
x_t = \sqrt{\bar{\alpha}_t} x_0 + \sqrt{1 - \bar{\alpha}_t} \epsilon

  • \epsilon là nhiễu ngẫu nhiên.
  • \sqrt{\bar{\alpha}_t} hoạt động như một “tỷ lệ tín hiệu” làm mờ dần hình ảnh gốc.
  • \sqrt{1 - \bar{\alpha}_t} hoạt động như một “tỷ lệ nhiễu” để thêm nhiễu vào.

Sau nhiều bước, tín hiệu của hình ảnh gốc gần như biến mất hoàn toàn, chỉ còn lại thứ trông giống như nhiễu thuần túy.


Quá trình Nghịch (Học cách khử nhiễu)

Đây là nơi điều kỳ diệu xảy ra. Bạn huấn luyện một mạng nơ-ron để nhìn vào một hình ảnh nhiễu ở bất kỳ bước thời gian nào và dự đoán chính xác nhiễu đã được thêm vào nó. Kiến trúc mạng phổ biến nhất cho nhiệm vụ này là U-Net.

Vòng lặp Huấn luyện

Dưới đây là tóm tắt đơn giản về thuật toán huấn luyện:

  1. Lấy một hình ảnh: Chọn một hình ảnh ngẫu nhiên x_0 từ tập dữ liệu của bạn.
  2. Chọn một bước thời gian: Chọn một bước thời gian ngẫu nhiên t.
  3. Tạo đầu vào nhiễu: Thêm một lượng nhiễu ngẫu nhiên \epsilon tương ứng để tạo ra hình ảnh nhiễu x_t bằng công thức từ quá trình thuận.
  4. Dự đoán nhiễu: Đưa hình ảnh nhiễu x_t và bước thời gian t vào mô hình U-Net của bạn. Công việc duy nhất của mô hình là đưa ra dự đoán về nhiễu đã được thêm vào, \epsilon_\theta(x_t, t).
  5. Tính toán hàm mất mát (loss): “Loss” là sai số giữa nhiễu thực tế (\epsilon) bạn đã thêm ở bước 3 và nhiễu dự đoán (\epsilon_\theta) từ mô hình. Thường được tính bằng Trung bình bình phương sai số (MSE).
    L = || \epsilon - \epsilon_\theta(x_t, t) ||^2
  6. Cập nhật mô hình: Các trọng số của mô hình được điều chỉnh bằng cách sử dụng lan truyền ngược để giảm thiểu sai số này, làm cho dự đoán nhiễu của nó chính xác hơn một chút.

Vòng lặp này được lặp lại hàng triệu lần. Dần dần, mô hình trở thành chuyên gia trong việc phân tách và dự đoán nhiễu từ bất kỳ hình ảnh nào ở bất kỳ bước thời gian nào.


Suy luận (Tạo ra hình ảnh mới)

Khi mô hình đã được huấn luyện, bạn có thể sử dụng nó để tạo ra những hình ảnh hoàn toàn mới.

  1. Bắt đầu với nhiễu thuần túy: Tạo một tensor chứa nhiễu Gaussian ngẫu nhiên, mà chúng ta sẽ gọi là x_T.
  2. Lặp ngược: Bắt đầu từ bước thời gian cuối cùng T, bạn lặp ngược xuống 1. Trong mỗi bước:
    • Mô hình nhìn vào hình ảnh hiện tại x_t và dự đoán nhiễu bên trong nó.
    • Dự đoán nhiễu này được sử dụng để lùi lại một bước nhỏ, tính toán ra một hình ảnh sạch hơn một chút, x_{t-1}.
  3. Nhận kết quả cuối cùng: Sau khi hoàn thành tất cả các bước, hình ảnh cuối cùng x_0 là mẫu mới được tạo ra của bạn. 🎨

Quá trình tinh chỉnh lặp đi lặp lại này giống như một nhà điêu khắc bắt đầu với một khối đá cẩm thạch (nhiễu ngẫu nhiên) và từ từ đẽo gọt (khử nhiễu) cho đến khi một hình thù rõ ràng (hình ảnh cuối cùng) hiện ra.


Discover more from Cùng Học Cùng Mơ

Subscribe to get the latest posts sent to your email.

Leave a Reply

Your email address will not be published. Required fields are marked *

error: Content is protected !!