เอ็กซ์เลร่า8

บทนำสู่แบบจำลองการแพร่กระจายสำหรับแมชชีนเลิร์นนิง

บทความนี้ถูกเผยแพร่เมื่อวันที่ การประกอบAI และเผยแพร่ซ้ำไปยัง TOPBOTS โดยได้รับอนุญาตจากผู้เขียน.

แบบจำลองการแพร่กระจายเป็นแบบจำลองกำเนิดที่ได้รับความนิยมอย่างมากในช่วงหลายปีที่ผ่านมา และด้วยเหตุผลที่ดี เอกสารน้ำเชื้อจำนวนหนึ่งออกในปี 2020 คนเดียว ได้แสดงให้โลกเห็นว่าโมเดลการแพร่กระจายมีความสามารถเช่นไร เช่น เอาชนะ GANs[6] เกี่ยวกับการสังเคราะห์ภาพ ล่าสุด ผู้ปฏิบัติงานจะได้เห็นรูปแบบการแพร่กระจายที่ใช้ใน DALL-E2, โมเดลการสร้างภาพของ OpenAI ออกเมื่อเดือนที่แล้ว

ภาพต่างๆ ที่สร้างโดย DALL-E 2 (แหล่ง).

ด้วยคลื่นแห่งความสำเร็จล่าสุดโดยโมเดลการแพร่กระจาย ผู้ปฏิบัติงาน Machine Learning จำนวนมากมีความสนใจในการทำงานภายในของพวกเขาอย่างแน่นอน ในบทความนี้เราจะตรวจสอบ พื้นฐานทางทฤษฎีสำหรับแบบจำลองการแพร่กระจายแล้วสาธิตวิธีสร้างภาพด้วย a แบบจำลองการแพร่กระจายใน PyTorch. มาดำน้ำกันเถอะ!

หากเนื้อหาการศึกษาเชิงลึกนี้มีประโยชน์สำหรับคุณ สมัครรับจดหมายข่าว AI ของเรา เพื่อรับการแจ้งเตือนเมื่อเราเผยแพร่เนื้อหาใหม่ 

แบบจำลองการแพร่กระจาย – บทนำ

แบบจำลองการแพร่กระจายคือ กำเนิด โมเดล หมายความว่าจะใช้ในการสร้างข้อมูลที่คล้ายกับข้อมูลที่ได้รับการฝึกอบรม โดยพื้นฐานแล้ว แบบจำลองการแพร่กระจายทำงานโดย ทำลายข้อมูลการฝึก โดยการเพิ่มเสียงเกาส์เซียนอย่างต่อเนื่องและจากนั้น เรียนรู้ที่จะกู้คืน ข้อมูลโดย การหันกลับ กระบวนการที่ทำให้เกิดเสียงดังนี้ หลังการฝึก เราก็สามารถใช้โมเดลการแพร่กระจายเพื่อสร้างข้อมูลได้ง่ายๆ ผ่านการสุ่มตัวอย่างเสียงผ่านกระบวนการ denoising ที่เรียนรู้

แบบจำลองการแพร่กระจายสามารถใช้เพื่อสร้างภาพจากจุดรบกวน (ดัดแปลงจาก แหล่ง)

โดยเฉพาะอย่างยิ่ง Diffusion Model คือโมเดลตัวแปรแฝงซึ่งจับคู่กับพื้นที่แฝงโดยใช้สายโซ่ Markov แบบตายตัว ห่วงโซ่นี้จะค่อยๆ เพิ่มสัญญาณรบกวนให้กับข้อมูลเพื่อให้ได้ค่า q(x . หลังโดยประมาณ)1:ท|x0) โดยที่ x1, …, xT เป็นตัวแปรแฝงที่มีมิติเท่ากับ x0. ในรูปด้านล่าง เราจะเห็นห่วงโซ่ของ Markov ปรากฏขึ้นสำหรับข้อมูลภาพ

ในท้ายที่สุด ภาพจะถูกแปลงเป็นสัญญาณรบกวนแบบเกาส์เซียนแบบไม่มีซีมโทติคัล ดิ เป้าหมาย ของการฝึกอบรมรูปแบบการแพร่กระจายคือการเรียนรู้ ย้อนกลับ กระบวนการ – คือการฝึกอบรม pθ(xt-1|xt). เราสามารถสร้างข้อมูลใหม่ได้โดยการย้อนกลับตามห่วงโซ่นี้

ประโยชน์ของแบบจำลองการแพร่กระจาย

ดังที่ได้กล่าวไว้ข้างต้น การวิจัยเกี่ยวกับแบบจำลองการแพร่กระจายได้ระเบิดขึ้นในช่วงไม่กี่ปีที่ผ่านมา แรงบันดาลใจจากอุณหพลศาสตร์ที่ไม่สมดุล[1], แบบจำลองการแพร่กระจายในปัจจุบันผลิต คุณภาพของภาพที่ล้ำสมัย, ตัวอย่างซึ่งสามารถเห็นด้านล่าง:

