È immaginabile insegnare a una macchina come programmarsi su una specifica definita? [chiuso]

12

Un mio amico senza conoscenze di programmazione mi ha fatto questa domanda e l'ho trovato interessante.

Penso che non sia possibile perché richiederebbe un'intelligenza artificiale realmente avanzata in grado di analizzare il testo di un problema, pensare a una soluzione e programmarla. Il solo pensiero di una macchina in grado di programmare una calcolatrice semplice mi sembra piuttosto avanzata.

Ma forse ho sbagliato e mi piacerebbe sapere cosa ne pensi e se sei a conoscenza di articoli / ricerche sull'argomento, o se esiste già o se esiste la possibilità di selezionare una specifica, e fare in modo che la macchina esegua l'auto-programma su questa "specifica?"

    
posta florian 10.11.2014 - 00:01
fonte

5 risposte

15

Joel in realtà ha risposto a questo alcuni anni fa . Il vero significato di "insegnare a una macchina come programmare da solo" è "insegnare a una macchina come prendere una specifica e creare un programma che corrisponda a quella specifica". E con questo in mente:

The problem, here, is very fundamental. In order to mechanically prove that a program corresponds to some spec, the spec itself needs to be extremely detailed. In fact the spec has to define everything about the program, otherwise, nothing can be proven automatically and mechanically. Now, if the spec does define everything about how the program is going to behave, then, lo and behold, it contains all the information necessary to generate the program! And now certain geeks go off to a very dark place where they start thinking about automatically compiling specs into programs, and they start to think that they’ve just invented a way to program computers without programming.

Now, this is the software engineering equivalent of a perpetual motion machine. It’s one of those things that crackpots keep trying to do, no matter how much you tell them it could never work. If the spec defines precisely what a program will do, with enough detail that it can be used to generate the program itself, this just begs the question: how do you write the spec? Such a complete spec is just as hard to write as the underlying computer program, because just as many details have to be answered by spec writer as the programmer. To use terminology from information theory: the spec needs just as many bits of Shannon entropy as the computer program itself would have. Each bit of entropy is a decision taken by the spec-writer or the programmer.

So, the bottom line is that if there really were a mechanical way to prove things about the correctness of a program, all you’d be able to prove is whether that program is identical to some other program that must contain the same amount of entropy as the first program, otherwise some of the behaviors are going to be undefined, and thus unproven. So now the spec writing is just as hard as writing a program, and all you’ve done is moved one problem from over here to over there, and accomplished nothing whatsoever.

L'unico modo per aggirare il problema sarebbe quello di produrre un vero computer sapiente con un'intuizione sufficiente a fare tutti gli spazi vuoti che io e te facciamo automaticamente, sempre, quando produciamo software ... in nel qual caso si finirebbe con un computer che si programma da solo come uno sviluppatore umano. ;)

    
risposta data 10.11.2014 - 00:33
fonte
4

Certo, noi fai questo tutto il tempo (per sottoinsiemi di problemi estremamente limitati). È abbastanza semplice per immaginare fare un altro passo o due e legare qualcosa come Siri nell'input di questi generatori di codice (o qualcosa come Wolfram Alpha) che a sua volta scrive codice e risolve il problema. Mi aspetterei che qualcosa esista già da qualche parte per fare le cose più elementari.

Il problema con la scrittura di software complessi per le aziende non è creare un programma per scrivere il codice: sta scrivendo un programma per ottenere i requisiti.

    
risposta data 10.11.2014 - 00:26
fonte
2

Penso che la risposta di @Mason Wheeler tenga l'idea chiave. Funziona così:

L'entropia di Shannon di Tic-tac-toe è davvero piccola. Quindi chiamiamo tic-tac-toe un gioco "risolto" o "deterministico". Non è molto interessante una volta superato il liceo. Dama ha un'entropia più alta, se consideri l'entropia di tutti i giochi possibili che puoi giocare. Ma anche dama è un gioco "risolto" o "deterministico". Se ti sposti per primo, dovresti solo vincere o pescare. Gli scacchi hanno un'entropia molto più alta, ma nessun umano ha battuto i migliori giocatori di computer dal 2006. Quindi, in un certo senso, i computer hanno imparato gli scacchi in un modo che gli umani non possono. Big Blue analizzò wikipedia, e poi giocò a Jeopardy contro i giocatori umani, e li batté con forza.

Quali sono le prospettive? Qual è l'entropia di un romanzo, o i sonetti di Shakepeare?

