เหตุใด C ++ จึงใช้กันอย่างแพร่หลายน้อยกว่าใน AI


15

ฉันแค่อยากรู้ว่าทำไมวิศวกรการเรียนรู้ของเครื่องและโปรแกรมเมอร์ AI ใช้ภาษาอย่างหลามเพื่อทำงาน AI และไม่ใช่ C ++ ถึงแม้ว่า C ++ จะเป็นภาษาที่ทรงพลังมากกว่าภาษาไพ ธ อน


2
คำตอบนี้จะช่วย
Ugnes

ยินดีต้อนรับสู่ AI! ฉันแก้ไขชื่อคำถามเล็กน้อย Python มีไวยากรณ์ระดับสูงและเป็นภาษาตีความซึ่งหมายถึงการปรับแต่งและการทดสอบโดยไม่ต้องคอมไพล์ งูใหญ่ยังช่วยให้การดำเนินงานค่าที่เหมาะสม
DukeZhou

คำตอบ:


16

คุณไม่ต้องการภาษาที่ทรงพลังสำหรับการเขียนโปรแกรม AI นักพัฒนาส่วนใหญ่ใช้ห้องสมุดเช่น Keras, Torch, Caffe, Watson, TensorFlow เป็นต้นห้องสมุดเหล่านั้นได้รับการปรับปรุงให้ดีที่สุดและรองรับการทำงานทั้งหมดแม้ว่าพวกเขาจะสร้างด้วยภาษาที่มีประสิทธิภาพสูงเช่น C. Python เพียงเพื่ออธิบาย เลเยอร์เครือข่ายนิวรัลข้อมูลโหลดเปิดการประมวลผลและแสดงผล การใช้ C ++ แทนจะทำให้การปรับปรุงประสิทธิภาพแทบไม่มี แต่จะยากขึ้นสำหรับผู้ที่ไม่ใช่นักพัฒนาเนื่องจากต้องดูแลการจัดการหน่วยความจำ นอกจากนี้คน AI หลายคนอาจไม่มีพื้นฐานด้านการเขียนโปรแกรมหรือวิทยาศาสตร์คอมพิวเตอร์ที่มั่นคง

อีกตัวอย่างที่คล้ายกันคือการพัฒนาเกมที่เอ็นจิ้นเขียนเป็น C / C ++ และบ่อยครั้งที่ตรรกะของเกมทั้งหมดเขียนด้วยภาษาระดับสูง


1
ถ้าฉันสนใจที่จะพัฒนาและทำงานกับการเรียนรู้ของเครื่องและ nlp สำหรับฟิลด์ฮาร์ดแวร์ .. ดังนั้นฉันสามารถใช้ C ++ สำหรับ AI ได้
ไหม

1
@AishishGupta: ใช่คุณสามารถให้ฮาร์ดแวร์รองรับการประมวลผลที่จำเป็น (เครือข่ายประสาทเทียมโดยเฉพาะอย่างยิ่งโปรเซสเซอร์เข้มข้นมาก) TensforFlow เป็นจริงโดยกำเนิด C ++ (การผูก Python เป็นการเพิ่มเติม) และนี่คือ API: tensorflow.org/api_docs/cc
Neil Slater

"โปรไฟล์ AI ส่วนใหญ่มาจากสาขาวิทยาศาสตร์ข้อมูล" วิทยาศาสตร์ข้อมูลไม่ได้เป็นสนามที่กำหนดไว้อย่างดีดังนั้นประโยคของคุณอาจไม่เข้าใจหรือเข้าใจผิด
nbro

1
"การใช้ C ++ แทนจะทำให้การปรับปรุงประสิทธิภาพแทบไม่มี แต่จะยากขึ้นสำหรับผู้ที่ไม่ใช่นักพัฒนาเนื่องจากต้องดูแลการจัดการหน่วยความจำ" คุณไม่จำเป็นต้องกังวลเกี่ยวกับการจัดการหน่วยความจำด้วย C ++ ถ้าคุณเขียนได้ดี
Jérémy Blain

การเขียนโปรแกรม AI ไม่เพียงเกี่ยวกับการใช้ไลบรารีที่มีอยู่เช่น Keras และ Torch โครงข่ายประสาทเทียมสามารถตั้งโปรแกรมได้จากศูนย์โดยไม่ต้องพึ่งพาภายนอก ตัวอย่างสำหรับ perceptron 3 เลเยอร์มีอยู่ในอินเทอร์เน็ตและฟังก์ชั่นการเปิดใช้งาน sigmoid เหมาะกับรหัส 4 บรรทัด ฉันจะบอกว่าการใช้เครือข่ายประสาทโดยไม่มีห้องสมุดที่มีอยู่เป็นวิธีที่ง่ายต่อการเข้าใจหัวข้อ
Manuel Rodriguez

10

C ++ เป็นหนึ่งในภาษายอดนิยมที่ใช้ในพื้นที่ AI / ML โดยทั่วไปแล้ว Python อาจได้รับความนิยมมากขึ้น แต่อย่างที่คนอื่น ๆ เคยสังเกตไว้มันเป็นเรื่องธรรมดามากที่จะมีระบบไฮบริดที่ใช้ CPU จำนวนมากในการใช้งาน C ++ และ Python ใช้สำหรับฟังก์ชั่นระดับสูง