นอกเหนือจากคุณภาพของภาพที่ล้ำสมัยแล้ว Diffusion Models ยังมาพร้อมคุณประโยชน์อื่นๆ มากมาย รวมถึง ไม่ต้องการการฝึกปรปักษ์. ความยากลำบากของการฝึกปรปักษ์ได้รับการบันทึกไว้อย่างดี และในกรณีที่มีทางเลือกอื่นที่ไม่ใช่คู่ต่อสู้ที่มีประสิทธิภาพเทียบเท่ากันและประสิทธิภาพการฝึกอบรม มักจะดีที่สุดที่จะใช้สิ่งเหล่านี้ ในหัวข้อของประสิทธิภาพการฝึกอบรม Diffusion Models ยังมีประโยชน์เพิ่มเติมของ ความสามารถในการขยายขนาดและความเท่าเทียม

ในขณะที่แบบจำลองการแพร่กระจายเกือบจะสร้างผลลัพธ์จากอากาศที่บางเบา มีตัวเลือกและรายละเอียดทางคณิตศาสตร์ที่รอบคอบและน่าสนใจมากมายที่เป็นรากฐานสำหรับผลลัพธ์เหล่านี้ และแนวทางปฏิบัติที่ดีที่สุดยังคงมีการพัฒนาอยู่ในวรรณกรรม มาดูทฤษฎีทางคณิตศาสตร์ที่สนับสนุนโมเดลการแพร่ระบาดในรายละเอียดเพิ่มเติมในตอนนี้

แบบจำลองการแพร่กระจาย – การดำน้ำลึก

ดังที่ได้กล่าวไว้ข้างต้น แบบจำลองการแพร่กระจายประกอบด้วย a กระบวนการส่งต่อ (หรือ กระบวนการแพร่) โดยที่ Datum (โดยทั่วไปแล้ว รูปภาพ) มีสัญญาณรบกวนแบบค่อยเป็นค่อยไป และ a กระบวนการย้อนกลับ (หรือ กระบวนการแพร่แบบย้อนกลับ) ซึ่งเสียงจะถูกแปลงกลับเป็นตัวอย่างจากการกระจายเป้าหมาย

การเปลี่ยนลูกโซ่การสุ่มตัวอย่างในกระบวนการไปข้างหน้าสามารถตั้งค่าเป็น Gaussians แบบมีเงื่อนไขได้เมื่อระดับเสียงต่ำเพียงพอ การรวมข้อเท็จจริงนี้เข้ากับสมมติฐานของ Markov จะนำไปสู่การกำหนดพารามิเตอร์อย่างง่ายของกระบวนการส่งต่อ:

หมายเหตุทางคณิตศาสตร์

เรากำลังพูดถึงการทำลายข้อมูลโดย เพิ่ม เสียงเกาส์เซียน แต่ในตอนแรกอาจไม่ชัดเจนว่าเรากำลังดำเนินการเพิ่มเติมนี้อยู่ที่ใด จากสมการข้างต้น ในแต่ละขั้นตอนในห่วงโซ่ เราเพียงแค่สุ่มตัวอย่างจากการแจกแจงแบบเกาส์เซียนที่มีค่าเฉลี่ยเป็นค่าก่อนหน้า (เช่น รูปภาพ) ในห่วงโซ่

สองประโยคนี้มีค่าเท่ากัน นั่นคือ

เพื่อให้เข้าใจว่าทำไม เราจะใช้สัญกรณ์ในทางที่ผิดเล็กน้อยโดยยืนยัน

โดยนัยสุดท้ายเกิดจากความเท่าเทียมกันทางคณิตศาสตร์ระหว่างผลรวมของตัวแปรสุ่มและการบิดของการแจกแจง - ดู หน้าวิกิพีเดียนี้ สำหรับข้อมูลเพิ่มเติม

กล่าวอีกนัยหนึ่ง เราได้แสดงให้เห็นว่าการแจกแจงขั้นตอนเวลาที่ปรับเงื่อนไขบนขั้นตอนก่อนหน้าโดยใช้ค่าเฉลี่ยของการแจกแจงแบบเกาส์เซียนนั้นเทียบเท่ากับการยืนยันว่าการแจกแจงของขั้นตอนเวลาที่กำหนดนั้นเป็นของขั้นตอนก่อนหน้าที่มีการเติมสัญญาณรบกวนแบบเกาส์เซียน เราละเว้นสเกลาร์ที่แนะนำโดยกำหนดการความแปรปรวนและแสดงสิ่งนี้เป็นมิติเดียวเพื่อความง่าย แต่มีหลักฐานที่คล้ายกันสำหรับ Gaussians หลายตัวแปร

