C ++ neden AI'de daha az yaygın görünüyor?


15

Sadece Machine Learning mühendisleri ve AI programcılarının neden C ++ teknik olarak python'dan daha güçlü bir dil olmasına rağmen, C ++ değil AI görevi gerçekleştirmek için python gibi dilleri kullandığını bilmek istiyorum.


2
Bu cevap yardımcı olacaktır
Ugnes

AI'ya hoş geldiniz! Sorunun başlığını biraz düzenledim. Yüksek seviyeli Python, hafif sözdizimine sahiptir ve yorumlanmış bir dildir, bu da derleme olmadan ayarlama ve test etme anlamına gelir. Python ayrıca bitsel işlemlere de izin verir .
DukeZhou

Yanıtlar:


16

Yapay zekayı programlamak için güçlü bir dile ihtiyacınız yoktur. Geliştiricilerin çoğu Keras, Torch, Caffe, Watson, TensorFlow, vb. sinir ağ katmanları, veri yüklemek, işleme başlatmak ve sonuçları görüntülemek. Bunun yerine C ++ kullanmak neredeyse hiçbir performans artışı sağlamaz, ancak bellek yönetimi için bakım gerektirmesi nedeniyle geliştiriciler için daha zor olur. Ayrıca, bazı AI kullanıcıları çok sağlam bir programlama veya bilgisayar bilimi arka planına sahip olmayabilir.

Benzer bir örnek, motorun C / C ++ ile kodlandığı ve çoğu zaman tüm oyun mantığının üst düzey bir dilde yazılmış olduğu oyun geliştirme olabilir.


1
Donanım alanı için makine öğrenimi ve nlp geliştirme ve çalışma ile ilgileniyorsanız .. Ben AI için C ++ kullanabilir miyim
Mark ellon

1
@AnishGupta: Evet, donanım gerekli işlemeyi desteklemesi koşuluyla yapabilirsiniz (sinir ağları özellikle çok işlemci yoğundur). TensforFlow aslında doğal olarak C ++ (Python bağlamaları bir ektir) ve işte API: tensorflow.org/api_docs/cc
Neil Slater

"Çoğu AI profili veri bilimi alanından gelir". Veri bilimi iyi tanımlanmış bir alan bile değildir, bu nedenle cümleniz anlaşılmayabilir veya yanlış anlaşılmayabilir.
nbro

1
"Bunun yerine C ++ kullanmak neredeyse hiçbir performans artışı sağlamaz, ancak bellek yönetimi için bakım gerektirmesi nedeniyle geliştiriciler için daha zor olurdu." İyi yazarsanız, C ++ ile bellek yönetimini önemsemeniz gerekmez.
Jérémy Blain

AI programlama sadece Keras ve Torch gibi mevcut kütüphaneleri kullanmakla ilgili değildir. Bir sinir ağı harici bağımlılıklar olmadan sıfırdan programlanabilir. 3 katmanlı algılayıcı örnekleri internette mevcuttur ve sigmoid aktivasyon fonksiyonu 4 kod satırına sığar. Mevcut kütüphaneler olmadan bir sinir ağının uygulanmasının konuyu anlamanın daha kolay yolu olduğunu söyleyebilirim.
Manuel Rodriguez


5

Ne kadar esnek olması gerektiğine bağlıdır: üretim için hazır tam teşekküllü bir sisteminiz varsa, bu da çok fazla ayarlamaya ihtiyaç duymayacaksa, C ++ (hatta C) iyi olabilir. Yazılımı oluşturmak için çok zaman harcamalısınız, ancak daha sonra oldukça hızlı çalışmalıdır.

Ancak, hala ayarları ve parametreleri deniyorsanız ve belki de mimariyi ayarlamanız gerekiyorsa, C ++ ile çalışmak beceriksiz olacaktır. Python gibi şeyleri değiştirmeyi kolaylaştıran bir dile ihtiyacınız var. Genellikle Python gibi dillerde daha hızlı kod yazabileceğiniz için, kodu değiştirmek daha kolaydır. Ödediğiniz fiyat, yazılımın genellikle iyi performans göstermemesidir.

Bu değiş tokuşun sizin için en iyi şekilde nasıl çalıştığına karar vermeniz gerekir. Kodlama için daha az zaman harcamak ve daha uzun çalışma süresi hakkında çok fazla endişelenmemek genellikle daha iyidir. Kodunuzun işlenmesi için bir gün daha az zaman alırsanız, C kodlu sürümün yakalanması çok zaman alır. Çoğu zaman buna değmez.

