Perché il C ++ sembra meno ampiamente utilizzato nell'intelligenza artificiale?


15

Voglio solo sapere perché gli ingegneri di Machine Learning e i programmatori AI usano linguaggi come Python per eseguire attività AI e non C ++ anche se tecnicamente C ++ è un linguaggio più potente di Python.


2
Questa risposta aiuterà
Ugnes

Benvenuto in AI! Ho leggermente modificato il titolo della domanda. Di alto livello, Python ha una sintassi leggera ed è un linguaggio interpretato, il che significa modificare e testare senza compilare. Python consente anche operazioni bit a bit .
DukeZhou

Risposte:


16

Non hai bisogno di un linguaggio potente per programmare l'IA. La maggior parte degli sviluppatori utilizza librerie come Keras, Torch, Caffe, Watson, TensorFlow, ecc. Queste librerie sono altamente ottimizzate e gestiscono tutto il loro lavoro, sono costruite con linguaggi ad alte prestazioni, come C. Python è proprio lì per descrivere il livelli di rete neurale, caricamento dei dati, avvio dell'elaborazione e visualizzazione dei risultati. L'uso del C ++ invece non migliorerebbe quasi nulla delle prestazioni, ma sarebbe più difficile per i non sviluppatori in quanto richiede la gestione della memoria. Inoltre, diverse persone con intelligenza artificiale potrebbero non avere una solida base di programmazione o informatica.

Un altro esempio simile potrebbe essere lo sviluppo del gioco, in cui il motore è codificato in C / C ++ e, spesso, tutta la logica di gioco scritta in un linguaggio di alto livello.


1
Se sono interessato a sviluppare e lavorare con l'apprendimento automatico e nlp per il campo hardware .. Quindi posso usare C ++ per AI
Mark ellon

