Boltzmann Machine ขนาดจิ๋ว
(eoinmurray.info)- เป็นการแนะนำโดยสังเขปเกี่ยวกับโครงสร้างและจุดประสงค์ของ Boltzmann machine
- นิยาม ฟังก์ชันพลังงาน และการแจกแจงความน่าจะเป็นด้วยสมการ
- อนุมานกฎการอัปเดตของ น้ำหนักและไบแอส ผ่านการดิฟเฟอเรนเชียล
- อธิบายวิธีประมาณค่าคาดหมายของโมเดลผ่าน ขั้นบวก·ขั้นลบ และ Gibbs sampling
- สรุปอัลกอริทึม Contrastive Divergence แบบครบภาพในตอนท้าย
แนวคิดของ Boltzmann machine และ Contrastive Divergence
- ใน Boltzmann machine จะมีชั้นอินพุต (visible layer) และชั้นซ่อน (hidden layer) รวมถึง เมทริกซ์น้ำหนัก ที่เชื่อมทั้งสองชั้น และ เวกเตอร์ไบแอส ของแต่ละชั้น
ฟังก์ชันพลังงานและการแจกแจงความน่าจะเป็น
-
ฟังก์ชันพลังงานนิยามในรูปเมทริกซ์ได้ดังนี้
E(v, h) = -ΣiΣj wij vi hj - Σi bi vi - Σj cj hj- v: เวกเตอร์ของชั้นมองเห็น, h: เวกเตอร์ของชั้นซ่อน, w: น้ำหนัก, b/c: ไบแอสของแต่ละชั้น
-
การแจกแจงร่วม ของ Boltzmann machine คือ
P(v, h) = (1/Z) * exp(-E(v, h))- Z (partition function) ทำหน้าที่ทำให้การแจกแจงความน่าจะเป็นเป็น normalized
log-likelihood และการดิฟเฟอเรนเชียล
-
การเรียนรู้ดำเนินไปโดยทำให้ likelihood ของข้อมูลฝึกมีค่าสูงสุด
log(P(v)) = log(Σh exp(-E(v, h))) - log(Z) -
อนุพันธ์ย่อยของ log-likelihood ต่อค่าน้ำหนัก wij คือ
∂(log P(v))/∂wij = <vi hj>ข้อมูล - <vi hj>โมเดล- < · >ข้อมูล: ค่าคาดหมายจากข้อมูลจริง
- < · >โมเดล: ค่าคาดหมายจากข้อมูลที่โมเดลสร้างขึ้น
กฎการเรียนรู้ของน้ำหนักและไบแอส
- น้ำหนักและไบแอสอัปเดตดังนี้
- Δwij = η(<vi hj>ข้อมูล - <vi hj>โมเดล)
- Δbi = η(<vi>ข้อมูล - <vi>โมเดล)
- Δcj = η(<hj>ข้อมูล - <hj>โมเดล)
- η คืออัตราการเรียนรู้
อัลกอริทึม Contrastive Divergence
- ค่าคาดหมายของโมเดล < · >โมเดล คำนวณโดยตรงได้ยาก จึงใช้ Gibbs sampling
- Contrastive Divergence ประมาณค่าโดยทำตามขั้นตอนต่อไปนี้
- ขั้นบวก: สุ่มชั้นซ่อน h(0) จาก P(h | v(0)=ข้อมูล)
- ขั้นลบ: ทำ Gibbs sampling ซ้ำ k ครั้ง
- สุ่มสลับกันเป็น v(t+1) ~ P(v | h(t)), h(t+1) ~ P(h | v(t))
- ในมุมมองของการอัปเดต จะใช้ความต่างระหว่างค่าคาดหมายของข้อมูลและค่าคาดหมายของโมเดล
- Δwij = η(<vi hj>ข้อมูล - <vi hj>โมเดล)
- Δbi = η(<vi>ข้อมูล - <vi>โมเดล)
- Δcj = η(<hj>ข้อมูล - <hj>โมเดล)
สรุป
- แก่นของการเรียนรู้ใน Boltzmann machine คือการเป็น energy-based model ที่มุ่งลดความต่างของค่าคาดหมายระหว่างข้อมูลจริงกับการแจกแจงที่โมเดลสร้างขึ้น
- Contrastive Divergence คือวิธีฝึกหลักที่ช่วยประมาณความต่างนี้ได้อย่างรวดเร็วและมีประสิทธิภาพ
- มันทำหน้าที่เชื่อมการแจกแจงของโมเดลกับข้อมูลจริงผ่าน Gibbs sampling และอัปเดตน้ำหนักกับไบแอสซ้ำ ๆ เพื่อให้ Boltzmann machine แทนข้อมูลได้ดี
1 ความคิดเห็น
ความคิดเห็นใน Hacker News
นึกถึงสมัยปี 1990 ที่ผมสร้าง “นิวรอน” ด้วยอาร์เรย์ของ void pointer ในภาษา C ล้วน ๆ เพื่อทำ Boltzmann machine และเพอร์เซปตรอน
ตอนนั้นสิ่งที่ทำในชื่อ “AI” ก็ประมาณทำนายโน้ตตัวถัดไปของเมโลดี้ MIDI หรือจำแนกรูปร่างโน้ตตัวกลม·โน้ตตัวขาว·โน้ตตัวดำ·โน้ตเขบ็ตหนึ่งชั้น บนกริดจุด 5×9 และถ้าได้ ความแม่นยำ 85% ก็ถือว่า “ดีพอ” แล้ว
การอ่านโน้ตจากบรรทัดห้าเส้นฟังดูเป็นโปรเจกต์ที่น่าสนุก โดยเฉพาะถ้าสร้างเองตั้งแต่ต้นเหมือนตัวอย่างโครงข่ายประสาทสำหรับตัวเลขของ 3Blue1Brown[1]
ถ้าผสมกับของอย่าง Chuck[2] ก็อาจทำแอปพลิเคชันที่ใช้เทคโนโลยีปัจจุบันและรันฝั่งไคลเอนต์ล้วน ๆ ได้เลย
[1] - https://www.3blue1brown.com/lessons/neural-networks
[2] - https://chuck.stanford.edu/
อยากรู้ว่าเอาต์พุตฟังดูเป็นเพลงไหม
เท่าที่เข้าใจ Harmonium (Smolensky) คือ restricted Boltzmann machine ตัวแรก แต่แทนที่จะลด “พลังงาน” ให้ต่ำสุด กลับเพิ่ม “ความกลมกลืน” ให้สูงสุด
ตอนที่ Smolensky, Hinton และ Rummelhart ร่วมงานกัน ดูเหมือนพวกเขาจะเรียกสิ่งนี้ว่า “goodness of fit” บทความ Harmonium[1] อ่านดีมากจริง ๆ และแน่นอนว่า Hinton กลายเป็นซูเปอร์สตาร์ ส่วน Smolensky ก็เขียนหนังสือเล่มยาว ๆ เกี่ยวกับภาษาศาสตร์ อยากรู้ว่ามีใครรู้ประวัติส่วนนี้มากกว่านี้ไหม
[1] https://stanford.edu/~jlmcc/papers/PDP/Volume%201/Chap6_PDP8...
บทความน่าสนใจเกี่ยวกับ David Ackley: https://news.unm.edu/news/24-nobel-prize-in-physics-cited-gr...
T2 Tile Project ก็ควรค่าแก่การดูเช่นกัน
คุณค่าของนักศึกษาบัณฑิตมักถูกประเมินต่ำไป แต่ในความเป็นจริงพวกเขามีส่วนสำคัญอย่างมหาศาล และต่อมาก็ช่วยพัฒนางานวิจัยให้ไปไกลขึ้น งานวิจัยผลักดันอะไรต่ออะไรไปข้างหน้ามากมายขนาดนั้น แต่ผมไม่เข้าใจว่าทำไมสหรัฐฯ ถึงมองงานวิจัยเหมือนเป็นความสูญเปล่า
ผมอ่านชื่อผิดเป็น “A Tiny Boltzmann Brain”[0]
ใจตามธรรมชาติของผมไขปริศนาได้ทันที คิดว่าเป็นกรณีที่ใส่น้ำหนักที่สุ่มสร้างลงในโมเดลขนาดจิ๋ว แล้วทดสอบว่ามันทำอะไรที่มีประโยชน์จริงหรือไม่ เพราะสุดท้ายแล้ว ยิ่งโมเดลเล็ก การสุ่มล้วน ๆ ก็ยิ่งมีโอกาสสร้างสิ่งที่น่าสนใจเมื่อเทียบกับขนาดได้มากขึ้น
ผมยอมรับการแก้ไข แต่ไม่ได้ท้อถอย ขอเสนอคลาสโมเดลใหม่ชื่อ “Unbiased-Architecture Instant Boltzmann Model” (UA-IBM) สักวันหนึ่งถ้ามีควอนตัมคอมพิวเตอร์ที่ใหญ่พอ เราอาจตั้งชุดข้อมูลทั้งหมดให้เป็นข้อจำกัดแบบคลาสสิกของโมเดลที่นิยามด้วยค่าที่ทำให้เป็นอนุกรมจำนวน N ค่า ซึ่งแทนพารามิเตอร์และการตั้งค่าโครงสร้างทั้งหมด จากนั้นให้ระบบควอนตัมที่มี N คิวบิตวางพารามิเตอร์และโครงสร้างที่เป็นไปได้ทั้งหมดไว้ในสถานะซ้อนทับเชิงควอนตัม แล้วทำการอนุมานหนึ่งขั้นกับตัวอย่างคลาสสิกทั้งหมด ก่อนยุบผลลัพธ์เพื่อรับพารามิเตอร์และโครงสร้างของโมเดลที่ดีที่สุดหรือเกือบดีที่สุดกลับมาในรูปแบบคลาสสิก
อยากรู้ว่ามีใครมีคิวบิตเหลือพอให้ลองทำไหม ทั้งที่ทุกอย่างเป็นควอนตัม แต่ก็ยังลื่นไหลจับยากจนแทบใช้ประโยชน์ไม่ได้ นับเป็นเรื่องย้อนแย้ง
ถ้าเป็นฉากนิยายวิทยาศาสตร์ ลองจินตนาการว่าสปีชีส์ต่างดาววิวัฒน์เซนเซอร์ควอนตัมแบบใช้ครั้งเดียวขึ้นมา แล้วสิ่งนั้นนำไปสู่ระบบประสาทรับความรู้สึกและระบบประสาทแบบควอนตัมทั้งชุด ก่อนจะพัฒนาเป็น ปัญญาควอนตัม อย่างสมบูรณ์ตั้งแต่ต้น สังคมและเส้นทางเทคโนโลยีแบบนั้นจะหน้าตาเป็นอย่างไร หวังว่าพวกเขาจะอยู่ในวงโคจรใกล้หลุมดำ เพื่อไม่ให้ความก้าวหน้าแบบระเบิดยังมาคุกคามเรา แล้ววันหนึ่งพวกเขาก็หนีออกจากบ่อแรงโน้มถ่วงได้…
[0] https://en.wikipedia.org/wiki/Boltzmann_brain
อธิบายได้ดีมาก แต่ขอหมายเหตุว่าไม่รู้เพราะอะไร การเลื่อนด้วยเมาส์ ไวเกินไปมาก
เดาว่าบนมือถือการปัดน่าจะโอเค แต่ยังไม่ได้ตรวจสอบ ทุกครั้งที่พยายามเลื่อน มันเด้งจาก “หน้า” แรกไป “หน้า” สุดท้าย แล้วก็ย้อนกลับมาอีก โชคดีที่อินพุตจากคีย์บอร์ดยังใช้ได้ เลยอ่านบทความทั้งหมดได้
ถ้าผมเข้าใจถูก แทนที่จะใช้ การส่งต่อไปข้างหน้าและย้อนกลับตาม gradient แบบโครงข่ายประสาทที่เราคุ้นเคยทุกวันนี้ ดูเหมือนการคำนวณอัปเดตน้ำหนักต้องใช้ Gibbs sampling
อยากรู้ว่ามีใครเข้าใจไหมว่าทำไมถึงเป็นแบบนั้น
ค่านี้จำเป็นสำหรับคำนวณ gradient ของ log-likelihood แต่การอินทิเกรตการกระจายนั้นจัดการได้ยาก คล้ายกับวิธีใช้ MCMC เพื่อดึงตัวอย่างตัวแทนใน VAE ในโครงข่ายประสาทแบบ deep learning เราประเมิน gradient จาก batch ของชุดข้อมูล ไม่ใช่จากการกระจายความน่าจะเป็นที่โมเดลไว้อย่างชัดเจน
โดยทั่วไป Gibbs จะใช้เมื่อ gradient โดยตรงไม่เรียบง่าย หรือเมื่ออยากจำลองการกระจายทั้งตัว ไม่ใช่แค่ประมาณค่าแบบจุด แต่จะมีประโยชน์เมื่อมี marginal/conditional likelihood ที่สุ่มตัวอย่างได้ง่าย เนื่องจากโหนดที่มองเห็นได้แต่ละตัวขึ้นกับโหนดซ่อนแต่ละตัว และโหนดซ่อนแต่ละตัวก็ส่งผลต่อโหนดที่มองเห็นได้ทั้งหมด gradient จึงยุ่งเหยิงมาก ดังนั้น Gibbs sampling ที่ปรับตาม marginal likelihood จึงง่ายกว่ามาก
ดังนั้นจึงสร้าง computational graph แบบเดียวกับโครงข่ายประสาทแบบ feedforward ไม่ได้
เป็นคำอธิบายที่ดีและเรียบร้อย ทำให้นึกถึงความทรงจำเก่า ๆ มากมาย
ขอโปรโมตแบบเขิน ๆ ว่าเมื่อหลายปีก่อนผมเคยทำ ภาพแสดงการฝึก RBM ไว้: https://www.youtube.com/watch?v=lKAy_NONg3g
เดโมเจ๋งมาก เมื่อ 15 ปีก่อนผมเรียนวิชา neural networks ของ Geoff Hinton ที่มหาวิทยาลัย และเขาอธิบาย Boltzmann machine อยู่หลายคาบ
ประโยคที่ว่า “restricted Boltzmann machine เป็นกรณีพิเศษที่นิวรอนที่มองเห็นได้และนิวรอนซ่อนไม่ได้เชื่อมต่อกัน” นั้นผิด สำนวนนี้ฟังเหมือนหมายความว่านิวรอนที่มองเห็นได้ไม่ได้เชื่อมต่อกับนิวรอนซ่อน
สำนวนที่ถูกคือ “นิวรอนที่มองเห็นได้ไม่เชื่อมต่อกันเอง และนิวรอนซ่อนก็ไม่เชื่อมต่อกันเอง” หรือจะพูดว่า “นิวรอนที่มองเห็นได้และนิวรอนซ่อนต่างก็ไม่มีการเชื่อมต่อภายในประเภทของตัวเอง” ก็ได้
แก้ไข: โอเคแล้ว ผมไม่รู้ว่าต้องเลื่อนขึ้นไปดูภาพรวมเบื้องต้นด้านบน
อย่างที่คอมเมนต์ [flagged][dead] ของ 0xTJ ว่าไว้ การพยายามดักจับหรือสร้างการเลื่อนขึ้นมาใหม่ไม่ใช่สิ่งที่ดี เป็นคำพูดที่ถูกต้องแล้ว