Мені просто хочеться знати, чому інженери машинного навчання та програмісти AI використовують такі мови, як python, для виконання завдань AI, а не C ++, хоча C ++ технічно є більш потужною мовою, ніж python.
Мені просто хочеться знати, чому інженери машинного навчання та програмісти AI використовують такі мови, як python, для виконання завдань AI, а не C ++, хоча C ++ технічно є більш потужною мовою, ніж python.
Відповіді:
Вам не потрібна потужна мова для програмування AI. Більшість розробників використовують такі бібліотеки, як Keras, Torch, Caffe, Watson, TensorFlow і т.д. шари нейронної мережі, завантажують дані, запускають обробку та відображають результати. Використання C ++ натомість не дасть ледь не покращення продуктивності, але буде складніше для не розробників, оскільки потрібно піклуватися про управління пам'яттю. Крім того, декілька людей з ІС можуть не мати дуже солідного досвіду програмування чи інформатики.
Іншим подібним прикладом може бути розробка ігор, де движок кодується в C / C ++, і, часто, вся логіка гри, написана мовою високого рівня.
C ++ - це фактично одна з найпопулярніших мов, яка використовується в просторі AI / ML. Python може бути більш популярним в цілому, але, як зазначають інші, насправді досить часто зустрічаються гібридні системи, в яких інтенсивне стискання чисельних процесорів відбувається на C ++, а Python використовується для функцій вищого рівня.
Просто для ілюстрації:
Це залежить від того, наскільки вона повинна бути гнучкою: якщо у вас є повноцінна система, готова до виробництва, яка не потребує великих налаштувань, то C ++ (або навіть С) може бути добре. Потрібно витратити багато часу на створення програмного забезпечення, але тоді воно повинно працювати досить швидко.
Однак якщо ви все ще експериментуєте з налаштуваннями та параметрами, і, можливо, вам доведеться скорегувати архітектуру, тоді C ++ буде незграбно працювати. Вам потрібна така мова, як Python, яка полегшує змінити речі. Зміна коду простіше, так як зазвичай ви можете кодувати швидше на таких мовах, як Python. Ціна, яку ви платите, - це те, що програмне забезпечення зазвичай не працює.
Ви повинні вирішити, як саме цей компроміс найкраще підходить для вас. Зазвичай краще витрачати менше часу на кодування, і не турбуватися надто про тривалий час роботи. Якщо вам потрібно на день менше, щоб виконати свій код, це дуже багато часу, коли потрібна версія C-коду. Більшість часу це просто не варто.
Поширеним підходом є гібридні системи, де основні бібліотеки реалізовані в C / C ++, оскільки їм не потрібно сильно змінюватись, а інтерфейси / клей / інтерфейси - в Python, оскільки там вам потрібна гнучкість, а швидкість - не що критично.
Це, до речі, не специфічне для AI питання, а загальне питання інтерпретованих та компільованих мов. Завдяки AI багато систем все ще орієнтовані на дослідження, а не на застосування, і саме там швидкість розвитку нарікає швидкість виконання.
Розробка програмного забезпечення для програм AI може бути розділена на програмування і прототипування. C / C ++ - це чудова мова для створення програми, оскільки вона працює дуже швидко і може доставлятись як бібліотеки для основних операційних систем. Попередньо складений додаток C / C ++ є золотим стандартом, якщо хтось хоче розгорнути пристрій під ключ.
У C ++ є основна проблема, перш ніж програма може бути скомпільована за допомогою GCC або компілятора LLVM, хтось повинен знати, який алгоритм йому потрібен. C ++ може виконати заданий вихідний код і надає ефективні команди, але яким способом заповнення масиву та які петлі потрібні в коді, незрозуміло. Це питання вписується в крок прототипування, який надходить до того, як програма буде запрограмована. Проблема не в тому, як скласти компільований додаток і поставити це як пакет операційної системи, проблема полягає в тому, щоб грати з різним алгоритмом AI, будувати деякі прототипи gui та обговорювати з членами команди прогрес.
Мова прототипування gui номер один, яка базується на програмуванні сценаріїв і забезпечує можливості майже псевдокоду, була винайдена Гвідо ван Россумом. Він ніколи не замінював C ++, але створює новий вид домену. Перед впровадженням програмного забезпечення, перш за все, в інноваційній області штучного інтелекту необхідний крок для складання прототипів.
Щоб пояснити, чому Python перевершує C ++, ми повинні спробувати створити прототип програмного забезпечення з C ++. Чи можна використовувати цю мову для швидкої реалізації програми gui? Жоден C ++ не був розроблений не як мова прототипування з швидкими циклами редагування, а як міцний рок для системних програмістів. Це означає, що якщо прототип вже працює, якщо алгоритм виправлений і якщо документація була написана, має сенс перепрограмувати код на C ++. Це означає, що даний прототип Python перетворюється на C ++ і доставляється до існуючих операційних систем. Але для попереднього кроку, який стосується написання статей, обговорення альтернатив та управління інноваціями, Python - кращий вибір.
Ви це стверджуєте
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 ++-коду).