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.
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.
Respostas:
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.
C ++ é realmente uma das linguagens mais populares usadas no espaço de AI / ML. O Python pode ser mais popular em geral, mas, como outros observaram, é realmente comum ter sistemas híbridos nos quais o processamento intensivo de números da CPU é feito em C ++ e o Python é usado para funções de nível superior.
Apenas para ilustrar:
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.
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.
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 ++).