ข้าม​ไป​ยัง​เนื้อหา

Hebb’s Law

“เซลล์​ประสาท​ที่​ทำงาน​พร้อม​กัน จะ​เชื่อม​โยง​เข้า​ด้วย​กัน”

Hebb’s Law เป็น​หลักการ​พื้นฐาน​ใน​ประสาท​วิทยา เสนอ​โดย Donald Hebb ใน​หนังสือ The Organization of Behavior (1949) ข้อความ​ต้นฉบับ​ของ Hebb ยาว​และ​เจาะจง​กว่า​ที่​คน​ทั่วไป​จำ​กัน​ว่า

“When an axon of cell A is near enough to excite a cell B and repeatedly or persistently takes part in firing it, some growth process or metabolic change takes place in one or both cells such that A’s efficiency, as one of the cells firing B, is increased”

จุด​ที่​มัก​ถูก​มอง​ข้าม​คือ Hebb เน้น​เรื่อง ลำดับ​เวลา — เซลล์ A ต้อง​ยิง​สัญญาณ ก่อน เซลล์ B ซ้ำ ๆ ไม่ใช่​แค่​ยิง​พร้อม​กัน​เฉย ๆ วลี​ที่​คน​จดจำ​กัน​ติดปาก “cells that fire together, wire together” (บาง​แหล่ง​ใช้ “neurons that fire together, wire together”) จริง ๆ แล้ว​ไม่ใช่​คำ​พูด​ของ Hebb เอง แต่​เป็นการ​สรุป​ของ​นัก​ประสาท​วิทยา Carla Shatz ในปี 1992 ซึ่ง​ทำให้​เข้าใจ​ง่าย​ขึ้น​แต่​ก็​ตัด​รายละเอียด​เรื่อง​ลำดับ​เวลา​ออก​ไป

แก่น​ของ​กฎ​คือ ประสิทธิภาพ​การ​ส่ง​สัญญาณ​ระหว่าง​เซลล์​ประสาท​สอง​เซลล์​จะ​เพิ่ม​ขึ้น​เมื่อ​ถูก​กระตุ้น​ร่วม​กัน​ซ้ำ ๆ กลไก​ทาง​ชีวภาพ​เบื้องหลัง​เรียก​ว่า long-term potentiation (LTP) — งาน​ของ Eric Kandel บน​หอย​ทะเล Aplysia californica ให้​หลักฐาน​เชิง​ทดลอง​ว่า LTP ร่วม​กับ​กลไก presynaptic facilitation เป็น​พื้นฐาน​ของ​การ​เรียนรู้​แบบ​มี​เงื่อนไข (classical conditioning) นี่​คือ​รากฐาน​ทาง​ชีวภาพ​ของ “ความ​เคยชิน” ทุก​ชนิด ตั้งแต่​การ​เรียนรู้​ภาษา​ไป​จนถึง​การ​ฝึกฝน​ทักษะ

Hebb’s Law มี​สอง​เส้นทาง​ที่​ส่ง​อิทธิพล​ต่อ​วงการ​ซอฟต์แวร์​อย่าง​ชัดเจน

เส้นทาง​ที่​หนึ่ง — เป็น​รากฐาน​คณิตศาสตร์​ของ artificial neural networks กฎ​การ​อัปเดต​น้ำหนัก​แบบ Hebbian ถูก​นำ​ไป​ใช้​ตรง ๆ ใน Hopfield network ซึ่ง​เป็น model associative memory ยุค​แรก ๆ สูตร​คือ w_ij = (1/N) * Σ ξ_i^μ ξ_j^μ — น้ำหนัก​การ​เชื่อม​ต่อ​ระหว่าง​นิว​รอน​สอง​ตัว​จะ​ถูก​เสริม​แรง​ตาม​ความ​สัมพันธ์ (correlation) ของ​การกระตุ้น​ใน​แต่ละ pattern ที่​บันทึก​ไว้ คุณสมบัติ​สำคัญ​ของ​กฎ​นี้​คือ local (น้ำหนัก​ขึ้น​กับ​สถานะ​ของ​สอง​ปลายทาง​เชื่อม​ต่อ​เท่านั้น), incremental (เรียนรู้ pattern ใหม่​ได้​โดย​ไม่​ต้อง​อ้างอิง​ของ​เก่า) และ immediate (คำนวณ​เสร็จ​ใน​จำนวน​ขั้นตอน​จำกัด) แนวคิด​นี้​เป็น​แรง​บันดาล​ใจ​ตั้งต้น​ให้​กับ connectionism และ unsupervised learning ก่อน​ที่ backpropagation จะ​กลาย​เป็น​วิธี​ฝึก deep network หลัก​ใน​ยุค​หลัง

