Чому C ++ здається менш широко використовуваним в ШІ?


15

Мені просто хочеться знати, чому інженери машинного навчання та програмісти AI використовують такі мови, як python, для виконання завдань AI, а не C ++, хоча C ++ технічно є більш потужною мовою, ніж python.


2
Ця відповідь допоможе
Угнес

Ласкаво просимо до AI! Я трохи відредагував назву питання. Python на високому рівні має легкий синтаксис і є інтерпретованою мовою, що означає налаштування та тестування без компіляції. Python також дозволяє здійснювати побітові операції .
DukeZhou

Відповіді:


16

Вам не потрібна потужна мова для програмування AI. Більшість розробників використовують такі бібліотеки, як Keras, Torch, Caffe, Watson, TensorFlow і т.д. шари нейронної мережі, завантажують дані, запускають обробку та відображають результати. Використання C ++ натомість не дасть ледь не покращення продуктивності, але буде складніше для не розробників, оскільки потрібно піклуватися про управління пам'яттю. Крім того, декілька людей з ІС можуть не мати дуже солідного досвіду програмування чи інформатики.

Іншим подібним прикладом може бути розробка ігор, де движок кодується в C / C ++, і, часто, вся логіка гри, написана мовою високого рівня.


1
Якщо мені цікаво розвиватись та працювати з машинним навчанням та nlp для апаратної галузі .. Тож чи можу я використовувати C ++ для AI
Марк Еллон