เพียงเพื่อแสดง:

http://mloss.org/software/language/c__/

http://mloss.org/software/language/python/


5

ขึ้นอยู่กับความยืดหยุ่นที่ต้องใช้: หากคุณมีระบบที่พร้อมใช้งานอย่างเต็มที่สำหรับการผลิตซึ่งไม่จำเป็นต้องมีการปรับแต่งมากนัก C ++ (หรือแม้กระทั่ง C) อาจใช้ได้ คุณต้องใช้เวลามากในการสร้างซอฟต์แวร์ แต่ก็ควรรันได้อย่างรวดเร็ว

อย่างไรก็ตามหากคุณยังคงทดลองใช้การตั้งค่าและพารามิเตอร์และอาจจำเป็นต้องปรับเปลี่ยนสถาปัตยกรรม C ++ ก็จะไม่สามารถใช้งานได้ คุณต้องการภาษาเช่น Python ซึ่งทำให้เปลี่ยนสิ่งต่าง ๆ ได้ง่ายขึ้น การเปลี่ยนรหัสนั้นง่ายขึ้นโดยทั่วไปคุณสามารถรหัสได้เร็วขึ้นในภาษาเช่น Python ราคาที่คุณจ่ายคือซอฟต์แวร์มักจะไม่ทำงานเช่นกัน

คุณต้องตัดสินใจว่าการแลกเปลี่ยนนั้นดีที่สุดสำหรับคุณอย่างไร โดยปกติแล้วจะเป็นการดีกว่าที่จะใช้เวลาในการเขียนโค้ดน้อยลงและไม่ต้องกังวลกับการใช้เวลานานเกินไป หากคุณใช้เวลาน้อยกว่าหนึ่งวันในการทำให้โค้ดของคุณเสร็จสิ้นนั่นเป็นเวลาที่เวอร์ชัน C-coded จะต้องติดตาม เวลาส่วนใหญ่มันไม่คุ้มค่า

วิธีการทั่วไปดูเหมือนจะเป็นระบบไฮบริดที่มีการใช้งานไลบรารีหลักใน C / C ++ เนื่องจากไม่ต้องการการเปลี่ยนแปลงมากนักและส่วนหน้า / กาว / ส่วนต่อประสานอยู่ใน Python เนื่องจากคุณต้องการความยืดหยุ่นและความเร็วไม่ สำคัญมาก

นี่ไม่ใช่ปัญหาเฉพาะของ AI แต่เป็นคำถามทั่วไปเกี่ยวกับการแปลภาษาที่แปลแล้ว ด้วย AI ระบบจำนวนมากยังคงให้ความสำคัญกับการวิจัยมากกว่าการใช้งานและนั่นคือที่ที่ความเร็วในการพัฒนาสูงกว่าความเร็วในการประมวล


1
ถ้าฉันทำด้วย C ++ ฉันจะได้การดำเนินการที่รวดเร็วกว่า python และระดับประสิทธิภาพของการทำงานเพราะมันระบุไว้ว่า: C ++ เร็วกว่า python 400 เท่า
Mark ellon

1
รูปทั่วไปนั้นไม่ได้มีความหมายอะไรเลยมันขึ้นอยู่กับการใช้งานที่แน่นอน ฉันคิดว่า 400 ครั้งน่าจะเป็นแง่ดีเกินไปสำหรับสถานการณ์ส่วนใหญ่ แต่ประเด็นก็คือถ้าคุณใช้รหัสยาวขึ้น 500x (และ debug!) ซอฟต์แวร์แล้วแม้แต่การปรับปรุงความเร็ว 400x ก็จะช้าลง! เห็นได้ชัดว่าตัวเลขเป็นแบบสุ่มเล็กน้อย แต่อย่าประมาทเวลาที่คุณต้องทำให้โปรแกรมของคุณถูกต้อง บ่อยครั้งที่คุณจะพบว่าการเพิ่มความเร็วนั้นมากกว่าการชดเชยด้วยเวลาในการพัฒนาที่เร็วขึ้น
Oliver Mason

1
ฉันพยายามเขียนโค้ด neural net โดยใช้ tensorflow libraries ใน python และ C ++ .. และฉันพบว่า: อัลกอริทึมเครือข่ายประสาทที่เขียนโค้ดใน C ++ ทำงานเร็วกว่า Python ถึง 280 เท่าในไลบรารี่เดียวกันและอัลกอริทึมเดียวกัน
Mark ellon

1
เหตุใดจึงไม่ใช้ C ++ สำหรับการเรียนรู้ของอัลกอริธึมของเครื่องจักรแทนที่จะเป็นไพ ธ อน
Mark ellon

1
ดูคำตอบของฉันข้างต้น ...
โอลิเวอร์เมสัน

2

การพัฒนาซอฟต์แวร์สำหรับแอปพลิเคชั่น 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 เป็นตัวเลือกที่ดีกว่า


0

คุณอ้างว่า

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 ++ ที่ดีที่สุดและหวังว่าทั้งหมด)

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.