Allo stesso modo, nello spazio di programmazione, ciò che probabilmente emergerà è un insieme crescente di competenze. Prolog ha affrontato una serie di problemi con il computer in cui si imposta il problema e il computer ha risolto la risposta. Qualcuno probabilmente troverà classi di semplici problemi di programmazione che un computer sarà in grado di soddisfare, ecc. Poi qualcuno si costruirà su quello per produrre "su richiesta la personalizzazione" all'interno di qualche spazio problematico. E così via.

Penso che la domanda si trasformi in, quanto tempo ci vuole un'IA per padroneggiare una certa quantità di entropia ... e quante risorse di calcolo sono richieste? Penso che sia inimmaginabile che un computer non possa padroneggiare l'entropia controllata dal miglior cervello umano - non c'è nulla di magico nei cervelli - ma la domanda è: quanti nuclei hai bisogno e quanti secoli ci vorrà per arrivarci?

Ma ... un computer potrà mai fare un lavoro mio ? Inconcepibile!

    
risposta data 10.11.2014 - 01:54
fonte
1

È difficile rispondere perché, proprio come con l'intelligenza artificiale, una volta raggiunto questo obiettivo, sarà perché avremo scritto un programma che lo fa. E i critici diranno: "beh, questa macchina non è propriamente programmata! Segue esattamente il programma che gli hai dato!"

Ebbene si. Qualunque cosa avremo mai realizzato con i computer, lo faremo assegnandogli un programma e lo eseguirà. Se questo è un argomento contro, allora non possiamo realizzare nulla. Eppure, a un certo punto, la gente pensava che giocare a scacchi con il computer sarebbe stato ovviamente intelligente. Ora possono, e sappiamo esattamente come, e non pensiamo che sia intelligente. I sottomarini non possono ancora nuotare.

Quindi, prendi in considerazione alcuni esempi.

Da decenni abbiamo generatori di parser . Dai loro una descrizione di una lingua, essa viene elaborata e il risultato è codice per un parser per quella lingua. Sappiamo esattamente come è fatto, ma non è un computer che si programma da solo?

Secondo editor che ti dice che hai commesso un errore (errore di sintassi, variabile non esistente, ecc.). Non programma niente da solo, ma può dirti che hai fatto qualcosa di sbagliato. È molto solo in superficie.

Lingue in cui puoi semplicemente fare clic e trascinare i controlli dell'interfaccia utente e il codice che li renderà effettivamente operativi viene generato automaticamente.

Compilatori JIT. Software in grado di riconoscere gli hotspot nel software attualmente in esecuzione e sostituirlo con un codice compilato altamente ottimizzato, ottimizzandosi efficacemente durante l'esecuzione. Penso che questo sia un esempio di ciò che può sembrare una macchina di programmazione stessa, finché non si sa esattamente come accade, e poi si scopre che sta facendo semplicemente quello che il programmatore gli ha detto, come sempre.

Gioco generale. Questo è un campo di ricerca interessante, in cui i ricercatori scrivono programmi in grado di leggere le descrizioni delle regole dei giochi, che i programmi giocano l'uno contro l'altro. Quindi, invece di un programma di tic-tac-toe o di un programma di scacchi, questi sono programmi che leggono le regole del tic-tac-toe o degli scacchi o del nuovo gioco inventato sul posto e possono quindi riprodurli. Il programma non sta programmando da solo, ma gioca a scacchi senza che le regole degli scacchi siano state codificate. C'è stato un tempo in cui questo chiaramente è stato considerato come l'insegnamento del computer stesso.

Abbiamo fatto molti piccoli passi nella direzione generale.

Ma non riesco a pensare a nessun programma che riscrivi in base ai risultati di precedenti esecuzioni o che possa riconoscere routine obsolete o inefficienti nel proprio codice. Penso che un giorno lo avremo, e non lo considereremo affatto speciale, poiché sarà solo una caratteristica dell'ultimo compilatore ...

    
risposta data 10.11.2014 - 11:06
fonte
0

Non al momento e non nel futuro prevedibile perché hai bisogno di tutta la straordinaria complessità del cervello umano per creare un programma. E anche allora quei cervelli devono essere altamente addestrati per farlo in modo appropriato, e anche allora non tutti sono in grado di svolgere il compito sebbene si possa sostenere che con un tempo sufficiente si potrebbe addestrare qualcuno a programmare.

L'ho preso dal modo in cui hai espresso la tua domanda che non stai parlando di semplici compiti emulati.

Hai chiesto articoli e questo articolo su Science Blogs su Developing Intelligence risponde a questa domanda in molti modi.

    
risposta data 10.11.2014 - 12:32
fonte

Leggi altre domande sui tag