ฉันแค่อยากรู้ว่าทำไมวิศวกรการเรียนรู้ของเครื่องและโปรแกรมเมอร์ AI ใช้ภาษาอย่างหลามเพื่อทำงาน AI และไม่ใช่ C ++ ถึงแม้ว่า C ++ จะเป็นภาษาที่ทรงพลังมากกว่าภาษาไพ ธ อน
ฉันแค่อยากรู้ว่าทำไมวิศวกรการเรียนรู้ของเครื่องและโปรแกรมเมอร์ AI ใช้ภาษาอย่างหลามเพื่อทำงาน AI และไม่ใช่ C ++ ถึงแม้ว่า C ++ จะเป็นภาษาที่ทรงพลังมากกว่าภาษาไพ ธ อน
คำตอบ:
คุณไม่ต้องการภาษาที่ทรงพลังสำหรับการเขียนโปรแกรม AI นักพัฒนาส่วนใหญ่ใช้ห้องสมุดเช่น Keras, Torch, Caffe, Watson, TensorFlow เป็นต้นห้องสมุดเหล่านั้นได้รับการปรับปรุงให้ดีที่สุดและรองรับการทำงานทั้งหมดแม้ว่าพวกเขาจะสร้างด้วยภาษาที่มีประสิทธิภาพสูงเช่น C. Python เพียงเพื่ออธิบาย เลเยอร์เครือข่ายนิวรัลข้อมูลโหลดเปิดการประมวลผลและแสดงผล การใช้ C ++ แทนจะทำให้การปรับปรุงประสิทธิภาพแทบไม่มี แต่จะยากขึ้นสำหรับผู้ที่ไม่ใช่นักพัฒนาเนื่องจากต้องดูแลการจัดการหน่วยความจำ นอกจากนี้คน AI หลายคนอาจไม่มีพื้นฐานด้านการเขียนโปรแกรมหรือวิทยาศาสตร์คอมพิวเตอร์ที่มั่นคง
อีกตัวอย่างที่คล้ายกันคือการพัฒนาเกมที่เอ็นจิ้นเขียนเป็น C / C ++ และบ่อยครั้งที่ตรรกะของเกมทั้งหมดเขียนด้วยภาษาระดับสูง
C ++ เป็นหนึ่งในภาษายอดนิยมที่ใช้ในพื้นที่ AI / ML โดยทั่วไปแล้ว Python อาจได้รับความนิยมมากขึ้น แต่อย่างที่คนอื่น ๆ เคยสังเกตไว้มันเป็นเรื่องธรรมดามากที่จะมีระบบไฮบริดที่ใช้ CPU จำนวนมากในการใช้งาน C ++ และ Python ใช้สำหรับฟังก์ชั่นระดับสูง
เพียงเพื่อแสดง:
ขึ้นอยู่กับความยืดหยุ่นที่ต้องใช้: หากคุณมีระบบที่พร้อมใช้งานอย่างเต็มที่สำหรับการผลิตซึ่งไม่จำเป็นต้องมีการปรับแต่งมากนัก C ++ (หรือแม้กระทั่ง C) อาจใช้ได้ คุณต้องใช้เวลามากในการสร้างซอฟต์แวร์ แต่ก็ควรรันได้อย่างรวดเร็ว
อย่างไรก็ตามหากคุณยังคงทดลองใช้การตั้งค่าและพารามิเตอร์และอาจจำเป็นต้องปรับเปลี่ยนสถาปัตยกรรม C ++ ก็จะไม่สามารถใช้งานได้ คุณต้องการภาษาเช่น Python ซึ่งทำให้เปลี่ยนสิ่งต่าง ๆ ได้ง่ายขึ้น การเปลี่ยนรหัสนั้นง่ายขึ้นโดยทั่วไปคุณสามารถรหัสได้เร็วขึ้นในภาษาเช่น Python ราคาที่คุณจ่ายคือซอฟต์แวร์มักจะไม่ทำงานเช่นกัน
คุณต้องตัดสินใจว่าการแลกเปลี่ยนนั้นดีที่สุดสำหรับคุณอย่างไร โดยปกติแล้วจะเป็นการดีกว่าที่จะใช้เวลาในการเขียนโค้ดน้อยลงและไม่ต้องกังวลกับการใช้เวลานานเกินไป หากคุณใช้เวลาน้อยกว่าหนึ่งวันในการทำให้โค้ดของคุณเสร็จสิ้นนั่นเป็นเวลาที่เวอร์ชัน C-coded จะต้องติดตาม เวลาส่วนใหญ่มันไม่คุ้มค่า
วิธีการทั่วไปดูเหมือนจะเป็นระบบไฮบริดที่มีการใช้งานไลบรารีหลักใน C / C ++ เนื่องจากไม่ต้องการการเปลี่ยนแปลงมากนักและส่วนหน้า / กาว / ส่วนต่อประสานอยู่ใน Python เนื่องจากคุณต้องการความยืดหยุ่นและความเร็วไม่ สำคัญมาก
นี่ไม่ใช่ปัญหาเฉพาะของ AI แต่เป็นคำถามทั่วไปเกี่ยวกับการแปลภาษาที่แปลแล้ว ด้วย AI ระบบจำนวนมากยังคงให้ความสำคัญกับการวิจัยมากกว่าการใช้งานและนั่นคือที่ที่ความเร็วในการพัฒนาสูงกว่าความเร็วในการประมวล
การพัฒนาซอฟต์แวร์สำหรับแอปพลิเคชั่น AI สามารถแยกออกเป็นการเขียนโปรแกรมและสร้างต้นแบบ C / C ++ เป็นภาษาที่ยอดเยี่ยมในการสร้างแอปพลิเคชั่นเพราะมันทำงานได้อย่างรวดเร็วและสามารถส่งเป็นไลบรารี่สำหรับระบบปฏิบัติการหลัก แอพพลิเคชั่น C / C ++ ที่ได้รับการคอมไพล์แล้วนั้นเป็นมาตรฐานทองคำหากมีคนต้องการใช้อุปกรณ์แบบครบวงจร
C ++ มีปัญหาสำคัญก่อนที่โปรแกรมจะสามารถคอมไพล์ด้วย GCC หรือคอมไพเลอร์ LLVM ใครบางคนจำเป็นต้องรู้อัลกอริทึมที่ต้องการ C ++ สามารถดำเนินการซอร์สโค้ดที่กำหนดและให้คำสั่งที่มีประสิทธิภาพ แต่ในการที่อาร์เรย์จะต้องกรอกข้อมูลและสำหรับลูปที่ต้องการในโค้ดนั้นไม่ชัดเจน คำถามนี้เหมาะกับขั้นตอนการสร้างต้นแบบที่มาก่อนที่แอปพลิเคชันจะได้รับการโปรแกรม ปัญหาไม่ใช่วิธีการสร้างแอพพลิเคชั่นที่คอมไพล์และส่งมอบสิ่งนี้เป็นแพคเกจระบบปฏิบัติการปัญหาคือเล่นกับอัลกอริธึม AI ที่แตกต่างกันสร้างต้นแบบ gui บางส่วนและหารือกับสมาชิกในทีมถึงความคืบหน้า
ภาษาต้นแบบอันดับหนึ่งของกุยซึ่งมีพื้นฐานมาจากการเขียนโปรแกรมสคริปต์และให้ความสามารถในการใกล้เคียงเทียมถูกคิดค้นโดย Guido van Rossum มันไม่เคยแทนที่ C ++ แต่มันสร้างโดเมนรูปแบบใหม่ ไม่จำเป็นต้องมีขั้นตอนการทำต้นแบบก่อนที่ซอฟต์แวร์จะถูกนำไปใช้โดยเฉพาะในโดเมนด้านนวัตกรรมของปัญญาประดิษฐ์
เพื่ออธิบายว่าทำไม Python ถึงเหนือกว่า C ++ เราต้องพยายามสร้างต้นแบบซอฟต์แวร์ด้วย C ++ เป็นไปได้ไหมที่จะใช้ภาษานั้นเพื่อการใช้งาน gui อย่างรวดเร็ว? C ++ ไม่ได้รับการออกแบบไม่ได้เป็นภาษาต้นแบบที่มีรอบการแก้ไขที่รวดเร็ว แต่เป็น solid rock สำหรับโปรแกรมเมอร์ระบบ ซึ่งหมายความว่าหากต้นแบบทำงานอยู่แล้วหากอัลกอริทึมได้รับการแก้ไขและหากเอกสารถูกเขียนขึ้นมาก็ควรทำการ reprogram รหัสใน C ++ นั่นหมายความว่า Python ต้นแบบที่กำหนดจะถูกแปลงเป็น C ++ และถูกส่งไปยังระบบปฏิบัติการที่มีอยู่ แต่สำหรับขั้นตอนก่อนหน้าที่เกี่ยวข้องกับการเขียนบทความการอภิปรายทางเลือกและการจัดการนวัตกรรม Python เป็นตัวเลือกที่ดีกว่า
คุณอ้างว่า
C ++ ในทางเทคนิคเป็นภาษาที่มีประสิทธิภาพมากกว่าหลาม
แต่การเรียกร้องนั้นผิด (หรือไม่มีความหมายมาก) โปรดจำไว้ว่าภาษาการเขียนโปรแกรมเป็นข้อมูลจำเพาะ (มักจะเป็นเอกสารที่เขียนเป็นภาษาอังกฤษ) ตัวอย่างเช่นn3337เป็นร่างที่ล่าช้าของข้อกำหนด C ++ ฉันไม่ชอบงูใหญ่ แต่ก็ไม่น่ามีประสิทธิภาพกว่า C ++ (แม้ว่า c ++ การใช้งานโดยทั่วไปมักจะเร็วกว่าคน Python): สิ่งที่ดีหลามรหัสโปรแกรมเมอร์สามารถดีในหลามอีกดี c ++ Programmer รหัสกระป๋องเดียวใน C ++ และรอง ในทางกลับกัน
ในทางทฤษฎีทั้ง C ++ และ Python เป็นภาษาโปรแกรมทัวริงที่สมบูรณ์
และ Python ก็มีความหมายเหมือน C ++ ฉันไม่สามารถตั้งชื่อคุณสมบัติภาษาการเขียนโปรแกรมที่ Python มี แต่ไม่ใช่ C ++ (ยกเว้นที่เกี่ยวข้องกับการสะท้อนกลับโปรดดูคำตอบนี้และระวังdlopen
- ดูโปรแกรมmanydl.cของฉัน- จากLLVM , libgccjit , libbacktraceและพิจารณาเมตา -วิธีการเขียนโปรแกรมกับพวกเขาà la Bismonหรือชอบบล็อกของ J.Pitratสนับสนุนมัน)
บางทีคุณอาจคิดว่าภาษาโปรแกรมเป็นซอฟต์แวร์ที่ใช้งาน จากนั้น Python ก็ให้ความรู้สึกเหมือน C ++ คือ (และดูเหมือนว่าจะเรียนรู้ได้ง่ายกว่า แต่มันเป็นภาพลวงตาดูที่http://norvig.com/21-days.htmlสำหรับข้อมูลเพิ่มเติมเกี่ยวกับภาพลวงตานั้น) งูหลามและ C ++ มีที่คล้ายกันมากความหมายแม้ว่าไวยากรณ์ของพวกเขาแตกต่างกันมาก ระบบประเภทของพวกเขาแตกต่างกันมาก
สังเกตว่าเศร้ามากเมื่อเร็ว ๆ นี้ที่สำคัญการเรียนรู้เครื่องห้องสมุด (เช่นTensorFlowหรือGudhi ) เป็นในทางปฏิบัติง่ายต่อการใช้ในหลามกว่าใน C ++ แต่คุณสามารถใช้ TensorFlow หรือ Gudhi จากรหัส C ++ เนื่องจาก TensorFlow และ Gudhi ส่วนใหญ่เขียนรหัสใน C ++ และทั้งสองให้และจัดทำเอกสาร C ++ API (ไม่ใช่แค่ Python)
C ++ เปิดใช้งานการเขียนโปรแกรมแบบมัลติเธรดแต่การใช้งาน Python ปกติมีGILของมันคือแบบไบต์ดังนั้นจึงช้ากว่า C ++ อย่างมาก (ซึ่งมักจะรวบรวมโดยการปรับแต่งคอมไพเลอร์เช่นGCCหรือClangอย่างไรก็ตามคุณสามารถหาล่าม C ++ เช่นCling ) การทดลองใช้งานของ Python เป็นการรวบรวมโดยJITและไม่มี GIL แต่เหล่านี้จะไม่สุก: ผมขอแนะนำให้ลงทุนล้านยูโรเพื่อเพิ่มของพวกเขาTRL
สังเกตว่า C ++ นั้นยากต่อการเรียนรู้มากกว่า Python แม้จะมีประสบการณ์การเขียนโปรแกรม C ++ หลายสิบปี แต่ฉันก็ไม่สามารถอ้างได้ว่ารู้จัก C ++ เป็นส่วนใหญ่จริงๆ
หนังสือน่าเศร้าที่ล่าสุดการเรียนการสอนวิศวกรรมซอฟต์แวร์ AI (เช่นนี้หนึ่งหรือที่หนึ่ง) ใช้งูหลาม (ไม่ C ++) สำหรับตัวอย่างของพวกเขา ฉันต้องการหนังสือ AI ล่าสุดโดยใช้ C ++!
BTW ฉันเขียนโปรแกรมซอฟต์แวร์โอเพ่นซอร์ส (เช่นนี้หรือGCC MELT ที่ล้าสมัย) โดยใช้เทคนิค AI แต่พวกเขาไม่ได้ใช้ Python แนวทางของฉันในการใช้งาน AI คือเริ่มออกแบบDSLในตัว
วิธีการของ AI บางอย่างเกี่ยวข้องกับ metaprogramming เช่นการสร้างรหัส (หรือส่วนใหญ่หรือแม้แต่ทั้งหมด) ของระบบด้วยตัวเอง J. พิตต์ (เขาเสียชีวิตในเดือนตุลาคม 2562) เป็นผู้บุกเบิกแนวทางนี้ ดูบล็อกของเขาระบบ CAIA ของเขาและโครงการRefPerSys (ซึ่งมีความทะเยอทะยานคือการสร้างรหัส C ++ ที่ดีที่สุดและหวังว่าทั้งหมด)