Mengapa C ++ tampaknya kurang banyak digunakan dalam AI?


15

Saya hanya ingin tahu mengapa insinyur Machine Learning dan programmer AI menggunakan bahasa seperti python untuk melakukan tugas AI dan bukan C ++ meskipun C ++ secara teknis bahasa yang lebih kuat daripada python.


2
Jawaban ini akan membantu
Ugnes

Selamat datang di AI! Saya sedikit mengedit judul pertanyaan. Tingkat tinggi, Python memiliki sintaks yang ringan dan merupakan bahasa yang ditafsirkan, yang berarti mengutak-atik dan menguji tanpa kompilasi. Python juga memungkinkan operasi bitwise .
DukeZhou

Jawaban:


16

Anda tidak perlu bahasa yang kuat untuk pemrograman AI. Sebagian besar pengembang menggunakan perpustakaan seperti Keras, Torch, Caffe, Watson, TensorFlow, dll. Perpustakaan-perpustakaan itu sangat dioptimalkan dan menangani semua pekerjaan, mereka dibangun dengan bahasa kinerja tinggi, seperti C. Python hanya ada di sana untuk menggambarkan lapisan jaringan saraf, memuat data, meluncurkan hasil pemrosesan dan tampilan. Sebaliknya, menggunakan C ++ akan hampir tidak menghasilkan peningkatan kinerja, tetapi akan lebih sulit bagi non-pengembang karena perlu merawat manajemen memori. Juga, beberapa orang AI mungkin tidak memiliki latar belakang pemrograman atau ilmu komputer yang sangat solid.

Contoh serupa lainnya adalah pengembangan game, di mana mesin dikodekan dalam C / C ++, dan, seringkali, semua logika game ditulis dalam bahasa tingkat tinggi.


1
Jika saya tertarik untuk mengembangkan dan bekerja dengan pembelajaran mesin dan nlp untuk bidang perangkat keras .. Jadi saya dapat menggunakan C ++ untuk AI
Mark ellon

1
@AnishGupta: Ya Anda bisa, asalkan perangkat keras mendukung pemrosesan yang diperlukan (jaringan saraf khususnya sangat intensif prosesor). TensforFlow sebenarnya asli C ++ (binding Python adalah tambahan), dan di sini adalah API: tensorflow.org/api_docs/cc
Neil Slater

"sebagian besar profil AI berasal dari bidang ilmu data". Ilmu data bahkan bukan bidang yang didefinisikan dengan baik, sehingga kalimat Anda mungkin tidak dipahami atau disalahpahami.
nbro

1
"Menggunakan C ++ sebagai gantinya akan memberikan hampir tidak ada peningkatan kinerja, tetapi akan lebih sulit bagi non-pengembang karena perlu merawat manajemen memori." Anda tidak perlu peduli dengan manajemen memori dengan C ++ jika Anda menulisnya dengan baik.
Jérémy Blain

Pemrograman AI tidak hanya tentang menggunakan perpustakaan yang ada seperti Keras dan Torch. Jaringan saraf dapat diprogram dari awal tanpa ketergantungan eksternal. Contoh untuk perceptron 3-layer tersedia di internet dan fungsi aktivasi sigmoid cocok dengan 4 baris kode. Saya akan mengatakan, bahwa menerapkan jaringan saraf tanpa perpustakaan yang ada adalah cara yang lebih mudah untuk memahami topik tersebut.
Manuel Rodriguez


5

Tergantung bagaimana fleksibelnya kebutuhan itu: jika Anda memiliki sistem yang lengkap siap untuk diproduksi, yang tidak akan membutuhkan banyak penyesuaian, maka C ++ (atau bahkan C) mungkin baik-baik saja. Anda perlu meluangkan banyak waktu untuk membangun perangkat lunak, tetapi kemudian harus berjalan cukup cepat.

Namun, jika Anda masih bereksperimen dengan pengaturan dan parameter, dan mungkin perlu menyesuaikan arsitektur, maka C ++ akan kikuk untuk bekerja dengannya. Anda memerlukan bahasa seperti Python yang membuatnya lebih mudah untuk mengubah banyak hal. Mengubah kode lebih mudah, karena Anda umumnya dapat kode lebih cepat dalam bahasa seperti Python. Harga yang Anda bayar adalah bahwa perangkat lunak biasanya tidak berkinerja baik.

Anda perlu memutuskan bagaimana pertukaran itu bekerja paling baik untuk Anda. Biasanya lebih baik menghabiskan waktu lebih sedikit untuk pengkodean, dan tidak terlalu khawatir tentang waktu proses yang lebih lama. Jika Anda mengambil satu hari lebih sedikit untuk menyelesaikan kode Anda, itu banyak waktu versi C-kode perlu mengejar ketinggalan. Sebagian besar waktu itu tidak layak.