ที่ไหน β1,…,เบต้าT เป็นตารางความแปรปรวน (ทั้งที่เรียนแล้วหรือตายตัว) ซึ่งถ้าประพฤติดีแล้ว รับรองว่า xT เกือบจะเป็น Gaussian แบบไอโซโทรปิกสำหรับ T ที่มีขนาดใหญ่เพียงพอ

จากสมมติฐานของ Markov การกระจายร่วมของตัวแปรแฝงเป็นผลคูณของการเปลี่ยนลูกโซ่แบบมีเงื่อนไขแบบเกาส์เซียน (แก้ไขจาก แหล่ง).

ดังที่ได้กล่าวไว้ก่อนหน้านี้ "ความมหัศจรรย์" ของแบบจำลองการแพร่กระจายอยู่ใน กระบวนการย้อนกลับ. ในระหว่างการฝึกอบรม ตัวแบบเรียนรู้ที่จะย้อนกลับกระบวนการแพร่กระจายนี้เพื่อสร้างข้อมูลใหม่ เริ่มต้นด้วยเสียงเกาส์เซียนบริสุทธิ์ p(xT):=N(xT,0,I) โมเดลเรียนรู้การกระจายร่วม pθ(x0:ท) เช่น

โดยจะเรียนรู้พารามิเตอร์ที่ขึ้นกับเวลาของการเปลี่ยนแปลงแบบเกาส์เซียน โดยเฉพาะอย่างยิ่ง โปรดทราบว่าสูตร Markov ยืนยันว่าการกระจายการเปลี่ยนผ่านของการแพร่กระจายแบบย้อนกลับนั้นขึ้นอยู่กับขั้นตอนเวลาก่อนหน้าเท่านั้น (หรือขั้นตอนเวลาที่ตามมา ขึ้นอยู่กับว่าคุณดูอย่างไร):

การฝึกอบรม

แบบจำลองการแพร่กระจายได้รับการอบรมโดย ค้นหาการเปลี่ยนแปลงของ Markov แบบย้อนกลับที่เพิ่มความเป็นไปได้ของข้อมูลการฝึกอบรม ในทางปฏิบัติ การฝึกอบรมประกอบด้วยการลดขอบเขตบนของการเปลี่ยนแปลงบนความเป็นไปได้ของบันทึกเชิงลบให้น้อยที่สุด

รายละเอียดสัญกรณ์

โปรดทราบว่า Lฯลฯ เป็นเทคนิคและ บน ถูกผูกไว้ (ค่าลบของ ELBO) ที่เราพยายามย่อให้เล็กสุด แต่เราเรียกมันว่า Lฯลฯ เพื่อให้สอดคล้องกับวรรณคดี

เราพยายามที่จะเขียน L . ใหม่ฯลฯ ในแง่ของ Kullback-Leibler (KL) ความแตกต่าง KL Divergence เป็นการวัดระยะทางทางสถิติแบบอสมมาตรของการแจกแจงความน่าจะเป็นหนึ่งครั้ง P แตกต่างจากการแจกแจงอ้างอิง Q. เรามีความสนใจในการจัดทำ Lฯลฯ ในแง่ของความแตกต่างของ KL เนื่องจากการกระจายการเปลี่ยนแปลงในกลุ่ม Markov ของเราคือ Gaussians และ ความแตกต่างของ KL ระหว่าง Gaussians มีรูปแบบปิด

KL Divergence คืออะไร?

รูปแบบทางคณิตศาสตร์ของ KL divergence สำหรับการแจกแจงแบบต่อเนื่อง is

แถบคู่ระบุว่าฟังก์ชันไม่สมมาตรตามอาร์กิวเมนต์

ด้านล่างคุณจะเห็นความแตกต่างของ KL ของการแจกแจงที่แตกต่างกัน P (สีน้ำเงิน) จากการแจกแจงอ้างอิง Q (สีแดง). เส้นโค้งสีเขียวระบุฟังก์ชันภายในอินทิกรัลในคำจำกัดความของ KL divergence ด้านบน และพื้นที่รวมใต้เส้นโค้งแสดงถึงค่าของ KL divergence ของ P ราคาเริ่มต้นที่ Q ในช่วงเวลาใดก็ตาม ค่าที่แสดงเป็นตัวเลขด้วย

การคัดเลือกนักแสดง เลเวล ในแง่ของ KL Divergences

ตามที่กล่าวไว้ก่อนหน้านี้ เป็นไปได้ [1] เพื่อเขียน L . ใหม่ฯลฯ เกือบจะสมบูรณ์ในแง่ของความแตกต่างของ KL:

ที่ไหน

รายละเอียดที่มา

ขอบเขตผันแปรเท่ากับ

แทนที่การแจกแจงด้วยคำจำกัดความตามสมมติฐานของ Markov เราได้รับ

เราใช้กฎของบันทึกเพื่อแปลงนิพจน์เป็นผลรวมของบันทึก จากนั้นเราดึงพจน์แรกออกมา

