2 คะแนน โดย GN⁺ 2024-03-12 | 1 ความคิดเห็น | แชร์ทาง WhatsApp

โมเดลดิฟฟิวชันจากสแครตช์ในมุมมองเชิงทฤษฎีแบบใหม่

  • โมเดลดิฟฟิวชันได้แสดงผลลัพธ์ที่น่าประทับใจในการสร้างแบบจำลองเชิงกำเนิดในช่วงหลังมานี้ โดยเฉพาะอย่างยิ่งมีความโดดเด่นในการสุ่มตัวอย่างจากการแจกแจงแบบหลายโหมด
  • โมเดลดิฟฟิวชันไม่เพียงถูกใช้อย่างแพร่หลายในเครื่องมือสร้างข้อความเป็นภาพอย่าง Stable Diffusion เท่านั้น แต่ยังแสดงประสิทธิภาพยอดเยี่ยมในงานประยุกต์หลากหลาย เช่น การสร้างเสียง/วิดีโอ/3D การออกแบบโปรตีน และการวางแผนเส้นทางหุ่นยนต์
  • บทสอนนี้แนะนำโมเดลดิฟฟิวชันจากมุมมองของการทำ optimization และครอบคลุมทั้งทฤษฎีและโค้ดเพื่ออธิบายวิธีนำโมเดลดิฟฟิวชันไปใช้งานจริงตั้งแต่เริ่มต้น

การฝึกโมเดลดิฟฟิวชัน

  • โมเดลดิฟฟิวชันมีเป้าหมายเพื่อสร้างตัวอย่างจากเซตที่เรียนรู้จากตัวอย่างฝึก
  • การฝึกโมเดลดิฟฟิวชันประกอบด้วยกระบวนการดังนี้:
    1. สุ่มตัวอย่าง x0 จาก K, สุ่มระดับ noise σ ระหว่าง σmin และ σmax และสุ่ม noise ϵ จาก N(0,I)
    2. สร้างข้อมูลที่มี noise เป็น xσ=x0+σϵ
    3. ทำนาย ϵ (ทิศทางของ noise) จาก xσ พร้อมลดค่า squared loss ให้ต่ำที่สุด
  • การฝึกจริงดำเนินการผ่านฟังก์ชัน training_loop ซึ่งวนซ้ำ x0 ของแต่ละ batch และใช้ generate_train_sample เพื่อสุ่มระดับ noise sigma และเวกเตอร์ noise eps

ตารางกำหนด noise

  • ในทางปฏิบัติ σ ไม่ได้ถูกสุ่มแบบสม่ำเสมอจากช่วง [σmin,σmax] แต่ช่วงนี้จะถูกทำให้ไม่ต่อเนื่องเป็นค่า N ค่าแยกกันที่เรียกว่า ตาราง σ
  • คลาส Schedule ทำหน้าที่ห่อหุ้มลิสต์ของ sigmas ที่เป็นไปได้ และสุ่มจากลิสต์นี้ระหว่างการฝึก
  • ใช้ตารางแบบ log-linear และมีกราฟเปรียบเทียบตารางนี้กับตารางแบบอื่นภายใต้พารามิเตอร์ตั้งต้น

ตัวอย่างของเล่น

  • ในบทสอนนี้ใช้ชุดข้อมูลของเล่นที่ประกอบด้วยจุดซึ่งสุ่มมาจากรูปเกลียว
  • สำหรับชุดข้อมูลง่าย ๆ นี้ มีการใช้งาน denoiser ด้วย multilayer perceptron (MLP)
  • MLP รับอินพุตเป็นการเชื่อมกันของ x∈R2 และระดับ noise σ แล้วทำนาย noise ϵ∈R2
  • เมื่อมีองค์ประกอบสำคัญครบทั้งหมดแล้ว ก็สามารถฝึกโมเดลดิฟฟิวชันได้

