Почему C ++ кажется менее широко используемым в AI?

15

Я просто хочу знать, почему инженеры машинного обучения и программисты ИИ используют языки, такие как python, для выполнения задач ИИ, а не C ++, хотя C ++ технически более мощный язык, чем python.

Марк Эллон
источник
2
Этот ответ поможет
Ugnes
Добро пожаловать в AI! Я немного отредактировал название вопроса. Высокоуровневый Python имеет легкий синтаксис и является интерпретируемым языком, что означает настройку и тестирование без компиляции. Python также позволяет побитовые операции .
DukeZhou

Ответы:

16

Вам не нужен мощный язык для программирования AI. Большинство разработчиков используют такие библиотеки, как Keras, Torch, Caffe, Watson, TensorFlow и т. Д. Эти библиотеки высоко оптимизированы и обрабатывают всю работу, они построены на высокопроизводительных языках, таких как C. Python просто для описания нейросетевые слои, загрузка данных, запуск обработки и отображение результатов. Использование C ++ вместо этого едва ли улучшило бы производительность, но было бы сложнее для не-разработчиков, так как это требует заботы об управлении памятью. Кроме того, некоторые люди с искусственным интеллектом могут не иметь достаточного опыта программирования или информатики.

Другим похожим примером может быть разработка игр, где движок написан на C / C ++, и часто вся игровая логика написана на языке высокого уровня.

Bokan
источник
1
Если я заинтересован в разработке и работе с машинным обучением и nlp для области аппаратного обеспечения. Итак, могу ли я использовать C ++ для искусственного интеллекта
Марк Эллон,
1
@AnishGupta: Да, вы можете, при условии, что аппаратное обеспечение поддерживает необходимую обработку (нейронные сети особенно сильно нагружают процессор). TensforFlow на самом деле изначально C ++ (привязки Python являются дополнением), а вот API: tenorflow.org/api_docs/cc
Нил Слейтер,
«Большинство профилей ИИ происходят из области науки о данных». Наука о данных даже не является четко определенной областью, поэтому ваше предложение может быть не понято или неправильно понято.
nbro
1
«Использование C ++ вместо этого едва ли улучшило бы производительность, но было бы сложнее для не-разработчиков, поскольку это требует заботы об управлении памятью». Вам не нужно заботиться об управлении памятью с C ++, если вы пишете это хорошо.
Джереми Блен
Программирование ИИ - это не только использование существующих библиотек, таких как Keras и Torch. Нейронная сеть может быть запрограммирована с нуля без внешних зависимостей. Примеры трехслойного персептрона доступны в Интернете, а функция активации сигмоида умещается в 4 строки кода. Я бы сказал, что внедрение нейронной сети без существующих библиотек - более простой способ понять тему.
Мануэль Родригес
10

C ++ на самом деле является одним из самых популярных языков, используемых в пространстве AI / ML. В целом Python может быть более популярным, но, как отмечали другие, на самом деле довольно часто встречаются гибридные системы, в которых интенсивное сжатие ЦП выполняется в C ++, а Python используется для функций более высокого уровня.

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

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

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

Mindcrime
источник
5

Это зависит от того, насколько гибкой она должна быть: если у вас есть полноценная система, готовая к работе, которая не требует особых настроек, то C ++ (или даже C) может подойти. Вам нужно уделить много времени созданию программного обеспечения, но тогда оно должно работать довольно быстро.

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

Вы должны решить, как этот компромисс работает лучше всего для вас. Обычно лучше потратить меньше времени на кодирование и не слишком беспокоиться о более длительном времени выполнения. Если вы потратите на выполнение кода меньше дня, то потребуется много времени, чтобы C-кодированная версия наверстала упущенное. Большую часть времени это просто не стоит.

Кажется, что общий подход - это гибридные системы, в которых основные библиотеки реализованы на C / C ++, так как они не требуют особых изменений, а front-end / glue / interfaces находится в Python, так как вам нужна гибкость, а скорость не нужна. что критично.

Кстати, это не проблема, специфичная для AI, а общий вопрос интерпретируемых и скомпилированных языков. С ИИ многие системы все еще сосредоточены на исследованиях, а не на приложениях, и именно здесь скорость разработки превосходит скорость выполнения.

