Por que o C ++ parece menos utilizado na IA?


15

Eu só quero saber por que os engenheiros do Machine Learning e os programadores de IA usam linguagens como python para executar tarefas de IA e não C ++, mesmo que C ++ seja tecnicamente uma linguagem mais poderosa que python.


2
Esta resposta ajudará
Ugnes

Bem-vindo à AI! Editei um pouco o título da pergunta. De alto nível, o Python possui uma sintaxe leve e é uma linguagem interpretada, o que significa ajustes e testes sem compilação. Python também permite operações bit a bit .
DukeZhou

Respostas:


16

Você não precisa de uma linguagem poderosa para programar a IA. A maioria dos desenvolvedores está usando bibliotecas como Keras, Torch, Caffe, Watson, TensorFlow etc. Essas bibliotecas são altamente otimizadas e lidam com todo o trabalho, mas são construídas com linguagens de alto desempenho, como C. Python está lá apenas para descrever o camadas de rede neural, carregar dados, iniciar o processamento e exibir resultados. Usar C ++ em vez disso não daria quase nenhuma melhoria de desempenho, mas seria mais difícil para não desenvolvedores, pois requer cuidado com o gerenciamento de memória. Além disso, várias pessoas da IA ​​podem não ter uma programação muito sólida ou formação em ciência da computação.

Outro exemplo semelhante seria o desenvolvimento de jogos, em que o mecanismo é codificado em C / C ++ e, geralmente, toda a lógica do jogo escrita em uma linguagem de alto nível.


1
Se eu estou interessado em desenvolver e trabalhar com aprendizagem de máquina e PNL para o campo de hardware .. Então eu posso usar C ++ para AI
Mark ellon

1
@AnishGupta: Sim, você pode, desde que o hardware suporte o processamento necessário (as redes neurais especificamente exigem muito do processador). TensforFlow é de fato nativamente C ++ (ligações Python são um complemento), e aqui é a API: tensorflow.org/api_docs/cc
Neil Slater

"a maioria dos perfis de IA vem do campo da ciência de dados". A ciência de dados nem sequer é um campo bem definido; portanto, sua sentença pode não ser entendida ou incompreendida.
Nbro

1
"Usar C ++ em vez disso não daria quase nenhuma melhoria de desempenho, mas seria mais difícil para não desenvolvedores, pois requer cuidado com o gerenciamento de memória". Você não precisa se preocupar com o gerenciamento de memória com C ++ se o escrever bem.
Jérémy Blain

A programação de IA não é apenas sobre o uso de bibliotecas existentes como Keras e Torch. Uma rede neural pode ser programada do zero, sem dependências externas. Exemplos para um perceptron de três camadas estão disponíveis na Internet e a função de ativação sigmóide se encaixa em quatro linhas de código. Eu diria que implementar uma rede neural sem bibliotecas existentes é a maneira mais fácil de entender o tópico.
Manuel Rodriguez


5

Depende de quão flexível ele precisa ser: se você possui um sistema completo pronto para produção, que não precisará de muito ajuste, o C ++ (ou mesmo C) pode ser bom. Você precisa dedicar muito tempo à criação do software, mas ele deve ser executado rapidamente.

No entanto, se você ainda estiver experimentando configurações e parâmetros, e talvez precisar ajustar a arquitetura, o C ++ será desajeitado para trabalhar. Você precisa de uma linguagem como Python, que facilita a mudança de coisas. Alterar o código é mais fácil, pois geralmente você pode codificar mais rapidamente em linguagens como Python. O preço que você paga é que o software geralmente não funciona tão bem.

Você precisa decidir como essa troca funciona melhor para você. Geralmente, é melhor gastar menos tempo na codificação e não se preocupar muito com o tempo de execução mais longo. Se você demorar um dia a menos para concluir seu código, é muito tempo que a versão codificada em C precisa ser atualizada. Na maioria das vezes, simplesmente não vale a pena.

Uma abordagem comum parece ser sistemas híbridos, onde as bibliotecas principais são implementadas em C / C ++, pois não precisam de muita mudança, e as interfaces front-end / cola / estão em Python, pois é necessário flexibilidade e velocidade. que crítico.

A propósito, esse não é um problema específico da IA, mas uma questão geral de linguagens interpretadas versus compiladas. Com a IA, muitos sistemas ainda estão focados na pesquisa e não na aplicação, e é aí que a velocidade do desenvolvimento supera a velocidade da execução.


1
Se eu fizer isso com C ++, então eu posso começar a execução rápida do que python eo que é sobre o nível de desempenho, pois afirma-se que: C ++ é 400 vezes mais rápidas do que python
Mark ellon

1
Esse número geral não significa nada - depende realmente da aplicação exata. Eu acho que 400 vezes é provavelmente muito otimista para a maioria das situações. Mas o ponto é que, se você demorar 500x mais tempo para codificar (e depurar!) O software, mesmo uma melhoria de 400x na velocidade ainda será mais lenta! Obviamente, os números são um pouco aleatórios, mas não subestime o tempo que leva para você acertar seu programa. Muitas vezes, você descobrirá que o aumento na velocidade é mais do que compensado pelo tempo de desenvolvimento mais rápido.
27618 Oliver Mason

1
Eu tentei codificar uma rede neural usando bibliotecas tensorflow em python e C ++ .. e descobri que: o algoritmo de rede neural que foi codificado em C ++ é executado 280 vezes mais rápido que o python em que as mesmas bibliotecas e o mesmo algoritmo foram usados
Mark ellon

1
Então, por que não usar C ++ para Máquina de aprender algoritmos de implementação em vez de python
Mark ellon