การตีความ denoising ว่าเป็นการฉายเชิงประมาณ

  • กระบวนการฝึกดิฟฟิวชันเรียนรู้ denoiser ϵθ(x,σ) และในบทความได้ตีความ denoiser ที่เรียนรู้แล้วว่าเป็นการฉายเชิงประมาณไปยัง data manifold K
  • สิ่งนี้เป็นแรงจูงใจให้มีการนำแบบจำลองการประมาณความคลาดเคลื่อนสัมพัทธ์มาใช้เพื่อวิเคราะห์การลู่เข้าของอัลกอริทึมการสุ่มตัวอย่างแบบดิฟฟิวชัน

ฟังก์ชันระยะทางและฟังก์ชันฉาย

  • สำหรับเซต K⊆Rn, ฟังก์ชันระยะทาง ถูกนิยามเป็น distK(x) และ การฉาย ของ x∈Rn ถูกนิยามเป็นเซตของจุดที่ทำให้ได้ระยะทางนี้
  • หาก projK(x) มีค่าเดียว gradient ของ distK(x) จะชี้ไปยังการฉายที่เป็นเอกลักษณ์นั้น

denoiser ในอุดมคติ

  • denoiser ในอุดมคติหรือเหมาะสมที่สุด ϵ∗ สำหรับระดับ noise σ ที่กำหนด คือค่าที่ทำให้ฟังก์ชัน loss ของการฝึกลดลงต่ำสุดอย่างแท้จริง
  • เมื่อข้อมูลเป็นการแจกแจงสม่ำเสมอแบบไม่ต่อเนื่องบนเซตจำกัดเหนือ K, denoiser ในอุดมคติจะมีรูปแบบ closed-form ที่แน่นอน

แบบจำลองความคลาดเคลื่อนสัมพัทธ์

  • มีการนำแบบจำลองความคลาดเคลื่อนสัมพัทธ์มาใช้เพื่อวิเคราะห์การลู่เข้าของอัลกอริทึมการสุ่มตัวอย่างแบบดิฟฟิวชัน
  • แบบจำลองนี้ตั้งสมมติฐานว่าการฉายที่ denoiser ทำนายไว้ x−σϵθ(x,σ) จะประมาณ projK(x) ได้ดี เมื่อ σ ประมาณค่า distK(x)/n ได้ดีสำหรับอินพุต x

การสุ่มตัวอย่างจากโมเดลดิฟฟิวชัน

  • เพื่อให้ได้จุด x0 ที่อยู่ใน K โดยการสุ่มจาก denoiser ที่เรียนรู้แล้ว ϵθ(x,σ), denoiser ϵθ(xt,σt) ที่รับ noise xt และระดับ noise σt จะทำนาย x0

การตีความการสุ่มตัวอย่างแบบดิฟฟิวชันว่าเป็นการลดระยะทาง

  • การวนซ้ำในการสุ่มตัวอย่างแบบดิฟฟิวชันสามารถตีความได้ว่าเป็น gradient descent บนฟังก์ชัน f(x)=12distK(x)2
  • วิธีเลือกตาราง σt เป็นตัวกำหนดจำนวนและขนาดของขั้น gradient ที่ใช้ระหว่างการสุ่มตัวอย่าง

ตัวสุ่มตัวอย่างที่ปรับปรุงแล้วผ่านการประมาณ gradient

  • มีการอนุมานตัวสุ่มตัวอย่างใหม่ที่มีประสิทธิภาพจากการประมาณ gradient
  • ตัวสุ่มตัวอย่างนี้แสดงการลู่เข้าที่เร็วกว่า DDIM sampler เดิม

ตัวอย่างขนาดใหญ่

  • โค้ดฝึกที่ให้ไว้ข้างต้นสามารถใช้ฝึกโมเดลดิฟฟิวชันภาพตั้งแต่สแครตช์ได้ ไม่ใช่แค่กับชุดข้อมูลของเล่นเท่านั้น
  • โค้ดสำหรับการสุ่มตัวอย่างยังทำงานได้โดยไม่ต้องแก้ไขเมื่อใช้สุ่มจาก latent diffusion model ระดับแนวหน้าที่ฝึกไว้ล่วงหน้า