Pendekatan umum tampaknya sistem hybrid, di mana perpustakaan inti diimplementasikan dalam C / C ++, karena mereka tidak perlu banyak berubah, dan antarmuka front-end / lem / dalam Python, karena di sana Anda memerlukan fleksibilitas dan kecepatan tidak itu penting.

Omong-omong, ini bukan masalah khusus untuk AI, tapi pertanyaan umum tentang bahasa yang ditafsirkan vs yang dikompilasi. Dengan AI banyak sistem masih fokus pada penelitian daripada aplikasi, dan di situlah kecepatan pengembangan mengalahkan kecepatan eksekusi.


1
Jika saya melakukannya dengan C ++ maka saya bisa mendapatkan eksekusi cepat dari python dan bagaimana dengan tingkat kinerja karena dinyatakan bahwa: C ++ adalah 400 kali lebih cepat dari python
Mark ellon

1
Angka umum itu tidak berarti apa-apa - itu benar-benar tergantung pada aplikasi yang tepat. Saya pikir 400 kali mungkin terlalu optimis untuk sebagian besar situasi. Tetapi intinya adalah bahwa jika Anda membutuhkan 500x lebih lama untuk kode (dan debug!) Perangkat lunak, maka bahkan peningkatan 400x dalam kecepatan masih akan lebih lambat! Jelas angkanya agak acak, tetapi jangan meremehkan waktu yang dibutuhkan untuk memperbaiki program Anda. Seringkali Anda akan menemukan bahwa peningkatan kecepatan lebih dari diimbangi oleh waktu pengembangan yang lebih cepat.
Oliver Mason

1
Saya telah mencoba untuk kode jaringan syaraf menggunakan tensorflow libraries di python dan C ++ .. dan saya menemukan bahwa: algoritma jaringan syaraf yang dikodekan dalam C ++ berjalan 280X kali lebih cepat daripada python di mana perpustakaan yang sama dan algoritma yang sama digunakan
Mark ellon

1
Jadi mengapa tidak menggunakan C ++ untuk implementasi algoritma pembelajaran Mesin daripada python
Mark ellon

1
Lihat jawaban saya di atas ...
Oliver Mason

2

Pengembangan perangkat lunak untuk aplikasi AI dapat dipisahkan menjadi pemrograman dan pembuatan prototipe. C / C ++ adalah bahasa yang bagus untuk membuat aplikasi karena berjalan sangat cepat dan dapat dikirim sebagai perpustakaan untuk sistem operasi utama. Aplikasi C / C ++ yang dikompilasi adalah standar emas jika seseorang ingin memasang alat turnkey.

C ++ memiliki masalah besar, sebelum sebuah program dapat dikompilasi dengan GCC atau kompiler LLVM seseorang perlu tahu algoritma mana yang ia butuhkan. C ++ dapat menjalankan kode sumber yang diberikan, dan memberikan perintah yang efisien tetapi dengan cara mana array harus diisi dan yang untuk loop diperlukan dalam kode tidak jelas. Pertanyaan ini cocok dengan langkah prototyping yang muncul sebelum aplikasi diprogram. Masalahnya bukan bagaimana membangun aplikasi yang dikompilasi dan mengirimkan ini sebagai paket sistem operasi, masalahnya adalah bermain dengan algoritma AI yang berbeda, membangun beberapa prototipe gui dan mendiskusikan dengan anggota tim perkembangannya.

Bahasa prototipe gui nomor satu yang didasarkan pada pemrograman scripting dan menyediakan kemampuan pseudocode hampir ditemukan oleh Guido van Rossum. Itu tidak pernah menggantikan C ++, tetapi menciptakan jenis domain baru. Ada kebutuhan untuk langkah prototyping sebelum perangkat lunak diimplementasikan, terutama dalam domain inovatif Inteligensi Buatan.

Untuk menjelaskan mengapa Python lebih unggul daripada C ++ kita harus mencoba membangun prototipe perangkat lunak dengan C ++. Apakah mungkin menggunakan bahasa itu untuk mengimplementasikan aplikasi gui dengan cepat? Tidak ada C ++ dirancang bukan sebagai bahasa prototipe dengan siklus edit cepat, tetapi sebagai batu solid untuk pemrogram sistem. Itu berarti, jika prototipe sudah berfungsi, jika algoritma diperbaiki dan jika dokumentasi ditulis, masuk akal untuk memprogram ulang kode dalam C ++. Itu berarti, prototipe Python yang diberikan dikonversi menjadi C ++ dan dikirimkan ke sistem operasi yang ada. Tetapi untuk langkah awal yang harus dilakukan dengan menulis makalah, mendiskusikan alternatif dan mengelola inovasi, Python adalah pilihan yang lebih baik.