โดยใช้ทฤษฎีบทของเบย์และข้อสันนิษฐานของมาร์คอฟ นิพจน์นี้จะกลายเป็น

จากนั้นเราแบ่งระยะกลางโดยใช้กฎบันทึก

แยกเทอมที่สองเราเห็น

เสียบกลับเข้าไปในสมการของเราสำหรับ Lฯลฯ, เรามี

โดยใช้กฎบันทึก เราจัดเรียงใหม่

d8

ต่อไป เราสังเกตความเท่าเทียมกันต่อไปนี้สำหรับ KL divergence สำหรับการแจกแจงสองครั้งใดๆ:

ในที่สุด เมื่อนำความเท่าเทียมกันนี้ไปใช้กับนิพจน์ก่อนหน้า เราก็มาถึง

ปรับสภาพกระบวนการส่งต่อหลังบน x0 ในหลี่t-1 ส่งผลในรูปแบบที่ติดตามได้ง่ายซึ่งนำไปสู่ ความแตกต่างของ KL ทั้งหมดเป็นการเปรียบเทียบระหว่าง Gaussians ซึ่งหมายความว่าสามารถคำนวณไดเวอร์เจนซ์ได้อย่างแม่นยำด้วยนิพจน์แบบฟอร์มปิดมากกว่าการประมาณการมอนติคาร์โล[3].

ตัวเลือกรุ่น

เมื่อสร้างพื้นฐานทางคณิตศาสตร์สำหรับฟังก์ชันวัตถุประสงค์แล้ว ตอนนี้เราจำเป็นต้องทำหลายทางเลือกเกี่ยวกับวิธีการนำแบบจำลองการแพร่กระจายของเราไปใช้ สำหรับกระบวนการส่งต่อ ทางเลือกเดียวที่จำเป็นคือการกำหนดกำหนดการความแปรปรวน ซึ่งโดยทั่วไปค่าจะเพิ่มขึ้นในระหว่างกระบวนการส่งต่อ

สำหรับกระบวนการย้อนกลับ เราเลือกสถาปัตยกรรมการกระจายพารามิเตอร์/โมเดลการแจกแจงแบบเกาส์เซียน หมายเหตุ มีความยืดหยุ่นสูง ที่โมเดลการแพร่กระจายจ่ายได้ – the เพียง ข้อกำหนดเกี่ยวกับสถาปัตยกรรมของเราคืออินพุตและเอาต์พุตมีมิติเท่ากัน

เราจะสำรวจรายละเอียดของตัวเลือกเหล่านี้ในรายละเอียดเพิ่มเติมด้านล่าง

ส่งต่อกระบวนการและLT

ดังที่กล่าวไว้ข้างต้น เกี่ยวกับกระบวนการส่งต่อ เราต้องกำหนดตารางเวลาความแปรปรวน โดยเฉพาะอย่างยิ่งเรากำหนดให้เป็น ค่าคงที่ขึ้นอยู่กับเวลาละเลยความจริงที่ว่าพวกเขาสามารถเรียนรู้ได้ ตัวอย่างเช่น[3], ตารางเชิงเส้นจาก β1= 10-4 ถึง βTอาจใช้ =0.2 หรืออาจเป็นอนุกรมเรขาคณิต

โดยไม่คำนึงถึงค่าเฉพาะที่เลือก ความจริงที่ว่าตารางความแปรปรวนได้รับการแก้ไขผลลัพธ์ในLT กลายเป็นค่าคงที่เมื่อเทียบกับชุดของพารามิเตอร์ที่เรียนรู้ได้ของเรา ทำให้เราละเลยมันได้เท่าที่เกี่ยวข้องกับการฝึกอบรม

ย้อนกลับกระบวนการและL1:T-1

ตอนนี้เราพูดถึงตัวเลือกที่จำเป็นในการกำหนดกระบวนการย้อนกลับ จำจากด้านบนเราได้กำหนดการเปลี่ยน Markov แบบย้อนกลับเป็น Gaussian:

ตอนนี้เราต้องกำหนดรูปแบบการทำงานของμθ หรือ Σθ. แม้ว่าจะมีวิธีที่ซับซ้อนกว่าในการกำหนดพารามิเตอร์ Σθ[5], เราก็ตั้ง

นั่นคือ เราคิดว่า Gaussian หลายตัวแปรเป็นผลคูณของ Gaussian อิสระที่มีความแปรปรวนเหมือนกัน ซึ่งเป็นค่าความแปรปรวนซึ่งสามารถเปลี่ยนแปลงได้ตามเวลา เรา ตั้งค่าความแปรปรวนเหล่านี้ให้เทียบเท่ากับกำหนดการความแปรปรวนของกระบวนการส่งต่อของเรา

ด้วยสูตรใหม่นี้ของ Σθ, เรามี