แหล่งข้อมูลอื่น ๆ

  • ขอแนะนำบล็อกโพสต์ต่อไปนี้เกี่ยวกับโมเดลดิฟฟิวชันด้วย:
    1. What are diffusion models? แนะนำโมเดลดิฟฟิวชันจากมุมมองเวลาไม่ต่อเนื่องของการย้อนกลับกระบวนการมาร์คอฟ
    2. Generative modeling by estimating gradients of the data distribution แนะนำโมเดลดิฟฟิวชันจากมุมมองเวลาแบบต่อเนื่องของการย้อนกลับสมการเชิงอนุพันธ์สุ่ม
    3. The annotated diffusion model อธิบายการใช้งานโมเดลดิฟฟิวชันด้วย PyTorch อย่างละเอียด

ความเห็นของ GN⁺

  • บทสอนนี้แนะนำโมเดลดิฟฟิวชันจากมุมมองของ optimization และอธิบายโดยเชื่อมพื้นฐานเชิงทฤษฎีกับการลงมือเขียนโค้ดจริง ทำให้วิศวกรซอฟต์แวร์ระดับเริ่มต้นเข้าถึงได้
  • โมเดลดิฟฟิวชันสามารถประยุกต์ใช้กับข้อมูลหลายประเภท ซึ่งสะท้อนถึงความเหมาะสมสำหรับงานหลากหลายด้านที่การสุ่มตัวอย่างจากการแจกแจงแบบหลายโหมดมีความสำคัญ
  • บทสอนอธิบายกระบวนการฝึกและการสุ่มตัวอย่างของโมเดลดิฟฟิวชันแบบทีละขั้น ช่วยให้เข้าใจหลักการทำงานและวิธีนำไปใช้งานได้อย่างลึกซึ้ง
  • กระบวนการฝึกและการสุ่มตัวอย่างของโมเดลดิฟฟิวชันค่อนข้างซับซ้อน และการทำความเข้าใจรวมถึงการนำไปใช้งานจำเป็นต้องมีความรู้พื้นฐานด้าน machine learning และ deep learning
  • เมื่อนำเทคโนโลยีนี้มาใช้ ควรพิจารณาปัจจัยอย่างต้นทุนการคำนวณ คุณภาพของข้อมูลฝึก และความซับซ้อนของโมเดล ซึ่งทั้งหมดนี้ส่งผลต่อศักยภาพในการสร้างตัวอย่างที่ประณีตและหลากหลายยิ่งขึ้น

