- BERT และ RoBERTa ซึ่งเป็นแบบจำลองภาษาที่มีการ Masking ก็สามารถตีความในแนวคิดของ แบบจำลอง diffusion ข้อความ ได้
- แตกต่างจากแนวทาง Auto-regressive (เช่น GPT) งานนี้ได้แสดงให้เห็นความเป็นไปได้ของการ สร้างแบบเป็นบล็อก และการฟื้นคืนแบบค่อยเป็นค่อยไป
- ยืนยันผ่านการทดลองว่าการฝึกโดยปรับอัตราการ Masking ตามขั้นตอนไม่ว่าจะเป็น RoBERTa ก็สามารถทำให้เกิด การสร้างข้อความที่เป็นธรรมชาติได้
- แม้จะ ไม่เปลี่ยนโครงสร้างเดิม ถ้าปรับเป้าหมายการฝึกอย่างเดียวก็ยังเพิ่มความสามารถในการสร้างข้อความได้
- เมื่อเปรียบเทียบกับ GPT-2 โมเดล diffusion ที่อิง RoBERTa ก็สามารถให้ผลลัพธ์การสร้างข้อความที่มีความสอดคล้องได้ในระดับหนึ่ง
ภาพรวม
Gemini Diffusion ที่ Google DeepMind เปิดเผย ถือเป็น โมเดลภาษาที่อิงการแพร่กระจาย ซึ่งแตกต่างจากสาย GPT แบบเดิม โดยสร้างข้อความทั้งบล็อกในครั้งเดียว แทนที่จะสร้างทีละคำ แนวทางนี้เป็นวิธีการสร้างข้อความผ่านการทำให้สัญญาณรบกวนสุ่มค่อย ๆ ลดลงจนใกล้ต้นฉบับ
จากการอ่านงานวิจัยที่เกี่ยวข้อง Large Language Diffusion Models พบว่า การแพร่กระจายในภาษาชนิดไม่ต่อเนื่องเป็นการขยายแนวคิดของ Masked Language Modeling (MLM) ในที่สุด จึงมีการสำรวจเชิงทดลองว่าแนวคิดนี้สามารถประยุกต์ให้โมเดลตระกูล BERT สร้างข้อความได้หรือไม่
หมายเหตุ: ต่อมา งาน DiffusionBERT ได้ตรวจสอบแนวคิดที่คล้ายกันอย่างเข้มงวดยิ่งขึ้น
ประวัติย่อของ Transformer
Transformer ที่ถูกเสนอขึ้นครั้งแรกในปี 2017 มีโครงสร้างแบบ encoder-decoder แต่ในปี 2018 โมเดลแบบแยกส่วนที่เน้นงานเฉพาะจึงถูกพัฒนา: ส่วน encoder (BERT: bidirectional, เน้นการกู้คืน masked) และส่วน decoder (GPT: autoregressive, เน้นการคาดเดาแบบลำดับ)
- เฉพาะ encoder (ตระกูล BERT)
- รับบริบททั้งประโยคเข้ามา แล้วซ่อนบางส่วนด้วย
<MASK>และฟื้นคืนจากส่วนที่เหลือ - มีจุดเด่นด้าน representation ของประโยค, การจำแนก และงานอื่น ๆ
- รับบริบททั้งประโยคเข้ามา แล้วซ่อนบางส่วนด้วย
- เฉพาะ decoder (ตระกูล GPT)
- คาดเดา token ถัดไปจากลำดับที่กำหนด
- โดดเด่นในงานสร้างข้อความ สรุป และแปลความ
BERT ถูกนำไปใช้งานด้านการจำแนกได้โดยตรงตั้งแต่แรก แต่ต่อมา GPT ได้ขยายขอบเขตการใช้งานมากขึ้นเมื่อความสามารถในการสร้างข้อความแข็งแกร่งขึ้น
โมเดล Diffusion สำหรับภาษาที่ยุติธรรมเป็นขั้นต่อขั้น
โมเดล diffusion ได้รับความนิยมอย่างมากในงานสร้างภาพ ในกรณีภาพ:
- กระบวนการไปข้างหน้า: เพิ่ม Gaussian noise ให้ภาพที่สะอาดอย่างค่อยเป็นค่อยไปจนถึงสภาวะที่กลายเป็น noise ล้วน
- กระบวนการย้อนกลับ: ใช้โมเดล deep learning ทำการ denoise ซ้ำ ๆ อย่างค่อยเป็นค่อยไปเพื่อกู้คืนข้อมูลต้นฉบับ
เมื่อปรับใช้กับข้อความ แนวทางที่ง่ายที่สุดคือกระบวนการ noise แบบการ mask
- ไปข้างหน้า (Masking)
- ที่
t=0เป็นข้อความต้นฉบับ เมื่อขั้นเพิ่มขึ้น จะสุ่มแทนบาง token ด้วย<MASK> - ที่ขั้นสุดท้าย token ทั้งหมดจะถูกแทนด้วย
<MASK>
- ที่
- ย้อนกลับ (Denoise)
- Transformer encoder เรียนรู้การกู้คืน token ต้นทางตามการตั้งค่า masking ที่ให้มา
- ถ้าอัตรา masking ต่ำจะกู้คืนง่าย และยิ่ง masking สูงยิ่งยาก
- โดยวนซ้ำจากอัตรา masking สูงสู่ต่ำ ทำให้สร้างทั้งลำดับข้อความได้
ในเฟรมเวิร์ก diffusion แบบนี้ โมเดลถูกฝึกโดยรวม denoise loss จากระดับอัตรา masking ต่าง ๆ ตามขั้นตอนต่างกัน ซึ่งหมายความว่า เป้าหมายการกู้คืน masked ของ BERT โดยแก่นแท้คือส่วนหนึ่งของ text diffusion เอง ด้วยการผสมผสาน schedule ของอัตรา masking และการ denoise แบบวนซ้ำ เราสามารถขยายเป้าหมายของ BERT ไปสู่กระบวนการสร้างภาษาธรรมชาติได้
การทดลอง RoBERTa Diffusion
RoBERTa เป็นเวอร์ชันของ BERT ที่ประกาศในปี 2019 โดยมีลักษณะเด่นคือขยาย hyperparameter และข้อมูลฝึก รวมถึงเป้าหมายการเรียนรู้ที่ตรงไปตรงมามากขึ้น (MLM Only)
ในการทดลองนี้ใช้ไลบรารี HuggingFace transformers และ datasets โดยใช้น้ำหนักเริ่มต้น, tokenizer และ Trainer ของ RoBERTa นำ WikiText มาปรับแต่งต่อ (fine-tune) ตามขั้นตอนนี้:
- ใช้หนึ่งใน 10-step diffusion schedule (
mask_probs: 1.0~0.1) ที่สุ่มเลือกในแต่ละ batch แล้วทำ masking - ใช้ custom
diffusion_collatorเลือกความน่าจะเป็น masking และสุ่มแทน<MASK>ให้แต่ละ token - เพื่อรักษา context ของ prompt token แรก 16 ตำแหน่งจะถูกเก็บไว้เสมอ
การ masking ข้อมูล (custom collator):
- เติม pad ต่อกันต่อแต่ละบล็อก token
- เลือกความน่าจะเป็นการ masking แบบสุ่ม
- นอกจาก 16 token แรก ให้แทนด้วย
<MASK>แบบสุ่มตามความน่าจะเป็นที่กำหนด - ส่งคืนชุดข้อมูลที่ถูก masking และชุด label ที่ถูกต้อง
การสร้างผลลัพธ์ (inference):
- ป้อนลำดับความยาว 256 token โดย token แรก 16 ใช้เป็น prompt ที่เหลือเป็น
<MASK> - ในแต่ละขั้น โมเดลจะสุ่ม sample token ที่คาดเดาได้ แล้ว re-mask บางส่วนด้วยอัตราที่กำหนดใหม่
- ลดอัตรา masking ลงเรื่อย ๆ และวนซ้ำไปเรื่อย ๆ จนถึงขั้นสุดท้ายที่กู้คืนครบทุก token
ตัวอย่างผลลัพธ์ที่ได้:
- ได้ข้อความต่อเนื่องที่สอดคล้องกับ prompt อย่างเป็นธรรมชาติพอสมควร
- ข้อผิดปกติบางจุดเกิดจากรูปแบบการ pre-processing ของข้อมูล WikiText (เช่น
@-@ในการแทน hyphen)
เปรียบเทียบกับ GPT-2
- แม้ GPT-2 จะเร็วกว่าเล็กน้อยและให้ความสอดคล้องสูงกว่า แต่ RoBERTa Diffusion ก็ยังให้ผลงานที่เกินความคาดหมาย (มีศักยภาพปรับปรุงแบบก้าวหน้าได้สูง)
- คุณภาพและความเร็วสามารถดีขึ้นได้ผ่านเทคนิคใหม่เช่น AR-Diffusion และ Skip-Step Diffusion รวมถึงการปรับแต่งอื่น ๆ
สรุป
- โมเดล masked language อย่าง RoBERTa ถ้าปรับการฝึกโดยควบคุมอัตรา Masking ตามขั้นตอน ก็สามารถกลายเป็น เครื่องมือสร้างภาษาธรรมชาติ ได้
- การฝึกด้วยการทำลาย/ฟื้นคืนข้อความทีละขั้นผ่าน
<MASK>อย่างเดียว ก็ยืนยันได้ว่ามีศักยภาพในการแปลงเป็นโมเดลที่สร้างข้อความได้แบบสมบูรณ์ - โดยไม่ต้องแก้ไขโครงสร้างโดยตรง การปรับเฉพาะเป้าหมายการฝึกก็เพียงพอในการสร้างความสามารถในการสร้างข้อความได้
- สุดท้าย โมเดลตระกูล BERT เองก็สอดคล้องเชิงแก่นกับโมเดล text diffusion
1 ความคิดเห็น
ความเห็นจาก Hacker News
สำหรับประเด็นที่ว่า ตอน BERT ปรากฏตัวครั้งแรก ทุกคนพยายามใช้มันสร้างข้อความ แต่ส่วนใหญ่ไม่ค่อยได้ผลนัก มีงานอ้างอิงอยู่ที่นี่ โดย Savinov และคณะจาก DeepMind พบว่า ถ้าใช้เพียงสองสเต็ประหว่างการฝึกและสุ่มความน่าจะเป็นของการ mask มันก็สามารถทำงานได้ค่อนข้างใช้ได้
หลังจากสัปดาห์ก่อนฉันลองหลายวิธีเพื่อทำให้ BERT คุยโต้ตอบได้ ฉันก็มาได้เรียนรู้เรื่องนี้จากโพสต์นี้ ยังมีไอเดียที่อยากลองอีก เลยยังสนุกกับการทดลองต่ออยู่ บล็อกที่เกี่ยวข้อง
ฉันเคยอยู่ในกลุ่มใหญ่ที่มองว่า BERT ใช้ได้แค่เป็น pure encoder ไม่ใช่สำหรับการสร้างข้อความ เช่น ใช้วัด semantic similarity และทำ classification
เท่าที่ทราบ งานนี้ ในปี 2021 (หน้า 5) เป็นงานแรกที่ชี้ให้เห็นความเชื่อมโยงนี้ พวกเขาลองแนวทาง text diffusion ที่ทำให้คำเสียหายด้วยคำอื่นที่มีความหมายใกล้เคียงกัน แต่กลับพบว่าการให้โมเดลหา masked word ง่ายกว่า ประวัติของแนวทางนี้ย้อนกลับไปได้ไกลกว่านั้นถึงงานนี้ ซึ่งสร้าง generative MLM โดยยังไม่ได้อธิบายด้วยคณิตศาสตร์แบบ diffusion
มันเก่ากว่านั้นอีก ในปี 2014 Li Yao และคณะอธิบายในงานนี้ ถึงความสมมูลกันระหว่างโมเดล autoregressive (ทำนายโทเค็นถัดไป) กับ generative stochastic networks (denoising autoencoder ซึ่งเป็นบรรพบุรุษของ diffusion model) และยังอ้างด้วยว่า parallel sampling สามารถประมาณ sequential sampling ได้ดี ในงานของฉันปี 2016 (Counterpoint by Convolution, ลิงก์) ก็ใช้วิธีนี้และอธิบายว่ากลับได้ผลดีกว่าเสียอีก น่าเสียดายที่เป็นงานประยุกต์ เลยไม่ได้รับการอ้างอิงจากสาย diffusion มากนัก ฉันคิดว่าน่าจะยังมีรากที่เก่ากว่านี้อีก
ฉันก็จำได้ว่างานนั้นเป็นแหล่งอ้างอิงแรกที่พูดเรื่องนี้อย่างเป็นทางการเหมือนกัน (หลังเห็น BERT ก็พอเดาได้ว่านักวิจัย NLP น่าจะนึกถึงแนวคิด diffusion) นี่คือชุดอ้างอิงยุคแรก ๆ ของ text diffusion ที่ฉันรวบรวมไว้เมื่อ 3 ปีก่อน ที่นี่
อนึ่ง งานที่เกี่ยวข้องดูได้ที่นี่เช่นกัน
แนวทางแบบ diffusion ให้ความรู้สึกคล้ายสิ่งที่เกิดขึ้นในสมองสัตว์มากกว่า เวลาเราพูด ฉันไม่ได้รู้สึกว่าตัวเองสร้างคำทีละคำจากคำก่อนหน้า แต่เหมือนมีไอเดียรวม ๆ แบบพร่า ๆ อยู่ในหัวก่อน แล้วค่อยจัดมันให้ออกมาเป็นภาษา
แต่จริง ๆ แล้ว autoregressive LLM ก็ไม่ได้ทำนายแค่คำถัดไปอย่างง่าย ๆ แบบนั้น แม้จะปล่อยออกมาทีละโทเค็นในหนึ่ง forward pass แต่ใน latent space ก็มีการวางแผนระยะยาวและการให้เหตุผลที่เห็นได้ชัด เวลาเราพูดเองก็เหมือนเราคิดภาพรวมไว้ในหัวแล้วค่อยพูดออกมาเป็นลำดับ ดังนั้นจึงยังสรุปไม่ได้ว่า diffusion คล้ายเรามากกว่า
ส่วนตัวฉันชอบโพสต์บล็อกที่อธิบาย diffusion ว่าเป็นเหมือน "spectral autoregression" โดย diffusion มีแนวโน้มจะทำนายคุณลักษณะความถี่ต่ำก่อน แล้วค่อยทำนายความถี่สูงทีหลัง
หลายครั้งเวลาฉันแก้ข้อความใน Slack สัก 5 รอบ ฉันก็รู้สึกว่าตัวเองเป็น diffusion model เหมือนกัน
ตอนพูดหรือเขียน เราก็ปล่อยคำออกมาแบบเป็นลำดับจริง แต่ก่อนเริ่มประโยค เรามักคิดประเด็นคร่าว ๆ ไว้ในหัวก่อน LLM ก็คล้ายกัน คือก่อนปล่อยโทเค็นออกมา มันอาจวางทิศทางรวมไว้ก่อนใน latent space
งานสาย interpretability ก็ชี้ว่า autoregressive LLM มีการวางแผนภายในล่วงหน้าว่าจะพูดอะไร
โดยส่วนตัว ฉันรู้สึกว่าการรองรับการแก้ไขแบบแทรก/ลบสไตล์ Levenshtein ดูเป็นธรรมชาติกว่าการอนุญาตแค่การ mask แล้วเติมกลับ เช่น ถ้าขั้นตอนสุดท้ายอยากแทนคำหนึ่งด้วยคำพ้องที่ยาวกว่า ก็จะขยับไปทางขวาไม่ได้ ทำให้โครงสร้าง diffusion แบบนี้ทำได้ไม่ง่าย
การทดลองง่าย ๆ แบบนี้น่าสนใจเพราะช่วยให้เข้าใจหลักการได้เร็ว สิ่งที่น่าเสียดายของ text diffuser model คือมันต้องจัดการโทเค็นแบบไม่ต่อเนื่อง ไม่ใช่ค่าต่อเนื่อง ในภาพ พิกเซลเป็นค่าต่อเนื่องจึงใส่ noise ได้อย่างเป็นธรรมชาติ แต่โทเค็นข้อความไม่ใช่แบบนั้น โดยมากจึงต้องใช้การแทนที่ทั้งก้อน ถึงอย่างนั้นก็ยังมีหลายแนวทาง เช่น เติม noise ใน embedding space หรือเรียน embedding โดยตรง แต่ทั้งหมดซับซ้อนกว่าภาพ diffusion มาก
ฉันคาดหวังกับแนวทางแบบในงานนี้มากกว่า ซึ่งรวม continuous latent diffusion เข้ากับการสร้างข้อความแบบ autoregressive transformer และสามารถฝึก autoencoder กับ transformer พร้อมกันได้ (หรือจะแยกกันฝึกก็ได้)
ตอนฉันเจอ text diffusion model ครั้งแรกก็คิดว่า “นี่มันก็แค่ MLM ไม่ใช่เหรอ?” สิ่งที่ฉันสนใจคือ MaskGIT วิธีนี้จะเรียกว่า diffusion อย่างแท้จริงก็ต่อเมื่อโมเดลถูกฝึกให้แทนที่โทเค็นที่ผิดด้วยโทเค็นที่ถูก เพราะจุดแข็งของ continuous diffusion คือความทนทานต่อสัญญาณรบกวน แต่ในทางปฏิบัติ ไอเดียเรื่องสร้างโทเค็นที่ผิดจริง ๆ นั้นทำได้ไม่ง่าย เลยดูเหมือนยังไม่ค่อยมีใครลองมากนัก
ฉันเคยทดลอง MLM ระดับไบต์ UTF8 และลองทำ translation model แบบไม่เป็นทางการ โดยใช้ curriculum learning กับการทำให้เสียหายแบบสุ่มอย่างค่อยเป็นค่อยไป ถ้าจุดประสงค์มีแค่เพิ่ม noise ก็แค่แทน random index ด้วยค่าไบต์แบบสุ่มก็พอ เช่น ป้อนแพตเทิร์นด้านล่างนี้
จากนั้นก็ประเมิน target sequence ทั้งชุดซ้ำ ๆ เพื่อไม่ให้เกิดการเปลี่ยนแปลงแบบไม่ต่อเนื่องของโดเมนการฝึกเมื่อระดับความยากเพิ่มขึ้น สุดท้ายฉันก็เลิกสนใจเรื่องศัพท์หรือการจัดหมวดหมู่ไปเลย และหันไปสนใจแค่ว่า “มันใช้งานได้จริงไหม” มากกว่า “นี่เรียกว่า diffusion หรือเปล่า”
ฉันก็สงสัยเหมือนกันว่าถ้าเทียบกับ electra แล้วจะเป็นอย่างไร
ฉันเคยอยากลอง fine-tune โมเดลสำหรับ inline code completion เพื่อดูว่าจะได้ประสิทธิภาพใกล้เคียง cursor ไหม (ถึงในทางปฏิบัติจะคงยาก แต่ก็น่าสนุก) แต่ตอนนี้ยังไม่มี open diffusion model ที่เหมาะใช้เป็นฐานเลย ก็เลยกำลังรออยู่
สิ่งที่ทำให้ image diffusion model น่าสนใจคือมันสร้างภาพจาก noise แบบสุ่ม แต่ฉันสงสัยว่าเหตุใด text diffusion model ถึงเริ่มจากโทเค็นว่างที่ถูก mask ทั้งหมด แทนที่จะเริ่มจาก random token
มันขึ้นอยู่กับงานที่ต้องการทำ ถ้าเป็น text completion ธรรมดา ก็ป้อนประโยคอินพุตไปแบบไม่ mask แล้วให้โมเดลเติม mask token ที่ตามมา ถ้าต้องการอย่าง code editing ก็สามารถ mask เฉพาะส่วนที่จะแก้ แล้วให้มันเติมกลับทีละขั้นได้ จุดแข็งของ text diffusion model คือความสามารถในการแก้ไขจริงจัง เช่น code editing (ขณะที่ autoregressive LLM มักต้องมีระบบแยกต่างหากเพื่อแก้ผ่านคำสั่ง) ถ้าฝึกโมเดลให้มี code editing head ที่เหมาะมาก ๆ ก็อาจเพิ่มความเร็วและประสิทธิภาพของงานเขียนโค้ดจำนวนมากได้ ในอนาคตฟีเจอร์แบบนี้น่าจะถูกรวมเข้าไปอย่างเป็นธรรมชาติในระบบอย่าง GPT Codex
ไม่ใช่ทุกคนจะใช้วิธีเริ่มจากโทเค็นว่างทั้งหมด บางงานเริ่มจาก random token บางงานเริ่มจาก mask และบางงานเริ่มจาก embedding vector ก็มีความพยายามหลากหลายอยู่