Dlaczego C ++ wydaje się być mniej rozpowszechniony w AI?

15

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.

Mark Ellon
źródło
2
Ta odpowiedź pomoże
Ugnes
Witamy w AI! Lekko zredagowałem tytuł pytania. Na wysokim poziomie Python ma lekką składnię i jest językiem interpretowanym, co oznacza poprawianie i testowanie bez kompilacji. Python pozwala również na operacje bitowe .
DukeZhou

Odpowiedzi:

16

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.

bokan
źródło
1
Jeśli jestem zainteresowany tworzeniem i pracą z uczeniem maszynowym i nlp w dziedzinie sprzętu .. Czy mogę używać C ++ do AI
Mark Ellon
1
@AnishGupta: Tak, pod warunkiem, że sprzęt obsługuje niezbędne przetwarzanie (szczególnie sieci neuronowe są bardzo obciążone procesorem). TensforFlow jest w rzeczywistości natywnie C ++ (powiązania Pythona są dodatkiem), a oto API: tensorflow.org/api_docs/cc
Neil Slater
„większość profili AI pochodzi z dziedziny nauki o danych”. Analiza danych nie jest nawet dobrze zdefiniowaną dziedziną, więc Twoje zdanie może nie zostać zrozumiane lub źle zrozumiane.
nbro
1
„Zamiast tego użycie C ++ nie dałoby prawie żadnej poprawy wydajności, ale byłoby trudniejsze dla nie-programistów, ponieważ trzeba dbać o zarządzanie pamięcią.” Nie musisz przejmować się zarządzaniem pamięcią w C ++, jeśli piszesz to dobrze.
Jérémy Blain
Programowanie AI to nie tylko korzystanie z istniejących bibliotek, takich jak Keras i Torch. Sieć neuronowa może być programowana od zera bez zewnętrznych zależności. Przykłady trójwarstwowego perceptronu są dostępne w Internecie, a funkcja aktywacji sigmoidalnej mieści się w 4 liniach kodu. Powiedziałbym, że wdrożenie sieci neuronowej bez istniejących bibliotek jest łatwiejszym sposobem zrozumienia tego tematu.
Manuel Rodriguez
10

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/

przestępstwa umysłowe
źródło
5

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.

Oliver Mason
źródło
1
Jeśli zrobię to z C ++, czy mogę uzyskać szybkie wykonanie niż Python, a co z poziomem wydajności, ponieważ stwierdzono, że: C ++ jest 400 razy szybszy niż Python
Mark Ellon
1
Ta ogólna liczba nic nie znaczy - naprawdę zależy od dokładnego zastosowania. Myślę, że 400 razy jest prawdopodobnie zbyt optymistyczne w większości sytuacji. Ale chodzi o to, że jeśli kodowanie oprogramowania (i debugowanie go!) Zajmuje 500 razy dłużej, to nawet 400-krotna poprawa prędkości byłaby wolniejsza! Oczywiście liczby są nieco losowe, ale nie lekceważ czasu, jaki zajmuje Ci poprawne działanie programu. Często okazuje się, że wzrost prędkości jest więcej niż rekompensowany szybszym czasem programowania.
Oliver Mason
1
Próbowałem kodować sieć neuronową przy użyciu bibliotek tensorflow w Pythonie i C ++ .. i odkryłem, że: algorytm sieci neuronowej, który został zakodowany w C ++, działa 280 razy szybciej niż python, w którym zastosowano te same biblioteki i ten sam algorytm
Mark ellon
1
Dlaczego więc nie używać C ++ do implementacji algorytmów uczenia maszynowego zamiast python
Mark Ellon
1
Zobacz moją odpowiedź powyżej ...
Oliver Mason
2

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.

Manuel Rodriguez
źródło
0

Twierdzisz to

C ++ jest technicznie silniejszym językiem niż Python.

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 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 ++).

Basile Starynkevitch
źródło