คำตอบสั้น ๆ สองข้อ
คำตอบสั้น ๆ จากมุมมองทางทฤษฎีคือ ...
กราฟการคำนวณแบบไดนามิกเป็นระบบที่ไม่แน่นอนที่แสดงเป็นกราฟโดยตรงของการไหลของข้อมูลระหว่างการดำเนินการ มันสามารถมองเห็นเป็นรูปร่างที่มีข้อความที่เชื่อมต่อโดยลูกศรโดยจุดยอด (รูปร่าง) แสดงถึงการดำเนินการกับข้อมูลที่ไหลไปตามขอบ (ลูกศร)
โปรดทราบว่ากราฟดังกล่าวจะกำหนดการพึ่งพาในการไหลของข้อมูล แต่ไม่จำเป็นต้องเป็นคำสั่งชั่วคราวของการใช้งานของการดำเนินงานซึ่งอาจกลายเป็นคลุมเครือในการเก็บรักษาของรัฐในจุดยอดหรือรอบในกราฟโดยไม่มีกลไกเพิ่มเติม
คำตอบสั้น ๆ จากมุมมองการพัฒนาแอปพลิเคชันคือ ...
เฟรมเวิร์กกราฟการคำนวณแบบไดนามิกเป็นระบบของไลบรารีอินเทอร์เฟซและส่วนประกอบที่ให้ความยืดหยุ่นโปรแกรมเวลาทำงานที่อำนวยความสะดวกในการสร้างและปรับเปลี่ยนระบบโดยการเชื่อมต่อระบบปฏิบัติการที่แน่นอน
PyTorch Framework
PyTorch เป็นการรวมกันของเฟรมเวิร์ก Torch กับภาษา Python และการจัดโครงสร้างข้อมูล คบเพลิงแข่งขันกับ Theano, TensorFlow และกรอบการสร้างระบบคำนวณแบบไดนามิกอื่น ๆ
——— แนวทางเพิ่มเติมเพื่อความเข้าใจ ———
โครงสร้างการคำนวณโดยพลการของเทนเซอร์แบบไม่ต่อเนื่องโดยพลการ
หนึ่งในองค์ประกอบที่สามารถใช้ในการสร้างระบบการคำนวณเป็นองค์ประกอบที่ออกแบบมาเพื่อเชื่อมต่อระหว่างกันเพื่อสร้างเครือข่ายประสาท ความพร้อมใช้งานของสิ่งเหล่านี้รองรับการเรียนรู้อย่างลึกซึ้งในการก่อสร้างและการขยายเครือข่ายนิวรัล ความหลากหลายของระบบอื่น ๆ ที่เกี่ยวข้องกับการประกอบชิ้นส่วนที่ทำงานกับข้อมูลหลายมิติที่อาจเกิดขึ้นในโครงสร้างการคำนวณที่กำหนดโดยพลสามารถสร้างได้
ข้อมูลสามารถเป็นค่าสเกลาร์เช่นตัวเลขจำนวนจุดลอยตัวจำนวนเต็มหรือสตริงหรือการรวมกันของฉากเหล่านี้เช่นเวกเตอร์เมทริกซ์คิวบ์คิวบ์หรือไฮเปอร์คิวบ์ การดำเนินการในลักษณะทั่วไปของรูปแบบข้อมูลเหล่านี้คือเทนเซอร์แบบแยกและโครงสร้างที่สร้างขึ้นจากการประกอบของเทนเซอร์ในการทำงานเข้าสู่ระบบการทำงานคือการไหลของข้อมูล
จุดอ้างอิงเพื่อทำความเข้าใจแนวคิดการคำนวณแบบไดนามิก
กราฟการคำนวณแบบไดนามิกไม่ใช่แนวคิดใหม่โดยเฉพาะแม้ว่าคำศัพท์จะค่อนข้างใหม่ ความสนใจใน DCGs ในหมู่นักวิทยาศาสตร์คอมพิวเตอร์ไม่ใช่เรื่องใหม่เท่ากับคำว่า Data Scientist อย่างไรก็ตามคำถามอย่างถูกต้องระบุว่ามีทรัพยากรที่เป็นลายลักษณ์อักษรอยู่น้อยมาก (นอกเหนือจากตัวอย่างโค้ด) ซึ่งสามารถเรียนรู้แนวคิดโดยรวมเกี่ยวกับการเกิดและการใช้งานของพวกเขา
จุดอ้างอิงที่เป็นไปได้หนึ่งจุดสำหรับการเริ่มต้นที่จะเข้าใจ DCGs คือรูปแบบการออกแบบคำสั่งซึ่งเป็นหนึ่งในรูปแบบการออกแบบจำนวนมากที่ได้รับความนิยมโดยผู้สนับสนุนของการออกแบบเชิงวัตถุ รูปแบบการออกแบบคำสั่งพิจารณาการดำเนินการเป็นหน่วยการคำนวณรายละเอียดซึ่งถูกซ่อนจากวัตถุคำสั่งที่เรียกใช้งาน รูปแบบการออกแบบคำสั่งมักใช้ร่วมกับรูปแบบการออกแบบล่าม
ในกรณีของ DCG รูปแบบการออกแบบคอมโพสิตและซุ้มมีส่วนเกี่ยวข้องเพื่ออำนวยความสะดวกในการดำเนินการเทนเซอร์แบบแยกส่วนแบบ plug-and-play ที่สามารถรวมเข้าด้วยกันในรูปแบบเพื่อสร้างระบบ
การรวมกันของรูปแบบการออกแบบเพื่อสร้างระบบเป็นจริงที่เป็นนามธรรมซอฟต์แวร์ที่คล้ายกับความคิดที่รุนแรงที่นำไปสู่การเกิดขึ้นของสถาปัตยกรรม Von Neumann ซึ่งเป็นศูนย์กลางของคอมพิวเตอร์ส่วนใหญ่ในปัจจุบัน ผลงานของฟอนนอยมันน์ต่อการเกิดขึ้นของคอมพิวเตอร์คือความคิดในการอนุญาตให้ใช้อัลกอริธึมที่มีตรรกะแบบบูลีนเลขคณิตและการแตกแขนงเพื่อแสดงและเก็บเป็นข้อมูล - โปรแกรม
ผู้เบิกทางอื่นของ DCGs คือเอ็นจิ้นการแสดงออก เอ็นจิ้นนิพจน์สามารถทำได้ง่ายเหมือนเอนจิ้นเลขคณิตและมีความซับซ้อนเท่ากับแอปพลิเคชั่นเช่น Mathematica เอ็นจินกฎมีลักษณะคล้าย DCG เล็กน้อยยกเว้นว่าเอ็นจินกฎนั้นมีการประกาศและกฎเมตาดาต้าสำหรับเอ็นจินกฎจะทำงานกับการประกาศเหล่านั้น
โปรแกรมจัดการโปรแกรม
สิ่งเหล่านี้มีเหมือนกันกับ DCGs คือการไหลของข้อมูลและการดำเนินงานที่จะใช้สามารถกำหนดได้ในเวลาทำงาน เช่นเดียวกับ DCGs ห้องสมุดซอฟต์แวร์และแอพพลิเคชั่นเหล่านี้บางส่วนมี API หรือกลไกอื่น ๆ ที่อนุญาตให้มีการใช้งานในรายละเอียดการทำงาน เป็นหลักความคิดของโปรแกรมที่อนุญาตการจัดการของโปรแกรมอื่น
จุดอ้างอิงอื่นสำหรับการทำความเข้าใจหลักการนี้ในระดับดั้งเดิมคือคำสั่ง switch-case ที่มีในภาษาคอมพิวเตอร์บางภาษา มันเป็นโครงสร้างซอร์สโค้ดที่โปรแกรมเมอร์ต้องการแสดงออกว่า "เราไม่แน่ใจว่าต้องทำอะไร แต่ค่าของตัวแปรนี้จะบอกรูปแบบการดำเนินการแบบเรียลไทม์ว่าจะทำอย่างไรจากชุดของความเป็นไปได้"
คำสั่ง switch-case เป็นนามธรรมที่ขยายแนวคิดของการชะลอการตัดสินใจเกี่ยวกับทิศทางของการคำนวณจนกระทั่งเวลารัน เป็นเวอร์ชันซอฟต์แวร์ของสิ่งที่ทำในหน่วยควบคุมของ CPU ร่วมสมัยและส่วนขยายของแนวคิดในการชะลอรายละเอียดอัลกอริทึมบางอย่าง ตารางของ functors (function pointers) ใน C หรือ polymorphism ใน C ++, Java หรือ Python เป็นตัวอย่างดั้งเดิมอื่น ๆ
การคำนวณแบบไดนามิกใช้เวลาที่เป็นนามธรรมต่อไป ส่วนใหญ่จะไม่ตรงตามข้อกำหนดการคำนวณและความสัมพันธ์ระหว่างเวลาทั้งหมด ลักษณะทั่วไปที่ครอบคลุมนี้จะขยายความเป็นไปได้ของการปรับเปลี่ยนการทำงานในขณะใช้งาน
การแสดงกราฟโดยตรงของการคำนวณ
นั่นคือสิ่งที่โมเดลการคำนวณแบบไดนามิกคือ ตอนนี้สำหรับส่วนกราฟ
เมื่อหนึ่งตัดสินใจที่จะเลื่อนการเลือกของการดำเนินการที่จะ preformed จนกว่าจะถึงเวลาทำงานโครงสร้างที่จำเป็นในการถือการดำเนินงานความสัมพันธ์พึ่งพาของพวกเขาและบางทีพารามิเตอร์การทำแผนที่ การแทนดังกล่าวเป็นมากกว่าแผนผังวากยสัมพันธ์ (เช่นต้นไม้ที่แสดงลำดับชั้นของซอร์สโค้ด) ซึ่งแตกต่างจากโปรแกรมภาษาแอสเซมบลีหรือรหัสเครื่องมันต้องง่ายและไม่แน่นอนโดยพลการ มันจะต้องมีข้อมูลมากกว่ากราฟกระแสข้อมูลและมากกว่าแผนที่หน่วยความจำ โครงสร้างข้อมูลที่ระบุว่าโครงสร้างการคำนวณต้องเป็นอย่างไร
โชคดีที่อัลกอริทึมใดก็ได้ จำกัด ขอบเขตสามารถถูกแสดงเป็นกราฟโดยตรงของการพึ่งพาระหว่างการดำเนินการที่ระบุ ในกราฟดังกล่าวจุดยอด (มักแสดงเป็นโหนดของรูปร่างต่าง ๆ เมื่อแสดง) แสดงการดำเนินการกับข้อมูลและขอบ (มักแสดงเป็นลูกศรเมื่อแสดง) เป็นการแสดงข้อมูลดิจิตอลที่เกิดจากการดำเนินการบางอย่าง (หรืออินพุตของระบบ) และการดำเนินการอื่น ๆ (หรือเอาท์พุทของระบบ) ขึ้นอยู่กับ
โปรดทราบว่ากราฟกำกับไม่ได้เป็นอัลกอริธึม (ในการระบุลำดับการดำเนินการที่แม่นยำ) หรือการประกาศ (ในข้อมูลนั้นสามารถจัดเก็บและวนรอบอย่างชัดเจนกิ่งก้านฟังก์ชั่นและโมดูลอาจถูกกำหนดและซ้อนกัน)
กรอบและกราฟ Dynamic Computational กราฟเหล่านี้ส่วนใหญ่อนุญาตให้ส่วนประกอบทำการคำนวณบนอินพุตคอมโพเนนต์ที่สนับสนุนการเรียนรู้ของเครื่อง จุดยอดในกราฟกำกับสามารถจำลองแบบของเซลล์ประสาทเพื่อสร้างโครงข่ายประสาทหรือส่วนประกอบที่รองรับแคลคูลัสต่างกัน กรอบเหล่านี้นำเสนอความเป็นไปได้ของการสร้างที่สามารถใช้สำหรับการเรียนรู้ลึกในความหมายทั่วไปมากขึ้น
ในบริบทของประวัติคอมพิวเตอร์
อีกครั้งไม่มีอะไรพูดถึงตอนนี้เป็นเรื่องใหม่สำหรับวิทยาการคอมพิวเตอร์ LISP อนุญาตให้ schematics การคำนวณได้รับการแก้ไขโดยอัลกอริทึมอื่น และขนาดและความกว้างของสัญญาณอินพุตทั่วไปถูกสร้างขึ้นในอินเทอร์เฟซแบบ plug-and-play และโปรโตคอลที่ยาวนาน แนวคิดของกรอบการเรียนรู้ย้อนกลับไปในช่วงกลางศตวรรษที่ยี่สิบเหมือนกันเช่นกัน
สิ่งใหม่และได้รับความนิยมคือการรวมคุณสมบัติเฉพาะและชุดคำศัพท์ที่เกี่ยวข้องการรวมคำศัพท์ที่มีอยู่สำหรับแต่ละคุณสมบัตินำไปสู่ฐานที่กว้างขึ้นเพื่อความเข้าใจโดยผู้ที่ศึกษาและทำงานในอุตสาหกรรมซอฟต์แวร์แล้ว .
- API (อินเตอร์เฟส) รสชาติร่วมสมัย
- การวางแนววัตถุ
- การสนับสนุนเทนเซอร์แบบแยก
- กราฟกำกับที่เป็นนามธรรม
- การทำงานร่วมกันกับภาษาและแพ็คเกจยอดนิยมที่รองรับข้อมูลขนาดใหญ่การขุดข้อมูลการเรียนรู้ของเครื่องและการวิเคราะห์ทางสถิติ
- สนับสนุนการสร้างโครงข่ายประสาทเทียมโดยพลการและเป็นระบบ
- ความเป็นไปได้ของการปรับโครงสร้างเครือข่ายประสาทแบบไดนามิก (ซึ่งอำนวยความสะดวกในการทดลองเกี่ยวกับพลาสติกปั้น)
เฟรมเวิร์กจำนวนมากเหล่านี้รองรับความสามารถในการปรับตัวเพื่อเปลี่ยนมิติข้อมูลเข้า (จำนวนมิติและช่วงของแต่ละมิติ)
ความคล้ายคลึงกับต้นไม้สัญลักษณ์นามธรรมในคอมไพเลอร์
กราฟการพึ่งพาของอินพุตและเอาต์พุตของการดำเนินการยังปรากฏอยู่ภายในแผนผังสัญลักษณ์แบบนามธรรม (AST) ซึ่งคอมไพเลอร์แบบต่อเนื่องบางส่วนสร้างขึ้นในระหว่างการตีความโครงสร้างซอร์สโค้ด จากนั้น AST จะใช้เพื่อสร้างคำสั่งแอสเซมเบลอร์หรือคำสั่งเครื่องในกระบวนการเชื่อมโยงกับไลบรารีและสร้างไฟล์เรียกทำงาน AST เป็นกราฟกำกับที่แสดงถึงโครงสร้างของข้อมูลการดำเนินการและการควบคุมการไหลที่ระบุโดยซอร์สโค้ด
การไหลของข้อมูลเป็นเพียงชุดของการพึ่งพาระหว่างการดำเนินการซึ่งจะต้องมีอยู่ใน AST สำหรับ AST เพื่อใช้ในการสร้างคำสั่งการดำเนินการในแอสเซมเบลอร์หรือรหัสเครื่องจักรที่ตามขั้นตอนวิธีที่ระบุในซอร์สโค้ดอย่างแม่นยำ
เฟรมเวิร์กกราฟการคำนวณแบบไดนามิกซึ่งแตกต่างจากคำสั่ง switch-case หรือโมเดล AST ในคอมไพเลอร์สามารถปรับเปลี่ยนแบบเรียลไทม์, ปรับ, ปรับแต่ง (เช่นในกรณีของตาข่ายพลาสติกเทียม), inverted, เปลี่ยนแปลงโดยเทนเซอร์, decimated, ดัดแปลงเพื่อเพิ่มหรือลบ เอนโทรปีกลายพันธุ์ตามชุดของกฎหรือแปลเป็นรูปแบบอนุพันธ์ พวกเขาสามารถเก็บไว้เป็นไฟล์หรือสตรีมแล้วดึงจากพวกเขา
นี่เป็นแนวคิดที่ไม่สำคัญสำหรับโปรแกรมเมอร์ LISP หรือผู้ที่เข้าใจธรรมชาติของคำแนะนำของ John von Neumann ในการจัดเก็บข้อมูลการปฏิบัติงานเป็นข้อมูล ในความหมายนี้โปรแกรมจะส่งกระแสข้อมูลไปยังผู้สอนผ่านคอมไพเลอร์และระบบปฏิบัติการซึ่งเป็นระบบการคำนวณแบบไดนามิกที่ใช้ในวงจรดิจิตอล VLSI
บรรลุมิติและความสามารถในการปรับตัว
ในคำถามคือความคิดเห็นที่ไม่มี "ต้องมีชุดข้อมูล - ซึ่งอินสแตนซ์ทั้งหมดในนั้นมีจำนวนอินพุตเหมือนกันทุกประการ" ข้อความนั้นไม่ได้ส่งเสริมความเข้าใจที่ถูกต้อง มีวิธีที่ชัดเจนกว่าในการพูดสิ่งที่เป็นจริงเกี่ยวกับการปรับตัวของอินพุต
ต้องกำหนดส่วนต่อประสานระหว่าง DCG และส่วนประกอบอื่น ๆ ของระบบโดยรวม แต่ส่วนต่อประสานเหล่านี้อาจมีมิติข้อมูลแบบไดนามิกหรือตัวเลขในตัว มันเป็นเรื่องของนามธรรม
ตัวอย่างเช่นประเภทวัตถุเทนเซอร์ไม่ต่อเนื่องนำเสนออินเทอร์เฟซซอฟต์แวร์ที่เฉพาะเจาะจง แต่เทนเซอร์เป็นแนวคิดทางคณิตศาสตร์แบบไดนามิกซึ่งสามารถใช้อินเตอร์เฟซทั่วไป เมตริกซ์ที่ไม่ต่อเนื่องอาจเป็นสเกลาร์เวกเตอร์เมทริกซ์คิวบ์หรือไฮเปอร์คิวบ์และช่วงของตัวแปรตามสำหรับแต่ละมิติอาจเป็นตัวแปร
อาจเป็นได้ว่าปริมาณของโหนดในเลเยอร์ของระบบที่กำหนดไว้ใน Dynamic Computational Graph สามารถเป็นฟังก์ชันของจำนวนอินพุตของชนิดเฉพาะและสามารถคำนวณเวลาที่เลื่อนออกไปได้
เฟรมเวิร์กอาจถูกโปรแกรมให้เลือกโครงสร้างเลเยอร์ (ส่วนขยายของกระบวนทัศน์ตัวพิมพ์สลับอีกครั้ง) หรือคำนวณพารามิเตอร์ที่กำหนดขนาดโครงสร้างและความลึกหรือการเปิดใช้งาน อย่างไรก็ตามฟีเจอร์ที่ซับซ้อนเหล่านี้ไม่ใช่สิ่งที่ทำให้เฟรมเวิร์กเป็นเฟรมเวิร์กกราฟการคำนวณแบบไดนามิก
อะไรคือคุณสมบัติของกรอบการทำงานเพื่อสนับสนุนกราฟการคำนวณแบบไดนามิก
เพื่อให้มีคุณสมบัติเป็นเฟรมเวิร์กกราฟการคำนวณแบบไดนามิกกรอบจะต้องสนับสนุนการชะลอการตัดสินใจของอัลกอริทึมในการรันดังนั้นจึงเปิดประตูสู่การดำเนินการมากมายในการพึ่งพาการคำนวณและการไหลของข้อมูลในเวลาทำงาน พื้นฐานของการดำเนินการที่เลื่อนออกไปจะต้องรวมถึงข้อมูลจำเพาะการจัดการการดำเนินการและการจัดเก็บของกราฟที่กำกับที่แสดงถึงระบบการดำเนินงาน
หากข้อมูลจำเพาะของอัลกอริทึมไม่ได้ถูกเลื่อนออกไปจนกว่าจะถึงเวลารันไทม์ แต่ถูกรวบรวมไว้ในไฟล์ปฏิบัติการที่ออกแบบมาสำหรับระบบปฏิบัติการเฉพาะโดยมีความยืดหยุ่นแบบดั้งเดิมที่ให้บริการโดยภาษาระดับต่ำเช่น if-then-else, switch-case, polymorphism ฟังก์ชั่นและสตริงความยาวผันแปรมันถือเป็นอัลกอริทึมแบบคงที่
หากการดำเนินการการพึ่งพาระหว่างกันการไหลของข้อมูลมิติของข้อมูลภายในการไหลและความสามารถในการปรับตัวของระบบกับการป้อนค่าตัวเลขและมิติเป็นตัวแปรทั้งหมดในเวลาทำงานในวิธีการสร้างระบบการปรับตัวสูง ดังนั้นอัลกอริทึมจึงเป็นแบบไดนามิกในรูปแบบเหล่านี้
อีกครั้งโปรแกรม LISP ที่ทำงานกับโปรแกรม LISP, กฎเอ็นจิ้นที่มีความสามารถเมตา - กฎ, เอ็นจินนิพจน์, ไลบรารีวัตถุเทนเซอร์ที่แยกออกมาและแม้กระทั่งรูปแบบการออกแบบคำสั่งที่ค่อนข้างเรียบง่าย DCGs มีความยืดหยุ่นและครอบคลุมในความสามารถของพวกเขาเพื่อสนับสนุนการสร้างการคำนวณโดยพลการในลักษณะที่จะสร้างสภาพแวดล้อมที่หลากหลายสำหรับการทดลองเชิงลึกและการใช้งานระบบ
ควรใช้กราฟการคำนวณแบบไดนามิกเมื่อใด
ข้อดีและข้อเสียของ DCG นั้นเป็นปัญหาเฉพาะทั้งหมด หากคุณตรวจสอบแนวคิดการเขียนโปรแกรมแบบไดนามิกต่างๆด้านบนและอื่น ๆ ที่อาจเชื่อมโยงกับพวกเขาอย่างใกล้ชิดในวรรณกรรมที่เกี่ยวข้องมันจะกลายเป็นที่ชัดเจนว่าคุณต้องการกราฟการคำนวณแบบไดนามิกหรือไม่
โดยทั่วไปหากคุณต้องการแสดงรูปแบบการคำนวณแบบสุ่มและเปลี่ยนแปลงเพื่ออำนวยความสะดวกในการใช้งานระบบการเรียนรู้ลึกระบบการจัดการทางคณิตศาสตร์ระบบการปรับตัวหรือโครงสร้างซอฟต์แวร์ที่มีความยืดหยุ่นและซับซ้อนอื่น ๆ ที่เชื่อมโยงกระบวนทัศน์ DCG ได้ดี ของแนวคิดโดยใช้เฟรมเวิร์กกราฟ Computatonal กราฟเป็นขั้นตอนแรกที่ดีในการกำหนดสถาปัตยกรรมซอฟต์แวร์ของคุณสำหรับการแก้ปัญหา
ไม่ใช่ซอฟต์แวร์การเรียนรู้ทั้งหมดที่ใช้ DCG แต่มักจะเป็นตัวเลือกที่ดีเมื่อการจัดการอย่างเป็นระบบและต่อเนื่องของโครงสร้างการคำนวณโดยพลการนั้นเป็นข้อกำหนดของเวลาทำงาน