Оливер Мейсон
источник
1
Если я сделаю это с C ++, то смогу ли я получить более быстрое выполнение, чем Python, и как насчет уровня производительности, потому что заявлено, что: C ++ в 400 раз быстрее, чем Python
Марк Эллон,
1
Эта общая цифра ничего не значит - она ​​действительно зависит от точного применения. Я думаю, что 400 раз слишком оптимистично для большинства ситуаций. Но дело в том, что если вам понадобится в 500 раз больше времени для кодирования (и отладки!) Программного обеспечения, то даже увеличение скорости в 400 раз будет медленным! Очевидно, что цифры немного случайны, но не стоит недооценивать время, необходимое для правильной работы программы. Часто вы обнаружите, что увеличение скорости более чем компенсируется более быстрым временем разработки.
Оливер Мейсон,
1
Я попытался закодировать нейронную сеть, используя библиотеки тензорного потока в python и C ++ .. и я обнаружил, что: алгоритм нейронной сети, который был закодирован в C ++, работает в 280 раз быстрее, чем python, в котором использовались те же библиотеки и тот же алгоритм
Mark Ellon
1
Так почему бы не использовать C ++ для реализации алгоритмов машинного обучения, а не на python
Марк Эллон,
1
Смотрите мой ответ выше ...
Оливер Мейсон
2

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

У C ++ есть серьезная проблема, прежде чем программу можно будет скомпилировать с помощью GCC или компилятора LLVM, кто-то должен знать, какой алгоритм ему нужен. C ++ может выполнять данный исходный код и предоставляет эффективные команды, но каким образом массив должен быть заполнен и какие циклы необходимы в коде, неясно. Этот вопрос подходит для этапа создания прототипа, который предшествует программированию приложения. Проблема не в том, как создать скомпилированное приложение и доставить его в виде пакета операционной системы, а в том, чтобы поиграть с другим алгоритмом ИИ, создать несколько прототипов графического интерфейса и обсудить прогресс с членами команды.

Язык прототипирования графического интерфейса номер один, основанный на скриптовом программировании и обеспечивающий почти псевдокодовые возможности, был изобретен Гвидо ван Россумом. Он никогда не заменял C ++, но создает новый тип домена. Перед внедрением программного обеспечения необходим шаг создания прототипа, особенно в инновационной области искусственного интеллекта.

Чтобы объяснить, почему Python превосходит C ++, мы должны попытаться создать программный прототип на C ++. Можно ли использовать этот язык для быстрой реализации приложения с графическим интерфейсом? Ни один C ++ не был разработан не как язык прототипирования с быстрым циклом редактирования, а как сплошная скала для системных программистов. Это означает, что если прототип уже работает, если алгоритм исправлен и документация написана, имеет смысл перепрограммировать код на C ++. Это означает, что данный прототип Python конвертируется в C ++ и доставляется в существующие операционные системы. Но для предварительного шага, связанного с написанием статей, обсуждением альтернатив и управлением инновациями, Python - лучший выбор.

Мануэль Родригес
источник
0

Вы утверждаете, что

C ++ технически более мощный язык, чем python.

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

Теоретически, и C ++, и Python являются языками программирования, полными по Тьюрингу .

И Python так же выразителен, как и C ++. Я не могу назвать функцию языка программирования, которая есть в Python, но не в C ++ (за исключением тех, которые связаны с рефлексией ; посмотрите также этот ответ и узнайтеdlopen - смотрите мою программу manydl.c - LLVM , libgccjit , libbacktrace и рассмотрите некоторые метаданные). -программирование подход с ними, а-ля Бисмон или как блог Дж. Питрата защищает это).

Возможно, вы думаете о языке программирования как о программном обеспечении, реализующем его. Тогда 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 ++.

К сожалению, в самых последних книгах, обучающих программированию искусственного интеллекта (например, этой или той ), в качестве примеров используется Python (не C ++). Я на самом деле хочу новые книги по искусственному интеллекту, используя C ++!

Кстати, я программирую программное обеспечение с открытым исходным кодом (например, это или устаревшее GCC MELT ), используя методы ИИ, но они не используют Python. Мой подход к приложениям искусственного интеллекта состоит в том, чтобы начать проектировать некоторые DSL в них.

Некоторые подходы ИИ включают метапрограммирование, например, генерацию некоторого (или большей части, или даже всего) кода системы. Дж. Питрат (он скончался в октябре 2019 года) впервые применил этот подход. См. Его блог , его систему CAIA и проект RefPerSys (цель которого состоит в том, чтобы генерировать большую часть и, мы надеемся, весь свой код C ++).

Василий Старынкевич
источник