Chcę tylko wiedzieć, dlaczego inżynierowie uczenia maszynowego i programiści AI używają języków takich jak python do wykonywania zadań AI, a nie C ++, mimo że C ++ jest technicznie silniejszym językiem niż Python.
neural-networks
machine-learning
python
data-science
c++
Mark Ellon
źródło
źródło
Odpowiedzi:
Nie potrzebujesz mocnego języka do programowania AI. Większość programistów korzysta z bibliotek takich jak Keras, Torch, Caffe, Watson, TensorFlow itp. Te biblioteki są wysoce zoptymalizowane i obsługują całą tę pracę, ale są zbudowane z wysokowydajnych języków, takich jak C. Python jest po to, aby opisać warstwy sieci neuronowej, ładuj dane, uruchamiaj przetwarzanie i wyświetlaj wyniki. Zamiast tego użycie C ++ nie dałoby prawie żadnej poprawy wydajności, ale byłoby trudniejsze dla nie-programistów, ponieważ wymagałoby to dbania o zarządzanie pamięcią. Ponadto kilka osób AI może nie mieć solidnego doświadczenia w programowaniu lub informatyce.
Innym podobnym przykładem może być tworzenie gier, w których silnik jest kodowany w C / C ++, a często cała logika gry napisana w języku wysokiego poziomu.
źródło
C ++ jest w rzeczywistości jednym z najpopularniejszych języków używanych w przestrzeni AI / ML. Python może być ogólnie bardziej popularny, ale jak zauważyli inni, w rzeczywistości dość powszechne jest posiadanie systemów hybrydowych, w których intensywne procesorowanie liczb odbywa się w C ++, a Python jest wykorzystywany do funkcji wyższego poziomu.
Aby zilustrować:
http://mloss.org/software/language/c__/
http://mloss.org/software/language/python/
źródło
Zależy to od tego, jak elastyczna musi być: jeśli masz w pełni rozwinięty system gotowy do produkcji, który nie będzie wymagał wiele dostosowań, wtedy C ++ (lub nawet C) może być w porządku. Musisz poświęcić dużo czasu na zbudowanie oprogramowania, ale powinno ono działać dość szybko.
Jeśli jednak nadal eksperymentujesz z ustawieniami i parametrami i być może będziesz musiał dostosować architekturę, wtedy C ++ będzie niezdarny do pracy. Potrzebujesz języka takiego jak Python, który ułatwia zmianę rzeczy. Zmiana kodu jest łatwiejsza, ponieważ ogólnie można szybciej pisać w językach takich jak Python. Cena, którą płacisz, to to, że oprogramowanie zwykle nie działa tak dobrze.
Musisz zdecydować, w jaki sposób ten kompromis będzie dla Ciebie najlepszy. Zwykle lepiej jest poświęcić mniej czasu na kodowanie i nie przejmować się zbytnio długim czasem pracy. Jeśli poświęcisz dzień na wykonanie kodu, to dużo czasu potrzebuje wersja z kodem C, aby nadrobić zaległości. Przez większość czasu to po prostu nie jest tego warte.
Powszechnym podejściem wydają się być systemy hybrydowe, w których biblioteki podstawowe są implementowane w C / C ++, ponieważ nie wymagają one dużych zmian, a interfejs / interfejs / klej / interfejsy znajdują się w Pythonie, ponieważ tam potrzebujesz elastyczności, a szybkość nie jest to krytyczne.
Nawiasem mówiąc, nie jest to kwestia specyficzna dla sztucznej inteligencji, ale ogólna kwestia języków interpretowanych a skompilowanych. Dzięki sztucznej inteligencji wiele systemów nadal koncentruje się na badaniach, a nie na aplikacjach, i właśnie tam szybkość rozwoju przewyższa szybkość wykonania.
źródło
Tworzenie oprogramowania dla aplikacji AI można podzielić na samo programowanie i prototypowanie. C / C ++ to świetny język do tworzenia aplikacji, ponieważ działa bardzo szybko i może być dostarczany jako biblioteki dla głównych systemów operacyjnych. Wstępnie skompilowana aplikacja C / C ++ jest złotym standardem, jeśli ktoś chce wdrożyć urządzenie pod klucz.
C ++ ma poważny problem, zanim program będzie mógł zostać skompilowany za pomocą GCC lub kompilatora LLVM, ktoś musi wiedzieć, jakiego algorytmu potrzebuje. C ++ może wykonać dany kod źródłowy i zapewnia wydajne polecenia, ale sposób, w jaki tablica musi być wypełniona, a które dla pętli są potrzebne w kodzie, jest niejasne. To pytanie pasuje do etapu prototypowania, który następuje przed zaprogramowaniem aplikacji. Problem nie polega na tym, jak zbudować skompilowaną aplikację i dostarczyć ją jako pakiet systemu operacyjnego, problem polega na zabawie z innym algorytmem AI, zbudowaniu prototypów GUI i omówieniu postępów z członkami zespołu.
Guido van Rossum, pierwszy prototypowy język GUI oparty na programowaniu skryptowym i zapewniający możliwości prawie pseudokodu, został wynaleziony przez Guido van Rossuma. Nigdy nie zastąpił C ++, ale tworzy nowy rodzaj domeny. Przed wdrożeniem oprogramowania konieczne jest wykonanie etapu prototypowania, szczególnie w innowacyjnej dziedzinie sztucznej inteligencji.
Aby wyjaśnić, dlaczego Python jest lepszy od C ++, musimy spróbować zbudować prototyp oprogramowania w C ++. Czy można użyć tego języka do szybkiego wdrożenia aplikacji GUI? Żadne C ++ nie zostało zaprojektowane nie jako język prototypowy z szybkimi cyklami edycji, ale jako solidny kamień dla programistów systemowych. Oznacza to, że jeśli prototyp już działa, jeśli algorytm jest poprawiony i jeśli dokumentacja została napisana, sensowne jest przeprogramowanie kodu w C ++. Oznacza to, że dany prototyp Pythona jest konwertowany na C ++ i dostarczany do istniejących systemów operacyjnych. Ale dla kroku wstępnego, który dotyczy pisania artykułów, omawiania alternatyw i zarządzania innowacjami, Python jest lepszym wyborem.
źródło
Twierdzisz to
Ale to twierdzenie jest błędne (lub niewiele znaczy). Pamiętaj, że język programowania to specyfikacja (często jakiś dokument napisany w języku angielskim). Na przykład n3337 jest późnym szkicem specyfikacji C ++. Nie lubię Pythona, ale wydaje się być tak potężny jak C ++ (nawet jeśli implementacje C ++ są generalnie szybsze od Pythona): co dobry programista w Pythonie potrafi dobrze kodować w Pythonie, inny dobry programista w C ++ potrafi dobrze kodować w C ++ i odwrotnie versa.
Teoretycznie zarówno C ++, jak i Python są kompletnymi (celowymi) językami programowania Turinga .
Python jest równie wyrazisty jak C ++. Nie mogę wymienić funkcji języka programowania, którą Python ma, ale nie C ++ (oprócz tych związanych z refleksją ; zobacz także tę odpowiedź i bądź świadomy
dlopen
- patrz mój program manydl.c -, LLVM , libgccjit , libbacktrace i rozważ niektóre meta -programowanie z nimi podejścia, à la Bismon lub jak blog J.Pitrat to zaleca).Może myślisz o języku programowania jako oprogramowaniu go wdrażającym. Zatem Python jest tak wyrazisty, jak C ++ (i wydaje się łatwiejszy do nauczenia, ale to złudzenie; więcej informacji na temat tej iluzji można znaleźć na stronie http://norvig.com/21-days.html ). Python i C ++ mają dość podobną semantykę , nawet jeśli ich składnia jest bardzo różna. Ich system typów jest bardzo różny.
Zauważmy, że niestety, wiele ostatnich główne biblioteki Machine Learning (takie jak TensorFlow lub Gudhi ) są w praktyce łatwiejsze do zastosowania w Pythonie niż w C ++. Ale możesz używać TensorFlow lub Gudhi z kodu C ++, ponieważ TensorFlow i Gudhi są w większości zakodowane w C ++ i oba zapewniają i dokumentują API C ++ (nie tylko Python).
C ++ umożliwia programowanie wielowątkowe , ale zwykła implementacja Pythona ma GIL , jest kodowana bajtowo , więc jest znacznie wolniejsza niż C ++ (który jest zwykle kompilowany przez optymalizację kompilatorów takich jak GCC lub Clang ; jednak można znaleźć interpretery C ++, np. Cling ). Niektóre eksperymentalne implementacje Pythona są kompilowane w JIT i bez GIL. Ale te nie są dojrzałe: zalecam zainwestowanie miliona euro, aby zwiększyć ich TRL .
Zauważ też, że C ++ jest znacznie trudniejszy do nauczenia się niż Python. Nawet mając kilkanaście lat doświadczenia w programowaniu w C ++, nie mogę twierdzić, że naprawdę znam większość C ++.
Niestety, najnowsze książki uczące inżynierii oprogramowania AI (np. Ta czy tamta ) wykorzystują Python (nie C ++) jako przykłady. Naprawdę chcę nowszych książek o AI za pomocą C ++!
BTW, programuję oprogramowanie typu open source (jak to lub przestarzałe GCC MELT ) przy użyciu technik AI, ale nie używają Pythona. Moje podejście do aplikacji AI polega na rozpoczęciu projektowania niektórych DSL .
Niektóre podejścia AI obejmują metaprogramowanie, np. Generowanie części (lub większości, a nawet całego) kodu systemu samodzielnie. J.Pitrat (zmarł w październiku 2019 r.) Był pionierem tego podejścia. Zobacz jego blog , jego system CAIA i projekt RefPerSys (którego ambicją jest generowanie większości - i mam nadzieję - całego) kodu C ++).
źródło