ที่ทำให้เราเปลี่ยนแปลงได้

ไปยัง

โดยที่เทอมแรกในผลต่างคือผลรวมเชิงเส้นของ xt และ x0 ที่ขึ้นอยู่กับตารางความแปรปรวน βt. รูปแบบที่แน่นอนของฟังก์ชันนี้ไม่เกี่ยวข้องกับวัตถุประสงค์ของเรา แต่สามารถพบได้ใน [3].

ความสำคัญของสัดส่วนข้างต้นคือ การกำหนดพารามิเตอร์ที่ตรงไปตรงมาที่สุดของμθ เพียงแค่ทำนายค่าเฉลี่ยหลังการแพร่กระจาย ที่สำคัญ ผู้เขียน [3] พบว่าการฝึก μ . จริงθ เพื่อทำนาย สัญญาณรบกวน องค์ประกอบในช่วงเวลาที่กำหนดให้ผลลัพธ์ที่ดีกว่า โดยเฉพาะอย่างยิ่ง ให้

ที่ไหน

สิ่งนี้นำไปสู่ฟังก์ชั่นการสูญเสียทางเลือกต่อไปนี้ซึ่งผู้เขียน [3] พบว่านำไปสู่การฝึกอบรมที่มีเสถียรภาพมากขึ้นและผลลัพธ์ที่ดีขึ้น:

ผู้เขียน [3] ยังทราบถึงความเชื่อมโยงของสูตรผสมนี้ของแบบจำลองการแพร่กระจายกับแบบจำลองกำเนิดที่จับคู่คะแนนตามไดนามิกของ Langevin แท้จริงแล้ว ปรากฏว่าแบบจำลองการแพร่กระจายและแบบจำลองตามคะแนนอาจเป็นสองด้านของเหรียญเดียวกัน คล้ายกับการพัฒนาที่เป็นอิสระและเกิดขึ้นพร้อมกันของกลศาสตร์ควอนตัมที่ใช้คลื่นและกลศาสตร์ควอนตัมที่ใช้เมทริกซ์ซึ่งเผยให้เห็นสูตรที่เทียบเท่ากันของปรากฏการณ์เดียวกันสองสูตร[2].

สถาปัตยกรรมเครือข่าย

ในขณะที่ฟังก์ชันการสูญเสียแบบง่ายของเราพยายามที่จะฝึกแบบจำลอง ϵθเรายังไม่ได้กำหนดสถาปัตยกรรมของโมเดลนี้ โปรดทราบว่า เพียง ข้อกำหนดสำหรับแบบจำลองคือมิติข้อมูลเข้าและส่งออกเหมือนกัน

ด้วยข้อจำกัดนี้ จึงไม่น่าแปลกใจเลยที่ Image Diffusion Models มักใช้กับสถาปัตยกรรมแบบ U-Net

ตัวถอดรหัสกระบวนการย้อนกลับและ L0

เส้นทางตามกระบวนการย้อนกลับประกอบด้วยการแปลงจำนวนมากภายใต้การแจกแจงแบบมีเงื่อนไขแบบเกาส์เซียนอย่างต่อเนื่อง ในตอนท้ายของกระบวนการย้อนกลับ จำไว้ว่าเรากำลังพยายามสร้าง an ภาพซึ่งประกอบด้วยค่าพิกเซลจำนวนเต็ม เราจึงต้องคิดหาหนทางให้ได้มา โอกาสที่ไม่ต่อเนื่อง (บันทึก) สำหรับแต่ละค่าพิกเซลที่เป็นไปได้ในทุกพิกเซล

วิธีนี้ทำได้โดยการตั้งค่าการเปลี่ยนแปลงล่าสุดในห่วงโซ่การแพร่กระจายย้อนกลับเป็น an ตัวถอดรหัสแยกอิสระ. เพื่อกำหนดความน่าจะเป็นของภาพที่กำหนด x0 ให้ x1อันดับแรก เรากำหนดความเป็นอิสระระหว่างมิติข้อมูล:

โดยที่ D คือมิติข้อมูลและตัวยก i ระบุการสกัดหนึ่งพิกัด เป้าหมายในตอนนี้คือการกำหนดว่าค่าจำนวนเต็มแต่ละค่ามีแนวโน้มอย่างไรสำหรับพิกเซลที่กำหนด กำหนด การกระจายตามค่าที่เป็นไปได้สำหรับพิกเซลที่เกี่ยวข้องในภาพที่มีสัญญาณรบกวนเล็กน้อย ณ เวลา t=1:

โดยที่การแจกแจงพิกเซลสำหรับ t=1 มาจากค่า Gaussian หลายตัวแปรด้านล่าง ซึ่งเมทริกซ์ความแปรปรวนร่วมในแนวทแยงช่วยให้เราแยกการกระจายออกเป็นผลิตภัณฑ์ของ Gaussians ที่ไม่มีตัวแปร หนึ่งค่าสำหรับแต่ละมิติข้อมูล:

เราคิดว่ารูปภาพประกอบด้วยจำนวนเต็มใน 0,1,…,255 (เช่นเดียวกับรูปภาพ RGB มาตรฐาน) ซึ่งได้รับการปรับขนาดเชิงเส้นเป็น [-1,1] จากนั้นเราจะแบ่งเส้นจริงออกเป็น "ถัง" เล็กๆ โดยที่สำหรับค่าพิกเซลที่ปรับขนาดให้ x, ที่เก็บข้อมูลสำหรับช่วงนั้นคือ [x−1/255, x+1/255] ความน่าจะเป็นของค่าพิกเซล x, ให้การแจกแจงแบบเกาส์เซียนแบบไม่มีตัวแปรของพิกเซลที่สอดคล้องกันใน x1, คือ พื้นที่ภายใต้การกระจาย Gaussian ที่ไม่มีตัวแปรภายในถังที่มีศูนย์กลางอยู่ที่ x.

ด้านล่างนี้ คุณสามารถดูพื้นที่สำหรับแต่ละที่เก็บข้อมูลเหล่านี้ที่มีความน่าจะเป็นสำหรับค่าเกาส์เซียนเฉลี่ย 0 ซึ่งในบริบทนี้ สอดคล้องกับการกระจายที่มีค่าพิกเซลเฉลี่ย 255/2 (ความสว่างครึ่งหนึ่ง) เส้นโค้งสีแดงแสดงถึงการกระจายของพิกเซลเฉพาะใน t = 1 ภาพและพื้นที่ให้ความน่าจะเป็นของค่าพิกเซลที่สอดคล้องกันใน t = 0 ภาพ.

หมายเหตุทางเทคนิค

ที่เก็บข้อมูลแรกและสุดท้ายขยายออกไปเป็น -inf และ +inf เพื่อรักษาความน่าจะเป็นทั้งหมด

ให้ t = 0 ค่าพิกเซลสำหรับแต่ละพิกเซล ค่าของ pθ(x0|x1) เป็นเพียงผลิตภัณฑ์ของตน กระบวนการนี้ถูกห่อหุ้มอย่างรัดกุมโดยสมการต่อไปนี้:

ที่ไหน

และ

จากสมการนี้สำหรับ pθ(x0|x1) เราสามารถคำนวณเทอมสุดท้ายของ Lฯลฯ ซึ่งไม่ได้กำหนดเป็น KL Divergence:

วัตถุประสงค์สุดท้าย

ดังที่ได้กล่าวไว้ในส่วนที่แล้ว ผู้เขียน [3] พบว่าการคาดคะเนองค์ประกอบสัญญาณรบกวนของภาพในช่วงเวลาที่กำหนดให้ผลลัพธ์ที่ดีที่สุด ในที่สุด พวกเขาใช้วัตถุประสงค์ต่อไปนี้:

อัลกอริธึมการฝึกอบรมและการสุ่มตัวอย่างสำหรับโมเดลการแพร่กระจายของเราจึงสามารถจับภาพได้อย่างกระชับดังรูปด้านล่าง:

สรุปทฤษฎีแบบจำลองการแพร่กระจาย