Ortak bir yaklaşım, çekirdek kütüphanelerin C / C ++ 'da çok fazla değişime ihtiyaç duymadıkları için uygulandığı ve ön uç / tutkal / arayüzlerin Python'da olduğu melez sistemler gibi görünmektedir, çünkü esnekliğe ve hıza ihtiyacınız yoktur. bu kritik.

Bu, bu arada YZ'ye özgü bir sorun değil, derlenmiş dillere karşı yorumlanmış genel bir sorudur. Yapay zeka ile birçok sistem hala uygulama yerine araştırmaya odaklanmıştır ve bu noktada geliştirme hızı, uygulama hızını azaltır.


1
Eğer C ++ ile yaparsam o zaman python ve performans seviyesi hakkında hızlı yürütme alabilirim çünkü bu belirtilir: C ++ python 400 kat daha hızlı
Mark ellon

1
Bu genel rakam hiçbir şey ifade etmiyor - tam olarak uygulamaya bağlı. Bence 400 kez çoğu durum için çok iyimser. Ama mesele şu ki, yazılımı kodlamak (ve hata ayıklamak!) 500x daha uzun sürerse, 400x hız artışı bile daha yavaş olur! Açıkçası sayılar biraz rastgele, ama programınızı doğru bir şekilde almanız için gereken süreyi hafife almayın. Genellikle, hız artışının daha hızlı geliştirme süresiyle dengelenmediğini göreceksiniz.
Oliver Mason

1
Python ve C ++ tensorflow kütüphaneleri kullanarak bir sinir ağı kodlamak için çalıştım ve buldum: C ++ kodlanmış sinir ağı algoritması aynı kitaplıklar ve aynı algoritma kullanılan python 280X kat daha hızlı çalışır
Mark ellon

1
Algoritmalar uygulanmasını öğrenme yerine piton Makinesi için C ++ kullanmamaya Peki neden
Mark Ellon

1
Yukarıdaki cevabımı gör ...
Oliver Mason

2

AI uygulamaları için yazılım geliştirme, programlamanın kendisine ve prototiplemeye ayrılabilir. C / C ++, uygulamayı oluşturmak için harika bir dildir çünkü çok hızlı çalışır ve ana işletim sistemleri için kitaplıklar olarak teslim edilebilir. Önceden derlenmiş bir C / C ++ uygulaması, anahtar teslimi bir cihaz dağıtmak isterse altın standarttır.

Bir programın GCC ile derlenebilmesi veya LLVM derleyicisinin birisinin hangi algoritmaya ihtiyacı olduğunu bilmesinden önce C ++ 'ın büyük bir sorunu vardır. C ++, belirli bir kaynak kodunu yürütebilir ve etkili komutlar sağlar, ancak dizinin hangi şekilde doldurulması gerektiği ve kodda hangi döngülerin gerekli olduğu belirsizdir. Bu soru, uygulama programlanmadan önce gelen prototip adımına uymaktadır. Sorun, derlenmiş bir uygulamanın nasıl oluşturulacağı ve bunu bir işletim sistemi paketi olarak nasıl sunacağı değil, sorun farklı AI algoritması ile oynamak, bazı gui prototipleri oluşturmak ve ekip üyeleriyle ilerlemeyi tartışmaktır.

Komut dosyası programlamaya dayanan ve neredeyse sahte kod özellikleri sağlayan bir numaralı gui prototip dili Guido van Rossum tarafından icat edildi. Asla C ++ 'ın yerini almaz, ancak yeni bir tür etki alanı oluşturur. Yazılımın uygulanmasından önce, özellikle Yapay Zeka'nın yenilikçi alanında bir prototip adımına ihtiyaç vardır.

Python'un neden C ++ 'dan daha üstün olduğunu açıklamak için C ++ ile bir yazılım prototipi oluşturmaya çalışmalıyız. Bir GUI uygulamasını hızlı bir şekilde uygulamak için bu dili kullanmak mümkün müdür? Hiçbir C ++, hızlı düzenleme döngülerine sahip bir prototip dili olarak değil, sistem programcıları için sağlam bir kaya olarak tasarlanmamıştır. Bu, prototip zaten çalışıyorsa, algoritma sabitse ve belgeler yazılırsa, kodu C ++ 'da yeniden programlamak mantıklıdır. Yani, belirli bir Python prototipi C ++ 'a dönüştürülür ve mevcut işletim sistemlerine teslim edilir. Ancak, makale yazmak, alternatifleri tartışmak ve yenilikleri yönetmekle ilgili olan ön adım için Python daha iyi bir seçimdir.


