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.
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.
Risposte:
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.
Il C ++ è in realtà uno dei linguaggi più popolari utilizzati nello spazio AI / ML. Python può essere più popolare in generale, ma come altri hanno notato, in realtà è abbastanza comune avere sistemi ibridi in cui il crunching numerico intensivo della CPU viene eseguito in C ++ e Python viene utilizzato per funzioni di livello superiore.
Giusto per illustrare:
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.
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.
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 ++).