ในส่วนนี้ เราได้เจาะลึกรายละเอียดเกี่ยวกับทฤษฎีของแบบจำลองการแพร่กระจาย การติดตามรายละเอียดทางคณิตศาสตร์อาจเป็นเรื่องง่าย ดังนั้นเราจึงสังเกตประเด็นที่สำคัญที่สุดภายในส่วนนี้ด้านล่างเพื่อให้ตนเองมีทัศนคติที่ดีจากมุมมองของนก:

  1. แบบจำลองการแพร่กระจายของเราถูกกำหนดพารามิเตอร์เป็น a มาร์คอฟเชนหมายความว่าตัวแปรแฝงของเรา x1, …, xT ขึ้นอยู่กับขั้นตอนก่อนหน้า (หรือที่ตามมา) เท่านั้น
  2. พื้นที่ การกระจายการเปลี่ยนแปลง ในห่วงโซ่มาร์คอฟคือ เสียนโดยที่กระบวนการส่งต่อต้องใช้กำหนดการความแปรปรวน และเรียนรู้พารามิเตอร์กระบวนการย้อนกลับ
  3. กระบวนการแพร่ทำให้แน่ใจได้ว่า xT is กระจายแบบไม่แสดงอาการเป็นเกาส์เซียนไอโซโทรปิก สำหรับ T ที่มีขนาดใหญ่เพียงพอ
  4. ในกรณีของเรา กำหนดการความแปรปรวนได้รับการแก้ไขแต่ก็สามารถเรียนรู้ได้เช่นกัน สำหรับกำหนดการที่แน่นอน การติดตามความก้าวหน้าทางเรขาคณิตอาจให้ผลลัพธ์ที่ดีกว่าการก้าวหน้าเชิงเส้น ไม่ว่าในกรณีใด ความแปรปรวนมักจะเพิ่มขึ้นตามเวลาในชุดข้อมูล (เช่น βij สำหรับฉัน
  5. แบบจำลองการแพร่กระจายคือ มีความยืดหยุ่นสูง และอนุญาตให้ ใด สถาปัตยกรรมที่มีมิติข้อมูลเข้าและส่งออกเหมือนกันที่จะใช้ การใช้งานหลายอย่างใช้ ยูเน็ตเหมือน สถาปัตยกรรม
  6. พื้นที่ วัตถุประสงค์การฝึกอบรม คือการเพิ่มความเป็นไปได้ของข้อมูลการฝึกอบรมให้มากที่สุด สิ่งนี้แสดงให้เห็นเป็นการปรับพารามิเตอร์ของแบบจำลองเป็น ลดขอบเขตบนที่แปรผันของความเป็นไปได้ของบันทึกเชิงลบของข้อมูล.
  7. คำศัพท์เกือบทั้งหมดในฟังก์ชันวัตถุประสงค์สามารถแปลงเป็น KL ไดเวอร์เจนซ์ อันเป็นผลมาจากสมมติฐานของ Markov ของเรา ค่าเหล่านี้ สามารถคำนวณได้ เนื่องจากเราใช้ Gaussians ดังนั้นจึงไม่จำเป็นต้องทำการประมาณ Monte Carlo
  8. ในที่สุดการใช้ไฟล์ วัตถุประสงค์การฝึกอบรมอย่างง่าย เพื่อฝึกฟังก์ชันที่คาดการณ์ส่วนประกอบสัญญาณรบกวนของตัวแปรแฝงที่ให้ผลลัพธ์ที่ดีที่สุดและเสถียรที่สุด
  9. ตัวถอดรหัสแบบไม่ต่อเนื่อง ใช้เพื่อรับโอกาสบันทึกในค่าพิกเซลเป็นขั้นตอนสุดท้ายในกระบวนการแพร่ย้อนกลับ

ด้วยภาพรวมระดับสูงของแบบจำลองการแพร่กระจายในจิตใจของเรา มาดูวิธีการใช้แบบจำลองการแพร่กระจายใน PyTorch กัน

แบบจำลองการแพร่กระจายใน PyTorch

แม้ว่าแบบจำลองการแพร่กระจายจะยังไม่ได้รับการทำให้เป็นประชาธิปไตยในระดับเดียวกับสถาปัตยกรรม/แนวทางที่เก่ากว่าอื่นๆ ในการเรียนรู้ของเครื่อง แต่ก็ยังมีการใช้งานที่พร้อมใช้งาน วิธีที่ง่ายที่สุดในการใช้รูปแบบการแพร่กระจายใน PyTorch คือการใช้ denoising-diffusion-pytorch แพ็คเกจซึ่งใช้โมเดลการกระจายรูปภาพเหมือนกับที่กล่าวถึงในบทความนี้ ในการติดตั้งแพ็คเกจ เพียงพิมพ์คำสั่งต่อไปนี้ในเทอร์มินัล:

pip install denoising_diffusion_pytorch

ตัวอย่างน้อยที่สุด

ในการฝึกโมเดลและสร้างอิมเมจ ก่อนอื่นเราต้องนำเข้าแพ็คเกจที่จำเป็น:

import torch
from denoising_diffusion_pytorch import Unet, GaussianDiffusion

ต่อไป เรากำหนดสถาปัตยกรรมเครือข่ายของเรา ในกรณีนี้คือ U-Net ดิ dim พารามิเตอร์ระบุจำนวนแผนที่คุณลักษณะก่อนการสุ่มตัวอย่างครั้งแรก และ dim_mults พารามิเตอร์จัดเตรียมตัวคูณสำหรับค่านี้และการสุ่มตัวอย่างแบบต่อเนื่อง:

model = Unet(
 dim = 64,
 dim_mults = (1, 2, 4, 8)
)

เมื่อกำหนดสถาปัตยกรรมเครือข่ายแล้ว เราจำเป็นต้องกำหนดรูปแบบการแพร่กระจายด้วยตัวมันเอง เราส่งต่อโมเดล U-Net ที่เราเพิ่งกำหนดพร้อมกับพารามิเตอร์ต่างๆ – ขนาดของรูปภาพที่จะสร้าง จำนวนขั้นตอนในกระบวนการแพร่กระจาย และตัวเลือกระหว่างบรรทัดฐาน L1 และ L2

diffusion = GaussianDiffusion(
 model,
 image_size = 128,
 timesteps = 1000, # number of steps
 loss_type = 'l1' # L1 or L2
)

เมื่อกำหนดรูปแบบการแพร่กระจายแล้ว ก็ถึงเวลาฝึก เราสร้างข้อมูลแบบสุ่มเพื่อฝึกฝน จากนั้นจึงฝึกโมเดลการแพร่กระจายด้วยวิธีปกติ:

training_images = torch.randn(8, 3, 128, 128)
loss = diffusion(training_images)
loss.backward()

เมื่อโมเดลได้รับการฝึกอบรมแล้ว เราก็สามารถสร้างภาพโดยใช้ sample() วิธีการของ diffusion วัตถุ. ที่นี่เราสร้าง 4 ภาพ ซึ่งเป็นเพียงสัญญาณรบกวนเนื่องจากข้อมูลการฝึกของเราเป็นแบบสุ่ม:

sampled_images = diffusion.sample(batch_size = 4)

การฝึกอบรมเกี่ยวกับข้อมูลที่กำหนดเอง

พื้นที่ denoising-diffusion-pytorch แพ็คเกจยังช่วยให้คุณฝึกโมเดลการแพร่กระจายในชุดข้อมูลเฉพาะได้อีกด้วย เพียงแค่เปลี่ยน 'path/to/your/images' สตริงที่มีพาธไดเร็กทอรีชุดข้อมูลใน Trainer() วัตถุด้านล่างและเปลี่ยน image_size ให้ได้ค่าที่เหมาะสม หลังจากนั้น เพียงรันโค้ดเพื่อฝึกโมเดล จากนั้นจึงสุ่มตัวอย่างเหมือนเมื่อก่อน โปรดทราบว่าต้องคอมไพล์ PyTorch โดยเปิดใช้งาน CUDA เพื่อใช้ Trainer ระดับ:

from denoising_diffusion_pytorch import Unet, GaussianDiffusion, Trainer
model = Unet(
 dim = 64,
 dim_mults = (1, 2, 4, 8)
).cuda()
diffusion = GaussianDiffusion(
 model,
 image_size = 128,
 timesteps = 1000, # number of steps
 loss_type = 'l1' # L1 or L2
).cuda()
trainer = Trainer(
 diffusion,
 'path/to/your/images',
 train_batch_size = 32,
 train_lr = 2e-5,
 train_num_steps = 700000, # total training steps
 gradient_accumulate_every = 2, # gradient accumulation steps
 ema_decay = 0.995, # exponential moving average decay
 amp = True # turn on mixed precision
)
trainer.train()

ด้านล่างนี้ คุณจะเห็นการดีนอยส์แบบก้าวหน้าจากสัญญาณรบกวนเกาส์เซียนหลายตัวแปรไปจนถึงตัวเลข MNIST ที่คล้ายกับการแพร่แบบย้อนกลับ:

คำสุดท้าย

แบบจำลองการแพร่กระจายเป็นแนวคิดที่เรียบง่ายและสง่างามสำหรับปัญหาในการสร้างข้อมูล ผลลัพธ์อันล้ำสมัยของพวกเขารวมกับการฝึกอบรมที่ไม่เป็นปฏิปักษ์ได้ขับเคลื่อนพวกเขาให้สูงขึ้นอย่างมาก และสามารถคาดหวังการปรับปรุงเพิ่มเติมได้ในอีกไม่กี่ปีข้างหน้าเนื่องจากสถานะตั้งไข่ของพวกเขา โดยเฉพาะอย่างยิ่ง พบว่าแบบจำลองการแพร่กระจายมีความสำคัญต่อประสิทธิภาพของแบบจำลองที่ล้ำสมัย เช่น DALL-E2.

อ้างอิง

[1] การเรียนรู้แบบ Deep Unsupervised โดยใช้อุณหพลศาสตร์ที่ไม่สมดุล

[2] การสร้างแบบจำลองทั่วไปโดยการประมาณการไล่ระดับของการกระจายข้อมูล

[3] แบบจำลองความน่าจะเป็นของการแพร่กระจาย Denoising

[4] เทคนิคที่ได้รับการปรับปรุงสำหรับแบบจำลองการสร้างตามคะแนนการฝึกอบรม

[5] ปรับปรุงแบบจำลองความน่าจะเป็นการแพร่กระจาย Denoising

[6] โมเดลการแพร่กระจายเอาชนะ GAN ในการสังเคราะห์ภาพ

[7] GLIDE: สู่การสร้างและแก้ไขภาพที่เหมือนจริงด้วยภาพด้วย Text-Guided Diffusion Models

[8] การสร้างรูปภาพตามเงื่อนไขแบบข้อความตามลำดับชั้นด้วย CLIP Latents

สนุกกับบทความนี้? ลงทะเบียนเพื่อรับการอัปเดตการวิจัย AI เพิ่มเติม

เราจะแจ้งให้คุณทราบเมื่อเราเผยแพร่บทความสรุปเพิ่มเติมเช่นนี้

แชทกับเรา

สวัสดี! ฉันจะช่วยคุณได้อย่างไร?