2 điểm bởi GN⁺ 2024-03-12 | 1 bình luận | Chia sẻ qua WhatsApp

Mô hình khuếch tán từ đầu dưới một góc nhìn lý thuyết mới

  • Mô hình khuếch tán gần đây đã cho thấy kết quả ấn tượng trong mô hình hóa sinh, đặc biệt xuất sắc trong việc lấy mẫu từ các phân phối đa phương thức.
  • Mô hình khuếch tán không chỉ được áp dụng rộng rãi trong công cụ tạo ảnh từ văn bản Stable Diffusion mà còn cho thấy hiệu năng vượt trội trong nhiều lĩnh vực ứng dụng như tạo âm thanh/video/3D, thiết kế protein và lập kế hoạch đường đi cho robot.
  • Bài hướng dẫn này giới thiệu mô hình khuếch tán từ góc nhìn tối ưu hóa, bao quát cả lý thuyết lẫn mã nguồn để giải thích cách triển khai mô hình khuếch tán từ đầu.

Huấn luyện mô hình khuếch tán

  • Mô hình khuếch tán nhằm mục tiêu tạo ra các mẫu từ tập đã học được từ các ví dụ huấn luyện.
  • Việc huấn luyện mô hình khuếch tán bao gồm quy trình sau:
    1. Lấy mẫu x0 từ K, lấy mẫu mức nhiễu σ trong khoảng giữa σminσmax, và lấy mẫu nhiễu ϵ từ N(0,I).
    2. Tạo dữ liệu có nhiễu xσ=x0+σϵ.
    3. Dự đoán ϵ (hướng của nhiễu) từ trong khi tối thiểu hóa mất mát bình phương.
  • Huấn luyện thực tế được thực hiện thông qua hàm training_loop, hàm này lặp qua x0 của từng batch và lấy mẫu mức nhiễu sigma cùng vector nhiễu eps bằng generate_train_sample.

Lịch trình nhiễu

  • Trên thực tế, σ không được lấy mẫu đồng đều trong đoạn [σmin,σmax]; thay vào đó khoảng này được rời rạc hóa thành một lịch trình σ gồm N giá trị phân biệt.
  • Lớp Schedule đóng gói danh sách các sigmas khả dĩ và lấy mẫu từ danh sách này trong quá trình huấn luyện.
  • Bài viết sử dụng lịch trình log-tuyến tính và cung cấp biểu đồ so sánh lịch trình này với các lịch trình khác dưới các tham số mặc định.

Ví dụ đồ chơi

  • Trong bài hướng dẫn này, một bộ dữ liệu đồ chơi gồm các điểm được lấy mẫu từ một đường xoắn ốc được sử dụng.
  • Với bộ dữ liệu đơn giản này, bộ khử nhiễu được triển khai bằng perceptron nhiều lớp (MLP).
  • MLP nhận đầu vào là phép nối của x∈R2 và mức nhiễu σ, rồi dự đoán nhiễu ϵ∈R2.
  • Khi đã có đủ mọi thành phần cần thiết, có thể huấn luyện mô hình khuếch tán.

Diễn giải khử nhiễu như phép chiếu xấp xỉ

  • Quy trình huấn luyện khuếch tán học bộ khử nhiễu ϵθ(x,σ); trong bài báo, bộ khử nhiễu đã học được được diễn giải như một phép chiếu xấp xỉ lên đa tạp dữ liệu K.
  • Điều này tạo động lực cho việc đưa vào một mô hình xấp xỉ sai số tương đối để phân tích sự hội tụ của thuật toán lấy mẫu khuếch tán.

Hàm khoảng cách và hàm chiếu

  • Với tập K⊆Rn, hàm khoảng cách được định nghĩa là distK(x), còn phép chiếu của x∈Rn được định nghĩa là tập các điểm đạt được khoảng cách đó.
  • Nếu projK(x) là duy nhất, gradient của distK(x) sẽ hướng về phép chiếu duy nhất đó.

Bộ khử nhiễu lý tưởng

  • Với một mức nhiễu σ nhất định, bộ khử nhiễu lý tưởng hay tối ưu ϵ∗ là bộ tối thiểu hóa chính xác của hàm mất mát huấn luyện.
  • Khi dữ liệu là phân phối đều rời rạc trên một tập hữu hạn thuộc K, bộ khử nhiễu lý tưởng có biểu thức dạng đóng chính xác.

