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

การแพร่กระจายบน syntax tree สำหรับ program synthesis

ภาพรวม

  • ปัญหา: โมเดลภาษาขนาดใหญ่ (LLM) สร้างโค้ดทีละโทเค็นในครั้งเดียว กระบวนการนี้ขาดฟีดแบ็กจากการสังเกตผลการรันของโปรแกรม
  • แนวทางแก้ไข: เสนอโมเดล neural diffusion ที่ทำงานบน syntax tree เช่นเดียวกับโมเดล diffusion สำหรับภาพ โดยย้อนกระบวนการ noise ที่ใส่ลงใน syntax tree
  • วิธีการ: แทนที่จะสร้างโค้ดขึ้นมาใหม่ จะใช้การแก้ไขซ้ำ ๆ โดยคงความถูกต้องตามไวยากรณ์ไว้ ทำให้ผสานกับการค้นหาได้ง่าย
  • การประยุกต์ใช้: นำไปใช้กับงาน inverse graphics เพื่อแปลงภาพให้เป็นโปรแกรมที่สร้างภาพนั้นขึ้นมา ผสานกับการค้นหาเพื่อเขียนโปรแกรมกราฟิก ตรวจสอบผลการรัน และดีบัก

การเพิ่ม noise ให้โปรแกรมคืออะไร?

  • การเพิ่ม noise: เลือกโหนดแบบสุ่มใน syntax tree แล้วแทนที่โหนดนั้นด้วยโหนดอื่นที่มีชนิดถูกต้อง
  • การย้อน noise: หลังจากเพิ่ม noise แล้ว จะย้อนกระบวนการเพื่อคืนกลับสู่สถานะเดิม

การสร้างโปรแกรมด้วยการค้นหา

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

การอ้างอิง

  • บทความวิจัย: "Diffusion On Syntax Trees For Program Synthesis"
  • ผู้เขียน: Shreyas Kapur, Erik Jenner, Stuart Russell
  • เผยแพร่: arXiv, 2024

คำขอบคุณ

  • การสนับสนุนทางเทคนิค: Kathy Jang, David Wu, Cam Allen, Sam Toyer, Eli Bronstein, Koushik Sen, Pieter Abbeel

ใบอนุญาต

  • Creative Commons Attribution-ShareAlike 4.0 International License: สามารถใช้ซอร์สโค้ดของเว็บไซต์นี้ได้อย่างอิสระ โดยต้องเพิ่มลิงก์ไว้ที่ด้านล่างของหน้า

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

  • จุดที่น่าสนใจ: วิธีแก้ไขโค้ดโดยสะท้อนผลการรันของโปรแกรมดูเป็นธรรมชาติกว่าแนวทางสร้างโค้ดแบบลำดับเดิม
  • เหตุผลที่มีประโยชน์: ใช้ได้ดีกับงาน inverse graphics และอาจเป็นเครื่องมือทรงพลังโดยเฉพาะในการแปลงสเก็ตช์ที่วาดด้วยมือให้เป็นโปรแกรม
  • มุมมองเชิงวิจารณ์: กระบวนการเพิ่มและย้อน noise อาจซับซ้อน และยังต้องมีการตรวจสอบเพิ่มเติมเรื่องประสิทธิภาพและความคุ้มค่าในการใช้งานจริง
  • คำแนะนำผลิตภัณฑ์ที่เกี่ยวข้อง: โปรเจกต์อื่นที่มีความสามารถคล้ายกัน ได้แก่ โมเดลสร้างโค้ดอย่าง Codex ของ OpenAI
  • ข้อพิจารณาในการนำเทคโนโลยีไปใช้: หากจะนำเทคโนโลยีนี้ไปใช้ ควรตรวจสอบทั้งข้อมูลที่ใช้ฝึกโมเดลและประสิทธิภาพในสภาพแวดล้อมการใช้งานจริงอย่างรอบคอบ

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

 
GN⁺ 2024-06-05
ความคิดเห็นจาก Hacker News
  • Racket และการสร้างคำใบ้สำหรับ MOOC: คล้ายกับวิธีสร้างคำใบ้สำหรับ MOOC ด้วย Racket โดยเป็นแนวทางที่แปลงและวิเคราะห์ syntax tree เพื่อไปให้ถึงโซลูชันเป้าหมาย จึงสงสัยว่าจะสามารถนำไปรวมกับแนวทาง machine learning สมัยใหม่ได้หรือไม่

  • Genetic algorithm และการแปลง subtree: ในยุค 90 Koza และ Adami ศึกษาการแปลง subtree อย่างลึกซึ้งในฐานะส่วนหนึ่งของ genetic algorithm โดยมีฟังก์ชัน optimization ที่แตกต่างกันเล็กน้อย

  • การสร้าง program tree: มีเอกสารอ้างอิงเกี่ยวกับการสร้าง program tree ด้วย genetic algorithm ในปี 2000 แต่ขาดสาระสำคัญไปมาก

  • Markov Chain Monte Carlo: การใช้ Markov Chain Monte Carlo กับ program synthesis ไม่ใช่เรื่องใหม่ และนึกถึงงานวิจัยของ Josh Tenenbaum ขึ้นมาทันที

  • เดโม WebPPL: มีเดโมหลากหลายใน WebPPL เช่น การสังเคราะห์ยานอวกาศ 3D รวมถึงขอแนะนำหนังสือที่เกี่ยวข้องและสิ่งพิมพ์ของ MIT Probabilistic Computing Project

  • การเพิ่มประสิทธิภาพคอมไพเลอร์/อินเทอร์พรีเตอร์: สงสัยว่าจะนำไปประยุกต์ใช้กับการเพิ่มประสิทธิภาพคอมไพเลอร์/อินเทอร์พรีเตอร์ได้อย่างไร และตั้งคำถามว่าจะสามารถวิเคราะห์ส่วนการทำงานในระดับแอสเซมบลีแล้วหาค่า optimization ออกมาได้หรือไม่

  • การเปลี่ยน program token: ในแนวทางดั้งเดิมจะสร้างภาพแบบสุ่มแล้วใช้วิธี optimization จึงยังเข้าใจได้ยากว่าการเปลี่ยน program token จะทำให้ differentiable ได้อย่างไร

  • การผสานรวมกับ GitHub และ build tool: GitHub อาจผสานรวมกับ build tool ทั่วไปได้ และสงสัยว่าจะสามารถคอมไพล์ทุกโปรเจ็กต์ที่คอมไพล์ด้วย llvm แล้วนำ diffusion model ไปใช้กับ intermediate representation ได้หรือไม่

  • Diffusion model และไบนารี: สงสัยว่า diffusion model จะทำงานในระดับไบนารีได้หรือไม่ และหากให้ prompt แล้วจะสามารถสร้างไบนารีสุดท้ายของโปรแกรมได้หรือไม่

  • การผสานรวมกับ SDF: อยากเห็นการผสานรวมกับ SDF

  • ความเร็วในการเรนเดอร์ PDF: PDF เรนเดอร์ช้าเพราะมีคำสั่งวาดภาพที่สร้างขึ้นด้วยโปรแกรม ทำให้นึกถึงบรรยากาศของบทความวิชาการแบบเก่า

  • Beam search และ reverse diffusion: ไอเดียของ beam search น่าสนใจ และสงสัยว่าจะผสาน reverse diffusion กับ beam search อย่างไร เช่น ในแต่ละขั้นของ reverse diffusion จะสุ่มตัวอย่างโหนด m > k ตัว แล้วขยายต่อเฉพาะโหนด k อันดับแรกหรือไม่