1
Veja minha resposta acima ...
Oliver Mason

2

O desenvolvimento de software para aplicativos de IA pode ser separado em programação e prototipagem. O C / C ++ é uma ótima linguagem para criar o aplicativo, pois roda muito rápido e pode ser entregue como bibliotecas para os principais sistemas operacionais. Um aplicativo C / C ++ pré-compilado é o padrão-ouro para quem deseja implantar um dispositivo pronto para uso.

O C ++ tem um grande problema, antes que um programa possa ser compilado com o GCC ou o compilador LLVM, alguém precisa saber qual algoritmo ele precisa. O C ++ pode executar um determinado código-fonte e fornece comandos eficientes, mas não é claro como a matriz deve ser preenchida e quais são os loops necessários no código. Esta pergunta se encaixa na etapa de prototipagem que vem antes da aplicação do programa. O problema não é como criar um aplicativo compilado e entregá-lo como um pacote de sistema operacional; o problema é jogar com algoritmos de IA diferentes, criar alguns protótipos de GUI e discutir com os membros da equipe o progresso.

A linguagem de prototipagem gui número um, que é baseada na programação de scripts e fornece recursos de quase pseudocódigo, foi inventada por Guido van Rossum. Ele nunca substituiu o C ++, mas cria um novo tipo de domínio. É necessário uma etapa de prototipagem antes que o software seja implementado, especialmente no domínio inovador da Inteligência Artificial.

Para explicar por que o Python é superior ao C ++, precisamos tentar criar um protótipo de software com C ++. É possível usar essa linguagem para implementar rapidamente um aplicativo GUI? Nenhum C ++ foi projetado não como uma linguagem de prototipagem com ciclos rápidos de edição, mas como uma rocha sólida para programadores de sistema. Isso significa que, se o protótipo já estiver funcionando, se o algoritmo estiver corrigido e se a documentação foi escrita, faz sentido reprogramar o código em C ++. Isso significa que um determinado protótipo Python é convertido em C ++ e entregue aos sistemas operacionais existentes. Mas para a pré-etapa que tem a ver com escrever documentos, discutir alternativas e gerenciar inovações, o Python é a melhor escolha.


0

Você afirma que

C ++ é tecnicamente uma linguagem mais poderosa que python.

Mas essa afirmação está errada (ou não significa muito). Lembre-se de que uma linguagem de programação é uma especificação (geralmente algum documento escrito em inglês). Por exemplo, n3337 é um rascunho tardio da especificação C ++. Eu não gosto de Python, mas parece tão poderoso quanto o C ++ (mesmo que as implementações do C ++ sejam geralmente mais rápidas que as do Python): o que um bom programador de Python pode codificar bem em Python, outro bom programador de C ++ pode codificar bem em C ++ e vice versa.

Teoricamente, C ++ e Python são linguagens de programação completas de Turing (de propósito).

E o Python é tão expressivo quanto o C ++. Eu não posso nomear um recurso da linguagem de programação que o Python possui, mas não o C ++ (exceto aqueles relacionados à reflexão ; veja também esta resposta e esteja ciente de dlopen- veja meu programa manydl.c -, do LLVM , do libgccjit , do libbacktrace e considere algumas meta -programação com eles, à la Bismon ou como o blog de J.Pitrat defende).

Talvez você pense em uma linguagem de programação como o software que a implementa. Então, o Python é tão expressivo quanto o C ++ (e parece mais fácil de aprender, mas isso é uma ilusão; consulte http://norvig.com/21-days.html para obter mais informações sobre essa ilusão). Python e C ++ têm uma semântica bastante semelhante , mesmo que sua sintaxe seja muito diferente. O sistema de tipos deles é muito diferente.

Observe que, infelizmente, muitas das principais bibliotecas de aprendizado de máquina recentes (como TensorFlow ou Gudhi ) são na prática mais fáceis de usar no Python do que no C ++. Mas você pode usar o TensorFlow ou Gudhi do código C ++, pois o TensorFlow e o Gudhi são codificados principalmente em C ++ e fornecem e documentam uma API C ++ (não apenas uma Python).

O C ++ permite a programação multithread , mas a implementação usual do Python tem seu GIL , é codificado por código , portanto é significativamente mais lento que o C ++ (que geralmente é compilado pela otimização de compiladores como GCC ou Clang ; no entanto, você pode encontrar intérpretes C ++, por exemplo, Cling ). Algumas implementações experimentais do Python são compiladas por JIT e sem GIL. Mas estes não estão maduros: recomendo investir um milhão de euros para aumentar seu TRL .

Observe também que o C ++ é muito mais difícil de aprender do que o Python. Mesmo com uma dúzia de anos de experiência em programação em C ++, não posso afirmar que realmente conheço a maior parte do C ++.

Infelizmente, os livros mais recentes de ensino de engenharia de software AI (por exemplo, este um ou que um) uso Python (não C ++) para os seus exemplos. Na verdade, eu quero livros de IA mais recentes usando C ++!

BTW, eu programo software de código aberto (como este , ou o obsoleto GCC MELT ) usando técnicas de IA, mas eles não usam Python. Minha abordagem aos aplicativos de IA é começar a projetar alguns DSL neles.

Algumas abordagens de IA envolvem metaprogramação, por exemplo, gerar parte (ou a maioria, ou mesmo a totalidade) do código de um sistema por si só. J.Pitrat (falecido em outubro de 2019) foi pioneiro nessa abordagem. Veja seu blog , seu sistema CAIA e o projeto RefPerSys (cuja ambição é gerar a maior parte - e espero que tudo - de seu código C ++).

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.