1 ความคิดเห็น

 
GN⁺ 2024-03-12
ความคิดเห็นบน Hacker News
  • ผู้เขียนกล่าวว่า ระหว่างพยายามทำความเข้าใจ diffusion model พบว่าสามารถทำให้ทั้งโค้ดและคณิตศาสตร์เรียบง่ายลงได้มาก จึงได้เขียนทั้งบล็อกโพสต์และไลบรารี diffusion ขึ้นมา พร้อมยินดีตอบคำถาม

    • ผู้เขียนค้นพบระหว่างทำความเข้าใจ diffusion model ว่าสามารถลดความซับซ้อนของโค้ดและคณิตศาสตร์ได้ จึงเขียนบล็อกโพสต์และไลบรารีเกี่ยวกับเรื่องนี้
  • อีกบทความที่ยอดเยี่ยมคือ 'Diffusion Models From Scratch' ซึ่งลงรายละเอียดทางคณิตศาสตร์มากกว่า และมาพร้อม implementation ที่เข้าใจง่ายยาวไม่ถึง 500 บรรทัด

    • บทความ 'Diffusion Models From Scratch' เจาะลึกเนื้อหาคณิตศาสตร์ของ diffusion model มากขึ้น และมีโค้ด implementation แบบกระชับให้ดู
  • ชอบที่บทความนี้มีโค้ดรวมอยู่ด้วย งานวิจัยด้าน diffusion ขึ้นชื่อเรื่องสมการจำนวนมาก แต่สำหรับคนอย่างพวกเรา โค้ดชัดเจนและเข้าใจง่ายกว่า งานวิจัยเชิงทฤษฎีทุกชิ้นควรมีโค้ดอ้างอิงแนบมาด้วย

    • แม้งานวิจัยเกี่ยวกับ diffusion จะเต็มไปด้วยสมการซับซ้อน แต่โค้ดนั้นเข้าใจง่ายและตรงไปตรงมามากกว่า จึงมีความเห็นว่างานวิจัยเชิงทฤษฎีควรมี implementation อ้างอิงให้เสมอ
  • อยากเห็นการต่อยอดไปยัง diffusion transformer ซึ่งถูกใช้ขับเคลื่อน Sora และโมเดลสร้างวิดีโออื่น ๆ ถ้านำบทความนี้ไปรวมกับ 'GPT From Scratch' แล้วทำเป็นบทนำ 'Diffusion Transformer From Scratch' ก็น่าจะดี

    • อยากได้ข้อมูลเพิ่มเติมเกี่ยวกับ diffusion transformer และคิดว่าน่าจะดีถ้ามีบทนำอธิบายการสร้างโมเดลสร้างวิดีโอในลักษณะนี้
  • เป็นบทความที่ดี แต่พลาดคุณสมบัติสำคัญไป คือ diffusion model ทำการจำลองอนุพันธ์ของ log probability หรือ score function และการสุ่มตัวอย่างแบบ diffusion มีความคล้ายกับ Langevin dynamics ซึ่งช่วยอธิบายว่าทำไมจึงฝึกได้ง่ายกว่า GAN

    • ความเห็นนี้เน้นว่าประเด็นสำคัญคือ diffusion model จำลอง score function และการ sampling แบบ diffusion คล้ายกับ Langevin dynamics ซึ่งอธิบายได้ว่าทำไมฝึกง่ายกว่า GAN
  • น่าสนใจมาก ทำให้นึกถึงงานวิจัย Iterative alpha-(de)Blending ซึ่งก็ตั้ง diffusion model ที่เรียบง่ายกว่าในเชิงแนวคิด และเขียนเป็นกระบวนการฉายภาพแบบวนซ้ำคร่าว ๆ วิธีนี้เปิดทางให้ทำการทดลองที่น่าสนใจยิ่งขึ้น เช่น การวิเคราะห์ข้อผิดพลาดของการลบ noise

    • มีการกล่าวถึงงานวิจัย Iterative alpha-(de)Blending ว่านำเสนอวิธีทำให้ diffusion model เรียบง่ายขึ้น และอธิบายเป็นกระบวนการฉายภาพแบบวนซ้ำ
  • หนึ่งในแนวคิดของ diffusion คือการได้มาซึ่งข้อมูลฝึกจำนวนมหาศาลใช่หรือไม่? กล่าวคือ นำภาพที่ถูกทำให้ diffusion แบบสุ่มมาเทียบกับภาพที่ยังไม่ถูก diffusion ใช่ไหม?

    • มีการตั้งคำถามว่าแนวคิดหนึ่งของ diffusion model คือการใช้ข้อมูลฝึกจำนวนมากหรือไม่
  • คำอธิบายทฤษฎีดีมาก ดูเหมือนจะไม่ขึ้นกับ dataset แต่อยากรู้เรื่องเฉพาะของการสร้างภาพ เช่น ทำไม image generator ถึงสร้างคีย์เปียโนได้ยาก ดูเหมือนว่าน่าจะต้องมีการแทนข้อจำกัดระยะกลางที่ดีกว่านี้

    • ชื่นชมว่าคำอธิบายทฤษฎีนั้นดีและไม่ผูกกับ dataset พร้อมตั้งคำถามถึงความยากเฉพาะด้านในการสร้างภาพ โดยเฉพาะลวดลายซับซ้อนอย่างคีย์เปียโน
  • จำไว้ว่าโมเดล machine learning ทั้งหมดคือ convolution

    • แสดงความคิดเห็นเชิงฟันธงว่าโมเดล machine learning ทั้งหมดมีพื้นฐานเป็น convolution
  • มีสมาคมลับที่ใช้คอมเมนต์ในโพสต์นี้ส่งข้อความลับถึงกัน อย่าไปค้นใน Google ล่ะ

    • เป็นคำกล่าวเชิงเสียดสีว่ามีสังคมลับใช้คอมเมนต์เหล่านี้สื่อสารข้อความลับกัน