2 คะแนน โดย GN⁺ 2025-05-17 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • เป็นการแนะนำโดยสังเขปเกี่ยวกับโครงสร้างและจุดประสงค์ของ 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 ประมาณค่าโดยทำตามขั้นตอนต่อไปนี้
    1. ขั้นบวก: สุ่มชั้นซ่อน h(0) จาก P(h | v(0)=ข้อมูล)
    2. ขั้นลบ: ทำ 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 ความคิดเห็น

 
GN⁺ 2025-05-17
ความคิดเห็นใน 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
    อยากรู้ว่ามีใครเข้าใจไหมว่าทำไมถึงเป็นแบบนั้น

    • ดูเหมือน Gibbs sampling จะถูกใช้เป็นวิธีประมาณค่าคาดหมายของการกระจายของโมเดล
      ค่านี้จำเป็นสำหรับคำนวณ gradient ของ log-likelihood แต่การอินทิเกรตการกระจายนั้นจัดการได้ยาก คล้ายกับวิธีใช้ MCMC เพื่อดึงตัวอย่างตัวแทนใน VAE ในโครงข่ายประสาทแบบ deep learning เราประเมิน gradient จาก batch ของชุดข้อมูล ไม่ใช่จากการกระจายความน่าจะเป็นที่โมเดลไว้อย่างชัดเจน
    • ผมไม่ใช่ผู้เชี่ยวชาญ แต่เคยได้รับการฝึกอย่างเป็นทางการด้านเบย์เซียนมาบ้าง ซึ่งรับมือกับปัญหาคล้ายกัน
      โดยทั่วไป Gibbs จะใช้เมื่อ gradient โดยตรงไม่เรียบง่าย หรือเมื่ออยากจำลองการกระจายทั้งตัว ไม่ใช่แค่ประมาณค่าแบบจุด แต่จะมีประโยชน์เมื่อมี marginal/conditional likelihood ที่สุ่มตัวอย่างได้ง่าย เนื่องจากโหนดที่มองเห็นได้แต่ละตัวขึ้นกับโหนดซ่อนแต่ละตัว และโหนดซ่อนแต่ละตัวก็ส่งผลต่อโหนดที่มองเห็นได้ทั้งหมด gradient จึงยุ่งเหยิงมาก ดังนั้น Gibbs sampling ที่ปรับตาม marginal likelihood จึงง่ายกว่ามาก
    • ผมอาจผิดก็ได้ แต่คิดว่าส่วนหนึ่งเป็นเพราะ โครงสร้างแบบไม่มีทิศทางของ RBM
      ดังนั้นจึงสร้าง computational graph แบบเดียวกับโครงข่ายประสาทแบบ feedforward ไม่ได้
  • เป็นคำอธิบายที่ดีและเรียบร้อย ทำให้นึกถึงความทรงจำเก่า ๆ มากมาย
    ขอโปรโมตแบบเขิน ๆ ว่าเมื่อหลายปีก่อนผมเคยทำ ภาพแสดงการฝึก RBM ไว้: https://www.youtube.com/watch?v=lKAy_NONg3g

  • เดโมเจ๋งมาก เมื่อ 15 ปีก่อนผมเรียนวิชา neural networks ของ Geoff Hinton ที่มหาวิทยาลัย และเขาอธิบาย Boltzmann machine อยู่หลายคาบ
    ประโยคที่ว่า “restricted Boltzmann machine เป็นกรณีพิเศษที่นิวรอนที่มองเห็นได้และนิวรอนซ่อนไม่ได้เชื่อมต่อกัน” นั้นผิด สำนวนนี้ฟังเหมือนหมายความว่านิวรอนที่มองเห็นได้ไม่ได้เชื่อมต่อกับนิวรอนซ่อน
    สำนวนที่ถูกคือ “นิวรอนที่มองเห็นได้ไม่เชื่อมต่อกันเอง และนิวรอนซ่อนก็ไม่เชื่อมต่อกันเอง” หรือจะพูดว่า “นิวรอนที่มองเห็นได้และนิวรอนซ่อนต่างก็ไม่มีการเชื่อมต่อภายในประเภทของตัวเอง” ก็ได้

    • ถ้ามองแบบนั้น ก็ไม่ค่อยเข้าใจว่ามันต่างจาก multilayer perceptron ธรรมดาตรงไหน Boltzmann machine ต่างกันอย่างไร?
      แก้ไข: โอเคแล้ว ผมไม่รู้ว่าต้องเลื่อนขึ้นไปดูภาพรวมเบื้องต้นด้านบน
      อย่างที่คอมเมนต์ [flagged][dead] ของ 0xTJ ว่าไว้ การพยายามดักจับหรือสร้างการเลื่อนขึ้นมาใหม่ไม่ใช่สิ่งที่ดี เป็นคำพูดที่ถูกต้องแล้ว