0

İddia ediyorsun

C ++ teknik olarak python'dan daha güçlü bir dildir.

Ancak bu iddia yanlıştır (veya fazla bir anlam ifade etmez). Bir programlama dilinin bir spesifikasyon olduğunu unutmayın (genellikle İngilizce yazılmış bir belge). Örneğin, n3337 , C ++ belirtiminin geç taslağıdır. Python'u sevmiyorum, ancak C ++ kadar güçlü görünüyor (C ++ uygulamaları genellikle Python olanlardan daha hızlı olsa bile ): iyi bir Python programcısı Python'da iyi kodlayabilir, başka bir iyi C ++ programcısı C ++ ve yardımcısı versa.

Teorik olarak, hem C ++ hem de Python Turing-complete (amaçlı) programlama dilleri.

Python da C ++ kadar etkileyici. Python ile ilgili olanlar hariç (C ++ vardır ama o ben bir programlama dili özelliğini isim olamaz yansıması ; ayrıca bkz bu cevabı ve farkında olmak dlopen- benim bkz manydl.c programı - ait LLVM ait libgccjit ait libbacktrace ve bazı dikkate meta - onlarla programlama yaklaşımı, à la Bismon ya da J.Pitrat'ın blogu bunu savunuyor).

Belki bir programlama dilini onu uygulayan yazılım olarak düşünüyorsunuz. Sonra Python, C ++ kadar etkileyici (ve öğrenmesi daha kolay görünüyor, ancak bu bir yanılsama; bu yanılsama hakkında daha fazla bilgi için http://norvig.com/21-days.html adresine bakın ). Python ve C ++ sözdizimleri çok farklı olsa bile oldukça benzer bir anlambilime sahiptir . Yazı sistemleri çok farklı.

Ne yazık ki, (gibi birçok yeni önemli makine öğrenme kütüphaneleri gözlemleyin TensorFlow veya Gudhi ) olan uygulamada C ++ daha Python kullanım daha kolay. Ancak TensorFlow ve Gudhi çoğunlukla C ++ ile kodlandığından ve her ikisi de bir C ++ API'sı (yalnızca bir Python olanı değil) sağladığından ve belgelediğinden C ++ kodundan TensorFlow veya Gudhi kullanabilirsiniz .

C ++ çok iş parçacıklı programlamayı etkinleştirir , ancak normal Python uygulaması GIL değerine sahiptir , bayt kodlanmıştır , bu nedenle C ++ 'dan önemli ölçüde daha yavaştır (genellikle GCC veya Clang gibi derleyiciler optimize edilerek derlenir ; ancak C ++ tercümanlarını, örneğin Cling'i bulabilirsiniz ). Python'un bazı deneysel uygulamaları JIT-derlemelidir ve GIL içermez. Ancak bu olgun değildir: Onların artırmak için bir milyon avro yatırım tavsiye TRL .

Ayrıca C ++ 'nın öğrenmesinin Python'dan çok daha zor olduğunu gözlemleyin. Bir düzine yıllık C ++ programlama deneyimiyle bile, C ++ 'ın çoğunu gerçekten bildiğimi iddia edemem.

Ne yazık ki, AI yazılım mühendisliğini öğreten en son kitaplar (örneğin, bu ya da bu ) örnekleri için Python'u (C ++ değil) kullanır. Aslında C ++ kullanarak daha yeni AI kitapları istiyorum!

BTW, (gibi açık kaynaklı yazılım programı bu birine veya eskimiş GCC ERİYİKTEKİ AI teknikleri kullanılarak), ancak Python kullanmayın. AI uygulamalarına yaklaşımım, içlerinde bazı DSL tasarımları yapmaya başlamak .

Bazı AI yaklaşımları meta programlamayı içerir, örneğin bir sistemin kodunu kendi başına üretmek (veya çoğunu, hatta tümünü). J.Pitrat (Ekim 2019'da vefat etti) bu yaklaşıma öncülük etti. Bkz onun blog , onun CAIA sistemi ve RefPerSys (kimin hırs çoğu -ve umarım all onun C ++ kod üretmektir) projesi.

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.