เส้นทาง​ที่​สอง — เป็น​อุปมา​สำหรับ “นิสัย” และ “ทักษะ” ใน​งาน​วิศวกรรม​ซอฟต์แวร์ เพราะ​กลไก​เดียวกัน​ที่​ทำให้ synapse แข็งแรง​ขึ้น​จาก​การ​ยิง​ซ้ำ ก็​คือ​กลไก​ที่​ทำให้ deliberate practice ได้​ผล — งาน​วิจัย​ชี้​ว่า motor skills ง่าย ๆ แสดง​ผล​ของ​การ​เสริม​แรง​เส้นทาง​ประสาท​ได้​ภายใน 2-4 สัปดาห์ ส่วน​รูปแบบ​พฤติกรรม​หรือ​ความคิด​ที่​ซับซ้อน​กว่า​อาจ​ต้อง​ฝึก​ซ้ำ 2-6 เดือน และ​การ​นอน​หลับ​ระหว่าง​รอบ​ฝึก​มี​บทบาท​สำคัญ​ใน​การ​ทำให้การ​เชื่อม​ต่อ​ใหม่​มั่นคง (consolidation) ทีม​วิศวกร​ที่​ทำ ritual ซ้ำ ๆ ร่วม​กัน — pairing, code review, retro — กำลัง​ทำ​สิ่ง​เดียวกัน​กับ​ที่ synapse ทำ: กิจกรรม​ที่​เกิด​ร่วม​กัน​ซ้ำ ๆ จะ “เชื่อม” เป็น​นิสัย​หรือ convention ของ​ทีม ไม่​ว่า​นิสัย​นั้น​จะ​ดี​หรือ​ไม่​ก็ตาม

  • Hopfield networks และ associative memory — นี่​คือ​การ​ใช้ Hebb’s Law แบบ​ตรง​ตัว​ที่สุด​ใน​ซอฟต์แวร์ เครือข่าย​จะ​จดจำ pattern โดย​ปรับ​น้ำหนัก​ตาม correlation ของ​การกระตุ้น​นิว​รอน​คู่ ๆ เมื่อ​ได้​รับ input ที่​เป็น pattern บาง​ส่วน​หรือ​มี noise เครือข่าย​จะ “คืน​ค่า” pattern เต็ม​ที่​เคย​เรียนรู้​ไว้​ได้ — เป็นต้นแบบ​ทาง​คณิตศาสตร์​ของ model self-organizing และ embedding รุ่น​หลัง
  • Test-Driven Development และ Red-Green-Refactor — การ​ทำ TDD ซ้ำ ๆ (เขียน test ที่ fail → เขียน code ให้​ผ่าน → refactor) คือ​การ​ฝึก​ให้ “การ​เขียน test ก่อน code” กับ “ความ​มั่นใจ​ใน​การ refactor” เกิด​ร่วม​กัน​ซ้ำ​จน​กลาย​เป็น​ปฏิกิริยา​อัตโนมัติ​ของ​นัก​พัฒนา — เมื่อ​ทำ​จน​เป็น muscle memory การ​ข้าม​ขั้นตอน​ใด​ขั้นตอน​หนึ่ง​จะ​รู้สึก “ผิด​ที่” ทันที
  • Pair/Mob Programming — เมื่อ​นัก​พัฒนา​สอง​คน​ขึ้น​ไป​ทำงาน​พร้อม​กัน​บน​ปัญหา​เดียวกัน​ซ้ำ ๆ ความคิด​ของ​ทั้ง​คู่​จะ “co-activate” บ่อย​ครั้ง​พอที่​คำ​ศัพท์ แนวคิด และ​วิธี​แก้​ปัญหา​จะ​กลาย​เป็น​ภาษา​กลาง​ของ​ทีม ผลลัพธ์​คือ​ทีม​ที่​สื่อสาร​กัน​ได้​เร็ว​ขึ้น​ใน​ระยะ​ยาว — ปรากฏการณ์​เดียวกัน​นี้​อธิบาย​ว่า​ทำไม​โครงสร้าง​การ​สื่อสาร​ของ​ทีม​มัก​สะท้อน​ออก​มา​เป็น​โครงสร้าง​ของ​ระบบ (ดู Conway’s Law)
  • Code review ที่​ทำซ้ำ​อย่าง​สม่ำเสมอ — เมื่อ reviewer เตือน​เรื่อง naming convention หรือ​รูปแบบ​เดิม ๆ ซ้ำ ๆ ทุก​สัปดาห์ ทีม​จะ​ซึมซับ​รูปแบบ​นั้น​จน​กลาย​เป็น​ค่า​เริ่มต้น​โดย​ไม่​ต้อง​เตือน​อีก​ต่อ​ไป — นี่​คือ Hebb’s Law ใน​ระดับ​วัฒนธรรม​ทีม
  • ด้าน​ตรง​ข้าม: การ​เสริม​แรง anti-pattern — ถ้า​ทีม​แก้ bug ด้วย​การ​แปะ patch เฉพาะ​หน้า​ซ้ำ ๆ โดย​ไม่มี​ใคร​ทักท้วง พฤติกรรม​นั้น​ก็​จะ “wire” เข้า​เป็น​วิธี​ทำงาน​ปกติ​เช่น​กัน — Hebb’s Law ไม่​แยกแยะ​ว่า​สิ่ง​ที่​ถูก​เสริม​แรง​คือ​ของดี​หรือ​ของ​แย่
  • ออกแบบ​การ​ฝึก​ซ้ำ​โดย​ตั้งใจ — ถ้า​อยาก​ให้​ทีม​มี​นิสัย​ที่​ดี (เขียน test ก่อน, รีวิว code อย่าง​สม่ำเสมอ, deploy บ่อย ๆ ด้วย​ขั้นตอน​เดิม) ต้อง​ออกแบบ​ให้​กิจกรรม​เหล่า​นั้น​เกิด​ซ้ำ​อย่าง​สม่ำเสมอ​และ​มี​ผล​ตอบ​รับ​ที่​ชัดเจน ไม่ใช่​หวัง​ให้​เกิด​ขึ้น​เอง
  • ระวัง​การ​เสริม​แรง​สิ่ง​ที่​ไม่​อยาก​ได้ — technical debt, hack เฉพาะ​หน้า หรือ workaround ที่​ไม่มี​ใคร​ท้วงติง จะ​ถูก​เสริม​แรง​ด้วย​กลไก​เดียวกัน จน​กลาย​เป็น “ธรรมเนียม” ของ​ทีม​โดย​ไม่มี​ใคร​ตั้งใจ การ​หยุด​วงจร​นี้​ต้องการ feedback loop ที่​ตั้งใจ เช่น code review, retro หรือ Boy Scout Rule
  • ความ​สม่ำเสมอ​สำคัญ​กว่า​ความ​เข้มข้น — งาน​วิจัย​ด้าน​การ​เรียนรู้​ชี้​ว่าการ​ฝึก​ซ้ำ​สม่ำเสมอ (spaced repetition) มี​ผล​ต่อ​การ​เสริม​แรง​เส้นทาง​มากกว่า​การ​ฝึก​หนัก​ครั้ง​เดียว แปล​เป็น​บริบท​ทีม: การ​ทำ retro ทุก​สอง​สัปดาห์​มี​ผล​ยั่งยืน​กว่า​การ​จัด workshop ใหญ่​ปี​ละ​ครั้ง
  • โครงสร้าง​ทีม​จะ “wire” เป็น​โครงสร้าง​ระบบ — เมื่อ​ทีม​สื่อสาร​กัน​เป็น​รูปแบบ​ใด​ซ้ำ ๆ รูปแบบ​นั้น​จะ​ฝัง​ลง​ใน​สถาปัตยกรรม​ของ​ระบบ​ที่​ทีม​สร้าง ทำให้การ​จัด​ทีม​เป็น​เครื่องมือ​ออกแบบ​สถาปัตยกรรม​ทาง​อ้อม​เสมอ
  • แยกแยะ correlation จาก causation — Hebb เอง​เน้น​ว่า A ต้อง​ยิง​ก่อน B (temporal precedence) ไม่ใช่​แค่​เกิด​พร้อม​กัน ใน​ทีม​ก็​เช่น​กัน: สอง​พฤติกรรม​ที่​มัก​เกิด​พร้อม​กัน (เช่น “deploy วัน​ศุกร์” กับ “เหตุ​ขัดข้อง”) อาจ​ไม่​ได้​มี​ความ​สัมพันธ์​เชิง​เหตุ-ผล​จริง ต้อง​ตรวจสอบ​ก่อน​สรุป​เป็น​กฎ​ของ​ทีม