- บทความนี้อธิบายแนวคิดสำคัญอย่าง 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 ความคิดเห็น
ความคิดเห็นจาก Hacker News