1
@AnishGupta: Так, за умови, що апаратне забезпечення підтримує необхідну обробку (нейронні мережі, зокрема, дуже інтенсивні для процесора). TensforFlow - це фактично C ++ (прив'язки Python є доповненням), і ось API: tensorflow.org/api_docs/cc
Ніл Слейтер

"більшість AI-профілів походять із галузі наукових даних". Наука даних не є навіть чітко визначеним полем, тому ваше речення може бути не зрозумілим або неправильно зрозумілим.
nbro

1
"Використання C ++ натомість не дасть ледь не покращення продуктивності, але було б складніше для не розробників, оскільки потрібно піклуватися про управління пам'яттю." Вам не потрібно піклуватися про управління пам'яттю за допомогою C ++, якщо ви це добре записуєте.
Jérémy Blain

Програмування AI - це не лише використання існуючих бібліотек, таких як Keras і Torch. Нейронну мережу можна запрограмувати з нуля без зовнішніх залежностей. Приклади 3-шарового персептрона доступні в Інтернеті, і функція активації сигмоїдів вписується в 4 рядки коду. Я б сказав, що реалізація нейронної мережі без існуючих бібліотек - це простіший спосіб зрозуміти тему.
Мануель Родрігес

10

C ++ - це фактично одна з найпопулярніших мов, яка використовується в просторі AI / ML. Python може бути більш популярним в цілому, але, як зазначають інші, насправді досить часто зустрічаються гібридні системи, в яких інтенсивне стискання чисельних процесорів відбувається на C ++, а Python використовується для функцій вищого рівня.

Просто для ілюстрації:

http://mloss.org/software/language/c__/

http://mloss.org/software/language/python/


5

Це залежить від того, наскільки вона повинна бути гнучкою: якщо у вас є повноцінна система, готова до виробництва, яка не потребує великих налаштувань, то C ++ (або навіть С) може бути добре. Потрібно витратити багато часу на створення програмного забезпечення, але тоді воно повинно працювати досить швидко.

Однак якщо ви все ще експериментуєте з налаштуваннями та параметрами, і, можливо, вам доведеться скорегувати архітектуру, тоді C ++ буде незграбно працювати. Вам потрібна така мова, як Python, яка полегшує змінити речі. Зміна коду простіше, так як зазвичай ви можете кодувати швидше на таких мовах, як Python. Ціна, яку ви платите, - це те, що програмне забезпечення зазвичай не працює.

Ви повинні вирішити, як саме цей компроміс найкраще підходить для вас. Зазвичай краще витрачати менше часу на кодування, і не турбуватися надто про тривалий час роботи. Якщо вам потрібно на день менше, щоб виконати свій код, це дуже багато часу, коли потрібна версія C-коду. Більшість часу це просто не варто.

Поширеним підходом є гібридні системи, де основні бібліотеки реалізовані в C / C ++, оскільки їм не потрібно сильно змінюватись, а інтерфейси / клей / інтерфейси - в Python, оскільки там вам потрібна гнучкість, а швидкість - не що критично.

Це, до речі, не специфічне для AI питання, а загальне питання інтерпретованих та компільованих мов. Завдяки AI багато систем все ще орієнтовані на дослідження, а не на застосування, і саме там швидкість розвитку нарікає швидкість виконання.


1
Якщо я це роблю з C ++, то чи можу я отримати швидше виконання, ніж python, і що стосується рівня продуктивності, оскільки зазначено, що: C ++ в 400 разів швидше, ніж python
Марк Еллон

1
Ця загальна цифра нічого не означає - вона дійсно залежить від точного застосування. Я думаю, що 400 разів - це, мабуть, занадто оптимістично для більшості ситуацій. Але справа в тому, що якщо на кодування (і налагодження!) Програмного забезпечення потрібно 500 разів більше, то навіть швидкість у 400 разів швидше все-таки буде повільнішою! Очевидно, що цифри трохи випадкові, але не варто недооцінювати час, який потрібен тобі на правильну програму. Часто ви виявите, що збільшення швидкості більш ніж компенсується більш швидким часом розвитку.
Олівер Мейсон

1
Я спробував кодувати нейронну мережу за допомогою бібліотек tensorflow в python та C ++ .. і я виявив, що: алгоритм нейронної мережі, кодований в C ++, працює в 280 разів швидше, ніж python, в якому використовувалися ті самі бібліотеки та той самий алгоритм
Марк Еллон

1
То чому б не використовувати C ++ для впровадження алгоритмів машинного навчання, а не python
Марк Еллон

1
Дивіться мою відповідь вище ...
Олівер Мейсон

2

Розробка програмного забезпечення для програм AI може бути розділена на програмування і прототипування. C / C ++ - це чудова мова для створення програми, оскільки вона працює дуже швидко і може доставлятись як бібліотеки для основних операційних систем. Попередньо складений додаток C / C ++ є золотим стандартом, якщо хтось хоче розгорнути пристрій під ключ.

У C ++ є основна проблема, перш ніж програма може бути скомпільована за допомогою GCC або компілятора LLVM, хтось повинен знати, який алгоритм йому потрібен. C ++ може виконати заданий вихідний код і надає ефективні команди, але яким способом заповнення масиву та які петлі потрібні в коді, незрозуміло. Це питання вписується в крок прототипування, який надходить до того, як програма буде запрограмована. Проблема не в тому, як скласти компільований додаток і поставити це як пакет операційної системи, проблема полягає в тому, щоб грати з різним алгоритмом AI, будувати деякі прототипи gui та обговорювати з членами команди прогрес.

Мова прототипування gui номер один, яка базується на програмуванні сценаріїв і забезпечує можливості майже псевдокоду, була винайдена Гвідо ван Россумом. Він ніколи не замінював C ++, але створює новий вид домену. Перед впровадженням програмного забезпечення, перш за все, в інноваційній області штучного інтелекту необхідний крок для складання прототипів.

Щоб пояснити, чому Python перевершує C ++, ми повинні спробувати створити прототип програмного забезпечення з C ++. Чи можна використовувати цю мову для швидкої реалізації програми gui? Жоден C ++ не був розроблений не як мова прототипування з швидкими циклами редагування, а як міцний рок для системних програмістів. Це означає, що якщо прототип вже працює, якщо алгоритм виправлений і якщо документація була написана, має сенс перепрограмувати код на C ++. Це означає, що даний прототип Python перетворюється на C ++ і доставляється до існуючих операційних систем. Але для попереднього кроку, який стосується написання статей, обговорення альтернатив та управління інноваціями, Python - кращий вибір.


0

Ви це стверджуєте

C ++ технічно є більш потужною мовою, ніж пітон.

Але це твердження є помилковим (або мало значить). Пам'ятайте, що мова програмування - це специфікація (часто це якийсь документ, написаний англійською мовою). Наприклад, n3337 є пізньою чергою специфікації C ++. Мені не подобається Python, але він здається потужнішим, ніж C ++ (навіть якщо реалізація C ++, як правило, швидше, ніж Python): те, що хороший програміст Python може добре кодувати в Python, інший хороший програміст C ++ може добре кодувати в C ++ і порок навпаки.

Теоретично, як C ++, так і Python є повноцінними (спеціально) мовами програмування.

І Python настільки виразний, як і C ++. Я не можу назвати функцію мови програмування, якою є Python, але не C ++ (за винятком тих, що стосуються відображення ; див. Також цю відповідь і будьте в курсі dlopen- дивіться мою програму Manydl.c - LLVM , libgccjit , libbacktrace , і розгляньте деякі мета -програмовий підхід з ними, à la Bismon або як блог Дж. Пітрата виступає за це).

Можливо, ви думаєте про мову програмування як програмне забезпечення, яке її реалізує. Тоді Python настільки виразний, як і C ++ (і здається, що його легше вивчити, але це ілюзія; докладнішу інформацію про цю ілюзію див. На http://norvig.com/21-days.html ). Python та C ++ мають досить схожу семантику , навіть якщо їх синтаксис сильно відрізняється. Система їх типу дуже відрізняється.

Зауважте, що, на жаль, багато останніх великих бібліотек машинного навчання (наприклад, TensorFlow або Gudhi ) на практиці легше використовувати в Python, ніж у C ++. Але ви можете використовувати TensorFlow або Gudhi з коду C ++, оскільки TensorFlow і Gudhi здебільшого кодуються в C ++ і обидва надають і документують API C ++ (не лише Python).

C ++ дозволяє багатопотокове програмування , але звичайна реалізація Python має свій GIL , є біткодизованою , тому значно повільніше, ніж C ++ (яка зазвичай компілюється шляхом оптимізації компіляторів, таких як GCC або Clang ; проте ви можете знайти інтерпретаторів C ++, наприклад, Cling ). Деякі експериментальні реалізації Python складені JIT та без GIL. Але вони не зрілі: я рекомендую вкласти мільйон євро, щоб збільшити їх TRL .

Зауважте також, що C ++ вивчити набагато складніше, ніж Python. Навіть маючи десяток років досвіду програмування на C ++, я не можу стверджувати, що дійсно знаю більшість C ++.

До жаль, останні книги навчальних AI програмної інженерії (наприклад , це один або , що одне) використовувати Python (НЕ C ++) для своїх прикладів. Насправді я хочу останніх AI книг, що використовують C ++!

До речі, я програмую програмне забезпечення з відкритим кодом (наприклад, це або застарілий GCC MELT ), використовуючи методи AI, але вони не використовують Python. Мій підхід до програм AI полягає в тому, щоб почати розробляти в них деякі DSL .

Деякі підходи AI включають метапрограмування, наприклад, генерування деякого (або більшості, або навіть усіх) коду системи само собою. Дж. Пітрат (він пішов з життя у жовтні 2019 р.) Запровадив цей підхід. Перегляньте його блог , його систему CAIA та проект RefPerSys (чия амбіція полягає у створенні більшої частини - і, сподіваємось, всього - його C ++-коду).

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.