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.
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.
Yanıtlar:
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.
C ++ aslında AI / ML alanında kullanılan en popüler dillerden biridir. Python genel olarak daha popüler olabilir, ancak diğerlerinin de belirttiği gibi, C ++'da CPU yoğun sayı kırılmasının yapıldığı ve Python'un daha yüksek düzey işlevler için kullanıldığı hibrit sistemlere sahip olmak oldukça yaygındır.
Sadece açıklamak gerekirse:
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.
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.
İ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.