0

Anda mengklaim itu

C ++ secara teknis bahasa yang lebih kuat daripada python.

Namun klaim itu salah (atau tidak berarti banyak). Ingat bahwa bahasa pemrograman adalah spesifikasi (seringkali beberapa dokumen ditulis dalam bahasa Inggris). Sebagai contoh, n3337 adalah draft akhir dari spesifikasi C ++. Saya tidak suka Python, tetapi tampaknya lebih kuat daripada C ++ (bahkan jika implementasi C ++ umumnya lebih cepat daripada yang Python): apa yang bisa diprogram oleh programmer Phyton dengan baik di Python, programmer C ++ yang baik dapat mengkode dengan baik dalam C ++ dan sebaliknya sebaliknya.

Secara teoritis, baik C ++ dan Python adalah bahasa pemrograman Turing-complete (sengaja).

Dan Python ekspresif seperti C ++. Saya tidak dapat menyebutkan fitur bahasa pemrograman yang Python miliki tetapi tidak C ++ (kecuali yang terkait dengan refleksi ; lihat juga jawaban ini dan perhatikan dlopen- lihat program manydl.c saya -, LLVM , libgccjit , libbacktrace , dan pertimbangkan beberapa meta -Pendekatan pendekatan dengan mereka, à la Bismon atau seperti yang disarankan blog J.Pitrat ).

Mungkin Anda menganggap bahasa pemrograman sebagai perangkat lunak yang mengimplementasikannya. Kemudian Python sama ekspresifnya dengan C ++ (dan tampaknya lebih mudah dipelajari, tetapi itu adalah ilusi; lihat http://norvig.com/21-days.html untuk informasi lebih lanjut tentang ilusi itu). Python dan C ++ memiliki semantik yang sangat mirip , meskipun sintaks mereka sangat berbeda. Mereka sistem jenis ini sangat berbeda.

Perhatikan bahwa sayangnya, banyak perpustakaan pembelajaran mesin terbaru (seperti TensorFlow atau Gudhi ) dalam praktiknya lebih mudah digunakan dalam Python daripada di C ++. Tetapi Anda dapat menggunakan TensorFlow atau Gudhi dari kode C ++ karena TensorFlow dan Gudhi sebagian besar dikodekan dalam C ++ dan keduanya menyediakan dan mendokumentasikan API C ++ (bukan hanya yang Python).

C ++ memungkinkan pemrograman multi-threaded , tetapi implementasi Python yang biasa memiliki GIL -nya , bytecoded , jadi secara signifikan lebih lambat daripada C ++ (yang biasanya dikompilasi dengan mengoptimalkan kompiler seperti GCC atau Dentang ; namun Anda dapat menemukan penerjemah C ++, misalnya Cling ). Beberapa implementasi eksperimental Python dikompilasi-JIT dan tanpa GIL. Tapi ini belum matang: Saya sarankan berinvestasi satu juta euro untuk meningkatkan TRL mereka .

Perhatikan juga bahwa C ++ jauh lebih sulit dipelajari daripada Python. Bahkan dengan belasan tahun pengalaman pemrograman C ++, saya tidak bisa mengklaim benar-benar tahu sebagian besar C ++.

Sayangnya, sebagian besar buku terbaru yang mengajarkan rekayasa perangkat lunak AI (misalnya yang ini atau yang itu ) menggunakan Python (bukan C ++) untuk contoh mereka. Saya sebenarnya ingin buku AI terbaru menggunakan C ++!

BTW, saya memprogram perangkat lunak open source (seperti ini , atau GCC MELT yang usang ) menggunakan teknik AI, tetapi mereka tidak menggunakan Python. Pendekatan saya terhadap aplikasi AI adalah mulai merancang beberapa DSL di dalamnya.

Beberapa pendekatan AI melibatkan metaprogramming, misalnya menghasilkan beberapa (atau sebagian besar, atau bahkan semua) kode sistem dengan sendirinya. J.Pitrat (dia meninggal pada Oktober 2019) memelopori pendekatan ini. Lihat blog-nya , sistem CAIA-nya, dan proyek RefPerSys (yang memiliki ambisi untuk menghasilkan sebagian besar - dan semoga semua- dari kode C ++-nya).

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.