1
@AnishGupta: Sì, a condizione che l'hardware supporti l'elaborazione necessaria (le reti neurali in particolare richiedono molto processore). TensforFlow è in realtà nativo C ++ (i binding Python sono un'aggiunta), ed ecco l'API: tensorflow.org/api_docs/cc
Neil Slater

"la maggior parte dei profili di intelligenza artificiale provengono dal campo della scienza dei dati". La scienza dei dati non è nemmeno un campo ben definito, quindi la tua frase potrebbe non essere compresa o fraintesa.
nbro

1
"L'utilizzo del C ++ invece non migliorerebbe a malapena le prestazioni, ma sarebbe più difficile per i non sviluppatori in quanto richiede la gestione della memoria." Non devi preoccuparti della gestione della memoria con C ++ se la scrivi bene.
Jérémy Blain,

La programmazione AI non riguarda solo l'uso di librerie esistenti come Keras e Torch. Una rete neurale può essere programmata da zero senza dipendenze esterne. Esempi per un percettrone a 3 strati sono disponibili in Internet e la funzione di attivazione sigmoid si adatta a 4 righe di codice. Direi che l'implementazione di una rete neurale senza librerie esistenti è il modo più semplice di comprendere l'argomento.
Manuel Rodriguez,


5

Dipende da quanto deve essere flessibile: se hai un sistema completo pronto per la produzione, che non avrà bisogno di molti adattamenti, allora C ++ (o anche C) potrebbe andare bene. Devi dedicare molto tempo alla creazione del software, ma dovrebbe funzionare piuttosto velocemente.

Tuttavia, se stai ancora sperimentando impostazioni e parametri e forse hai bisogno di regolare l'architettura, allora C ++ sarà goffo con cui lavorare. Hai bisogno di un linguaggio come Python che renda più facile cambiare le cose. La modifica del codice è più semplice, poiché in genere è possibile codificare più velocemente in lingue come Python. Il prezzo da pagare è che il software di solito non funziona altrettanto bene.

Devi decidere in che modo questo compromesso funziona meglio per te. Di solito è meglio dedicare meno tempo alla programmazione e non preoccuparsi troppo di un tempo di esecuzione più lungo. Se impieghi un giorno in meno per completare il tuo codice, è molto tempo che la versione in codice C deve recuperare. Il più delle volte non ne vale la pena.

Un approccio comune sembra essere i sistemi ibridi, in cui le librerie di base sono implementate in C / C ++, in quanto non hanno bisogno di molte modifiche, e le interfacce front-end / colla / sono in Python, in quanto è necessaria flessibilità e velocità non è quello critico.

Questo non è un problema specifico dell'IA, comunque, ma una questione generale di linguaggi interpretati vs compilati. Con l'IA molti sistemi sono ancora focalizzati sulla ricerca piuttosto che sull'applicazione, ed è qui che la velocità di sviluppo supera la velocità di esecuzione.


1
Se lo faccio con C ++, posso ottenere un'esecuzione veloce di Python e il livello delle prestazioni perché si afferma che: C ++ è 400 volte più veloce di Python
Mark ellon

1
Quella figura generale non significa nulla, dipende davvero dall'applicazione esatta. Penso che 400 volte sia probabilmente troppo ottimista per la maggior parte delle situazioni. Ma il punto è che se impieghi 500 volte di più a programmare (e eseguire il debug!) Il software, anche un miglioramento della velocità di 400x sarebbe ancora più lento! Ovviamente i numeri sono un po 'casuali, ma non sottovalutare il tempo impiegato per ottenere il programma giusto. Spesso scoprirai che l'aumento della velocità è più che compensato da tempi di sviluppo più rapidi.
Oliver Mason,

1
Ho provato a codificare una rete neurale usando le librerie tensorflow in python e C ++ .. e ho scoperto che: l'algoritmo di rete neurale che è stato codificato in C ++ viene eseguito 280 volte più veloce di Python in cui sono state utilizzate le stesse librerie e lo stesso algoritmo
Mark ellon

1
Allora perché non usare l'implementazione degli algoritmi di C ++ per Machine learning piuttosto che python
Mark ellon,

1
Vedi la mia risposta sopra ...
Oliver Mason,

2

Lo sviluppo del software per le applicazioni AI può essere separato nella programmazione stessa e nella prototipazione. C / C ++ è un ottimo linguaggio per creare l'applicazione perché funziona molto velocemente e può essere distribuito come librerie per i sistemi operativi tradizionali. Un'applicazione precompilata C / C ++ è il gold standard se qualcuno vuole distribuire un'appliance chiavi in ​​mano.

Il C ++ ha un grosso problema, prima che un programma possa essere compilato con GCC o il compilatore LLVM qualcuno deve sapere di quale algoritmo ha bisogno. Il C ++ può eseguire un determinato codice sorgente e fornisce comandi efficienti, ma non è chiaro in che modo l'array debba essere riempito e quali per i loop siano necessari nel codice. Questa domanda si inserisce nella fase di prototipazione che precede la programmazione dell'applicazione. Il problema non è come creare un'applicazione compilata e consegnarla come pacchetto del sistema operativo, il problema è giocare con diversi algoritmi AI, costruire alcuni prototipi di gui e discutere con i membri del team i progressi.

Guido van Rossum ha inventato il linguaggio di prototipazione gui numero uno che si basa sulla programmazione di script e fornisce funzionalità di quasi pseudocodice. Non ha mai sostituito C ++, ma crea un nuovo tipo di dominio. È necessario un passaggio di prototipazione prima che il software venga implementato, in particolare nel settore innovativo dell'intelligenza artificiale.

Per spiegare perché Python è superiore al C ++, dobbiamo provare a creare un prototipo software con C ++. È possibile utilizzare quel linguaggio per implementare rapidamente un'applicazione gui? Nessun C ++ è stato progettato non come un linguaggio di prototipazione con cicli di modifica rapidi, ma come una solida roccia per i programmatori di sistema. Ciò significa che se il prototipo funziona già, se l'algoritmo è stato risolto e se la documentazione è stata scritta, ha senso riprogrammare il codice in C ++. Ciò significa che un determinato prototipo di Python viene convertito in C ++ e viene consegnato ai sistemi operativi esistenti. Ma per il pre-passo che ha a che fare con la scrittura di articoli, la discussione di alternative e la gestione delle innovazioni, Python è la scelta migliore.


0

Lo affermi

Il C ++ è tecnicamente un linguaggio più potente di Python.

Ma questa affermazione è sbagliata (o non significa molto). Ricorda che un linguaggio di programmazione è una specifica (spesso alcuni documenti scritti in inglese). Ad esempio, n3337 è una bozza tardiva della specifica C ++. Non mi piace Python, ma sembra altrettanto potente di C ++ (anche se le implementazioni C ++ sono generalmente più veloci di quelle di Python): ciò che un buon programmatore Python può programmare bene in Python, un altro buon programmatore C ++ può programmare bene in C ++ e vice versa.

Teoricamente, sia C ++ che Python sono linguaggi di programmazione Turing completi (appositamente).

E Python è espressivo come C ++. Non posso nominare una funzionalità del linguaggio di programmazione che Python ha ma non C ++ (tranne quelle relative alla riflessione ; vedi anche questa risposta e fai attenzione dlopen- vedi il mio programma manydl.c -, di LLVM , di libgccjit , di libbacktrace , e considera qualche meta -programmare l' approccio con loro, alla Bismon o come sostiene il blog di J.Pitrat ).

Forse pensi a un linguaggio di programmazione come al software che lo implementa. Quindi Python è espressivo come C ++ (e sembra più facile da imparare, ma questa è un'illusione; vedi http://norvig.com/21-days.html per ulteriori informazioni su quell'illusione). Python e C ++ hanno una semantica abbastanza simile , anche se la loro sintassi è molto diversa. Il loro sistema di tipi è molto diverso.

Si noti che purtroppo molte recenti librerie di machine learning recenti (come TensorFlow o Gudhi ) sono in pratica più facili da usare in Python che in C ++. Ma puoi usare TensorFlow o Gudhi dal codice C ++ poiché TensorFlow e Gudhi sono per lo più codificati in C ++ ed entrambi forniscono e documentano un'API C ++ (non solo una Python).

C ++ abilita la programmazione multi-thread , ma la solita implementazione di Python ha il suo GIL , è codificata , quindi è significativamente più lenta di C ++ (che di solito viene compilata ottimizzando compilatori come GCC o Clang ; tuttavia potresti trovare interpreti C ++, ad esempio Cling ). Alcune implementazioni sperimentali di Python sono compilate da JIT e senza GIL. Ma questi non sono maturi: consiglio di investire un milione di euro per aumentare il loro TRL .

Osserva anche che C ++ è molto più difficile da imparare rispetto a Python. Anche con una dozzina di anni di esperienza nella programmazione C ++, non posso affermare di conoscere veramente la maggior parte del C ++.

Purtroppo, i libri più recenti che insegnano l'ingegneria del software AI (ad esempio questo o quello ) usano Python (non C ++) per i loro esempi. In realtà voglio libri AI più recenti usando C ++!

A proposito, programma un software open source (come questo , o il obsoleto GCC MELT ) usando le tecniche AI, ma non usano Python. Il mio approccio alle applicazioni AI è quello di iniziare a progettare alcune DSL in esse.

Alcuni approcci AI implicano la metaprogrammazione, ad esempio la generazione da parte (o la maggior parte, o addirittura di tutto) del codice di un sistema. J.Pitrat (scomparso nell'ottobre 2019) ha aperto la strada a questo approccio. Vedi il suo blog , il suo sistema CAIA e il progetto RefPerSys (la cui ambizione è generare la maggior parte - e si spera tutto - del suo codice C ++).

Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.