3 คะแนน โดย GN⁺ 2023-08-27 | 1 ความคิดเห็น | แชร์ทาง WhatsApp
  • บทความนี้อธิบายแนวคิดสำคัญอย่าง automatic differentiation โดยใช้ Python ซึ่งเป็นองค์ประกอบหลักของการฝึกโครงข่ายประสาทเทียม
  • ผู้เขียนเป็นวิศวกรแมชชีนเลิร์นนิงที่ใช้งานไลบรารีอย่าง Tensorflow และ Pytorch และมีเป้าหมายที่จะเขียนโค้ดที่ง่ายที่สุดสำหรับการทำ automatic differentiation
  • ผู้เขียนเริ่มจากการเขียนโค้ด Python ที่นำตัวแปรสองตัว x และ y มาบวกกัน แล้วกำหนดผลลัพธ์ให้กับตัวแปร z แต่ z ไม่ได้ติดตามตัวแปรที่ถูกใช้ไว้ จึงไม่สามารถอัปเดตค่าของ z โดยอัตโนมัติได้เมื่อค่า x หรือ y เปลี่ยนไป
  • เพื่อแก้ปัญหานี้ ผู้เขียนจึงแนะนำคลาส Tensor ที่รองรับการคำนวณเชิงสัญลักษณ์สำหรับตัวแปร โดยในคลาสนี้มีการ override การดำเนินการบวก
  • คลาส Tensor ถูกพัฒนาต่อโดยใช้ binary tree แต่ละเทนเซอร์สามารถเก็บเทนเซอร์อีกสองตัวและการดำเนินการที่สร้างมันขึ้นมาได้ ซึ่งทำได้ผ่านการเพิ่มทูเพิล Children
  • ผู้เขียนเพิ่มเมธอด forward เข้าไปในคลาส Tensor เพื่อรัน computation graph และคำนวณค่าจริงของเทนเซอร์
  • ผู้เขียนนำ automatic differentiation เข้าสู่ computation graph โดยเพิ่มการหาอนุพันธ์สำหรับการดำเนินการพื้นฐานที่คลาส Tensor รองรับ การเรียกซ้ำของฟังก์ชัน grad จะไล่ไปตาม computation graph และแยกฟังก์ชันที่ซับซ้อนออกเป็นการประกอบกันของฟังก์ชันที่เรียบง่ายกว่า
  • คลาส Tensor ถูกขยายให้รองรับสูตรที่ซับซ้อนขึ้นด้วยการเพิ่มการดำเนินการอื่น ๆ เช่น การลบ การหาร การยกกำลัง และการทำเครื่องหมายลบ
  • ผู้เขียนสาธิตการใช้งานคลาส Tensor ด้วยการสร้างสูตรที่ซับซ้อนและหาอนุพันธ์ของมัน
  • ผู้เขียนสรุปด้วยการเสนอแนวทางปรับปรุงและเพิ่มประสิทธิภาพที่เป็นไปได้สำหรับคลาส Tensor เช่น การเพิ่มการดำเนินการสำหรับอาร์เรย์ขนาดใดก็ได้ การหยุดการไล่กราฟที่โหนดซึ่งไม่ขึ้นกับเทนเซอร์ x และการตั้งค่าแคชเพื่อหลีกเลี่ยงการคำนวณซ้ำ
  • บทความนี้มีเป้าหมายเพื่อช่วยให้ผู้อ่านเข้าใจว่า automatic differentiation ถูกนำมาใช้กับการเพิ่มประสิทธิภาพและการฝึกโครงข่ายประสาทเทียมอย่างไร

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

 
GN⁺ 2023-08-27
ความคิดเห็นจาก Hacker News
  • ผู้อ่านชื่นชมการสาธิตโค้ดที่กระชับและงดงามซึ่งช่วยให้เข้าใจแนวคิดที่ซับซ้อนได้ง่ายขึ้น
  • คำอธิบายเรื่อง automatic differentiation ในบทความครอบคลุมเฉพาะกรณีที่กราฟเป็นต้นไม้เท่านั้น จึงดูเป็นการทำให้ง่ายเกินไป และไม่ได้กล่าวถึงกราฟมีทิศทางแบบไม่มีวงจรที่ซับซ้อนกว่านั้น
  • ผู้อ่านบางคนมองว่า automatic differentiation น่าสนใจมาก และได้เขียนบทนำในแบบของตนเองเกี่ยวกับแนวคิดนี้
  • มีผู้อ่านคนหนึ่งแชร์ autodiff เวอร์ชันของตนเองที่เขียนด้วย Python 26 บรรทัด
  • เทคนิคที่ถูกพูดถึงมีความคล้ายกับสิ่งที่ใช้ใน "การติดตามการพึ่งพา" และในระบบ Knowledge Based Engineering ที่ใช้ลดการคำนวณในโมเดล 3D แบบพาราเมตริกขนาดใหญ่
  • วิดีโอของ Andrej Karpathy เกี่ยวกับการสร้างเอนจิน autograd ได้รับการแนะนำว่าให้มุมมองเชิงลึกที่ดี
  • ผู้อ่านบางคนเสนอว่า automatic differentiation ไม่จำเป็นต้องสร้าง operation graph เสมอไป แต่สามารถคำนวณค่าที่เกี่ยวข้องได้ทันที
  • มีข้อเสนอว่าการอธิบาย autodiff ว่าเป็น numerical chain rule จะทำให้เข้าใจได้ชัดเจนกว่า
  • มีการตั้งคำถามถึงเหตุผลในการเรียกคลาสนี้ว่า tensor
  • ความเรียบง่ายของการ implement ทำให้ผู้อ่านบางคนประหลาดใจ และทำให้แนวคิดนี้เข้าถึงได้ง่ายกว่าที่เคยคิดไว้ในตอนแรก
  • การ implement นี้ถูกนำไปเปรียบเทียบกับ free monad ของ Haskell ซึ่งแสดงให้เห็นความเชื่อมโยงข้ามภาษาที่เกี่ยวข้องกับบทความนี้