Mô hình sai số tương đối

  • Để phân tích sự hội tụ của thuật toán lấy mẫu khuếch tán, bài viết đưa vào mô hình sai số tương đối.
  • Mô hình này giả định rằng phép chiếu được bộ khử nhiễu dự đoán x−σϵθ(x,σ) sẽ xấp xỉ tốt projK(x) khi σ ước lượng tốt distK(x)/n đối với đầu vào x.

Lấy mẫu từ mô hình khuếch tán

  • Để thu được điểm x0 thuộc K bằng cách lấy mẫu từ bộ khử nhiễu đã học ϵθ(x,σ), bộ khử nhiễu ϵθ(xt,σt) với nhiễu xt và mức nhiễu σt sẽ dự đoán x0.

Diễn giải lấy mẫu khuếch tán như tối thiểu hóa khoảng cách

  • Vòng lặp lấy mẫu khuếch tán có thể được diễn giải như gradient descent trên hàm f(x)=12distK(x)2.
  • Cách chọn lịch trình σt sẽ quyết định số lượng và kích thước các bước gradient được thực hiện trong quá trình lấy mẫu.

Bộ lấy mẫu cải tiến thông qua ước lượng gradient

  • Từ ước lượng gradient, bài viết suy ra một bộ lấy mẫu mới hiệu quả hơn.
  • Bộ lấy mẫu này cho thấy hội tụ nhanh hơn bộ lấy mẫu DDIM hiện có.

Ví dụ quy mô lớn

  • Mã huấn luyện được cung cấp ở trên không chỉ có thể dùng cho bộ dữ liệu đồ chơi mà còn có thể dùng để huấn luyện mô hình khuếch tán ảnh từ đầu.
  • Mã lấy mẫu hoạt động mà không cần chỉnh sửa khi lấy mẫu từ các mô hình latent diffusion tiên tiến đã được huấn luyện trước.

Tài liệu khác

  • Bài viết cũng khuyến nghị các bài blog sau về mô hình khuếch tán:
    1. What are diffusion models? giới thiệu mô hình khuếch tán từ góc nhìn thời gian rời rạc, đảo ngược một quá trình Markov.
    2. Generative Modeling by Estimating Gradients of the Data Distribution giới thiệu mô hình khuếch tán từ góc nhìn thời gian liên tục, đảo ngược phương trình vi phân ngẫu nhiên.
    3. The Annotated Diffusion Model giải thích chi tiết cách triển khai mô hình khuếch tán bằng PyTorch.

Ý kiến của GN⁺

  • Bài hướng dẫn này giới thiệu mô hình khuếch tán từ góc nhìn tối ưu hóa và tạo tính dễ tiếp cận ngay cả với kỹ sư phần mềm mới vào nghề bằng cách kết nối nền tảng lý thuyết với việc triển khai mã nguồn thực tế.
  • Mô hình khuếch tán có thể áp dụng cho nhiều kiểu dữ liệu khác nhau, cho thấy tính hữu dụng của chúng trong nhiều lĩnh vực ứng dụng nơi việc lấy mẫu từ phân phối đa phương thức là quan trọng.
  • Bài hướng dẫn giải thích từng bước quá trình huấn luyện và lấy mẫu của mô hình khuếch tán, từ đó giúp hiểu sâu hơn về nguyên lý hoạt động và cách triển khai.
  • Quá trình huấn luyện và lấy mẫu của mô hình khuếch tán tương đối phức tạp, và để hiểu cũng như triển khai chúng cần có kiến thức cơ bản về machine learning và deep learning.
  • Khi áp dụng công nghệ này, cần cân nhắc các yếu tố như chi phí tính toán, chất lượng dữ liệu huấn luyện và độ phức tạp của mô hình; đổi lại, nó có tiềm năng tạo ra các mẫu tinh vi và đa dạng hơn.

1 bình luận

 
GN⁺ 2024-03-12
Ý kiến trên Hacker News
  • Tác giả cho biết: khi cố gắng hiểu diffusion model, họ nhận ra có thể đơn giản hóa đáng kể cả code lẫn toán học, và điều này đã dẫn đến việc viết bài blog cùng thư viện về diffusion. Họ sẵn sàng trả lời câu hỏi.

    • Tác giả đã phát hiện rằng trong quá trình tìm hiểu diffusion model, có thể đơn giản hóa code và toán học, từ đó viết một bài blog và một thư viện về chủ đề này.
  • Một bài viết xuất sắc khác, 'Diffusion Models From Scratch', đi sâu hơn vào các chi tiết toán học và đi kèm một bản triển khai dễ hiểu với chưa đến 500 dòng.

    • Bài viết 'Diffusion Models From Scratch' đào sâu hơn vào khía cạnh toán học của diffusion model và cung cấp một bản triển khai code ngắn gọn.
  • Thật tuyệt vì bài này có kèm code. Các bài báo về diffusion nổi tiếng là đầy công thức, nhưng code thì rõ ràng và dễ hiểu hơn với những người như chúng ta. Mọi bài báo lý thuyết nên đi kèm code triển khai tham chiếu.

    • Các bài báo về diffusion thường đầy các công thức phức tạp, nhưng code thì dễ hiểu và chính xác hơn. Ý kiến cho rằng các bài báo lý thuyết nên có code triển khai để tham khảo.
  • Muốn thấy phần mở rộng về diffusion transformer. Nó được dùng để vận hành Sora và các mô hình tạo video khác. Sẽ rất hay nếu kết hợp bài này với 'GPT From Scratch' để tạo một phần giới thiệu 'Diffusion Transformer From Scratch'.

    • Ý kiến này muốn có thêm thông tin về diffusion transformer, và cho rằng sẽ rất tốt nếu có một phần giới thiệu về cách xây dựng mô hình tạo video theo hướng đó.
  • Bài viết tốt, nhưng bỏ sót một đặc tính quan trọng: diffusion model mô hình hóa đạo hàm của log-xác suất (score function), và quá trình lấy mẫu diffusion tương tự động lực học Langevin. Điều này giải thích vì sao nó dễ huấn luyện hơn GAN.

    • Ý kiến này nhấn mạnh đặc tính quan trọng rằng diffusion model mô hình hóa score function và việc lấy mẫu diffusion giống với động lực học Langevin, từ đó giải thích vì sao nó dễ huấn luyện hơn GAN.
  • Rất thú vị. Nó gợi nhớ đến bài báo Iterative alpha-(de)Blending. Bài này cũng thiết lập một diffusion model đơn giản hơn về mặt khái niệm, rồi diễn đạt nó như một quá trình chiếu lặp gần đúng. Cách tiếp cận này cho phép các thí nghiệm thú vị hơn như phân tích lỗi khử nhiễu.

    • Có nhắc đến bài báo Iterative alpha-(de)Blending, cho rằng bài này trình bày cách đơn giản hóa diffusion model và biểu diễn nó như một quá trình chiếu lặp.
  • Có phải một trong những ý tưởng của diffusion là thu được lượng lớn dữ liệu huấn luyện không? Tức là đối chiếu các ảnh đã bị khuếch tán ngẫu nhiên với các ảnh chưa bị khuếch tán?

    • Đặt câu hỏi liệu một trong những ý tưởng của diffusion model có phải là tận dụng lượng lớn dữ liệu huấn luyện hay không.
  • Đây là một lời giải thích hay về lý thuyết. Có vẻ nó không phụ thuộc vào dataset. Tôi tò mò về các chi tiết cụ thể của việc tạo ảnh. Ví dụ, vì sao image generator lại khó tạo các phím đàn piano? Có vẻ cần biểu diễn ràng buộc tầm trung tốt hơn.

    • Nhận xét rằng phần giải thích lý thuyết rất tốt và có vẻ độc lập với dataset, đồng thời đặt câu hỏi về những khó khăn cụ thể trong tạo ảnh, đặc biệt là với các mẫu phức tạp như phím đàn piano.
  • Hãy nhớ rằng mọi mô hình machine learning đều là convolution.

    • Đưa ra ý kiến khẳng định rằng mọi mô hình machine learning đều dựa trên convolution.
  • Có một hội kín dùng phần bình luận của bài này để gửi thông điệp bí mật, nên đừng google.

    • Đưa ra một tuyên bố mang tính châm biếm rằng có một hội kín trao đổi thông điệp bí mật thông qua phần bình luận.