Domanda:
Come regolare le prestazioni degli algoritmi negli articoli di informatica
Ulderique Demoitre
2016-04-21 03:03:03 UTC
view on stackexchange narkive permalink

Nel campo dell'informatica è comune produrre documenti che presentano algoritmi che stimano qualcosa con una certa precisione e una certa velocità.

Molti algoritmi possono essere chiaramente sintonizzati per avere prestazioni elevate, compromettendo un po 'di precisione, o alta precisione, compromettendo in questo caso le prestazioni.

Quando un autore propone un nuovo algoritmo dovrebbe presentare risultati empirici sulle prestazioni E risultati empirici sull'accuratezza.

È onesto presentare il risultato sulle prestazioni ottenute con l'algoritmo regolato per essere veloce (e meno accurato) e sui risultati sulla precisione con l'algoritmo sintonizzato per essere preciso (e lento)?

Vedi anche [Volkswagen] (http://www.reuters.com/article/us-volkswagen-emissions-usa-idUSKCN0XH2CX) che sono coinvolti in un grave scandalo per aver fatto quasi esattamente quello che descrivi. Vale a dire, hanno programmato le loro auto deisel per avere una certa messa a punto del motore in alcune situazioni e una diversa messa a punto del motore in altre. Non è necessariamente un grosso problema di per sé, è diventato un grosso problema perché non hanno rivelato che i loro motori usavano girate diverse e li hanno programmati in quel modo allo scopo esatto di ingannare tutti riguardo alle caratteristiche del motore misurate.
Sfortunatamente questo accade spesso in CS, specialmente nell'apprendimento automatico e così via. Per favore, scoraggia questo comportamento. Questo è ciò che rende le persone scettiche su CS, il fatto che sia * così facile * da fare. Non contribuire al degrado del campo, ma al contrario, prova a pulirlo!
Mi aspetterei infatti un grafico che traccia l'accuratezza rispetto al runtime.
La mia regola pratica generale: se sei completamente in anticipo e chiaro sui risultati, non ci sono problemi etici.
_Quando un autore propone un nuovo algoritmo dovrebbe presentare risultati empirici_ - ... a meno che non si tratti di un documento teorico. (tosse)
Aggiungerò che entrambe le estremità sono effettivamente interessanti. A volte voglio i migliori risultati e non mi dispiace aspettare ancora un po 'per ottenerli; ma altre volte faccio un esperimento su larga scala e preferisco un algoritmo più veloce, anche se devo sacrificare un po 'di prestazioni.
Affermare sia la velocità * che * l'accuratezza per un algoritmo quando in realtà ciò non è stato osservato è semplicemente falso. Se le tue osservazioni non supportano le tue affermazioni, sei passibile di essere accusato di aver falsificato i tuoi risultati.
Sei risposte:
Ric
2016-04-21 03:36:22 UTC
view on stackexchange narkive permalink

Sarebbe disonesto farlo senza menzionare che l'algoritmo è stato regolato in modo diverso. Dovresti specificare cosa è cambiato il tuning e come questo influisce sui risultati dell'algoritmo.

Dovresti anche elencare i risultati di accuratezza per l'algoritmo veloce e i risultati di velocità per l'algoritmo accurato. (Probabilmente vuoi anche dei numeri per la messa a punto a metà strada). Non elencare i risultati "cattivi" non è disonesto, ma è una cattiva scienza. Se non includessi questi numeri, mi aspetto che i tuoi revisori ne parlino e li chiedano.

È la parte "senza menzionare" che rende questa risposta la migliore. Perché pensi che così tante pubblicità televisive abbiano una stampa fine?
David Richerby
2016-04-21 13:21:56 UTC
view on stackexchange narkive permalink

Parafrasando la tua domanda: "È onesto suggerire che il mio algoritmo è sia veloce che preciso quando, in realtà, può essere solo veloce e non così preciso o accurato e non così veloce?"

NO !!!

Ovviamente non lo è. Seriamente, perché hai anche bisogno di chiedere?

Martin Ueding
2016-04-21 14:53:15 UTC
view on stackexchange narkive permalink

Sono solo uno studente Master, quindi non conosco molto le dinamiche del "gioco". Quindi posso solo dare qualche opinione da spettatore.

A uno dei miei supervisori piace avere trame brutalmente oneste nei suoi giornali. Il suo lavoro si concentra sul ridimensionamento di algoritmi paralleli. Per cominciare, sceglie una scala forte invece di una scala debole. Il primo prende una dimensione del problema fissa e utilizza più processori $ P $ per l'esecuzione. Idealmente, si otterrebbe un calo di $ 1 / P $ nel tempo. Prendendo un grafico a doppio registro del tempo rispetto al conteggio del processo e anche tracciando la curva $ 1 / P $ perfetta, puoi vedere rapidamente quando va a male.

Il ridimensionamento debole è il ridimensionamento della dimensione del problema con le risorse. Quindi il tempo necessario dovrebbe rimanere costante. Per i problemi che diventano difficili da parallelizzare a un livello preciso, non vedrai mai nulla di interessante in un ridimensionamento debole. Con un forte ridimensionamento puoi arrivare a estremi come "un pixel per core" o "un atomo per thread".

Ha detto che le parti interessanti (nella scienza) sono quelle che non funzionano ancora. Sicuramente può inventare una trama che renda l'algoritmo fantastico. Ma non è quello che gli interessa. Vuole sapere fino a che punto si può spingere.

Ammiro davvero questa brutale onestà. Se si ottengono risultati solo così così, questo metodo mostrerà chiaramente che non sono così eccezionali. D'altra parte, se rimuovi tu stesso tutta la superficie di attacco, nessuno può farti a pezzi in seguito per aver nascosto qualcosa.

Pertanto creerei grafici che mostrano quanto sia scarsa la precisione quando si ottimizza per la velocità. Includerei una trama onesta di accuratezza contro velocità (o viceversa). Quindi si può vedere se c'è un punto debole nel mezzo e quanto bene sia effettivamente.

Se il tuo algoritmo va agli estremi ma ha una bella via di mezzo, vale la pena menzionarlo, immagino . E se gli estremi sono solo di pochi punti percentuali più lenti o meno accurati, anche questo è un risultato.

Dmitry Grigoryev
2016-04-21 20:01:47 UTC
view on stackexchange narkive permalink

Confronta le mele con le mele

Le prestazioni degli algoritmi vengono raramente valutate isolatamente: di solito, diversi algoritmi vengono confrontati tra loro o con qualche algoritmo di riferimento. Quando si esegue tale confronto, è necessario determinare le condizioni in cui sono stati valutati gli algoritmi di riferimento e valutare il proprio algoritmo nelle stesse condizioni:

  • se gli algoritmi di riferimento hanno un'accuratezza comparabile, ottimizzare l'algoritmo per avere stessa precisione e confronta le prestazioni
  • se gli algoritmi di riferimento hanno prestazioni simili, sintonizza il tuo sulla stessa prestazione e confronta la precisione

Al contrario, se hai un confronto dati in condizioni diverse, è possibile selezionare le condizioni più favorevoli al proprio algoritmo. Questo non è un inganno, ma un'analisi legittima delle condizioni in cui il tuo algoritmo è il più pratico.

David Hammen
2016-04-24 16:00:11 UTC
view on stackexchange narkive permalink

Fino ad ora mi sono astenuto dall'unirmi a questo sito perché non mi sentivo qualificato per commentare. Ho lasciato il mondo accademico due giorni prima che avrei dovuto laurearmi con un BS. (Lascio la mia sordida storia come commento). Alla fine mi sono iscritto a questo sito proprio per questa domanda. La risposta è NO . Gli algoritmi "sintonizzati" dei ricercatori accademici tormentano i professionisti.

Un esempio specifico: ho trascorso due anni assolutamente meravigliosi per determinare come rilevare i guasti ai propulsori su un veicolo spaziale. Un algoritmo "messo a punto" sviluppato in precedenza suggeriva che si potesse fare a meno dei sensori molto costosi e soggetti a guasti tradizionalmente utilizzati per rilevare i guasti del propulsore utilizzando invece letture dell'accelerometro e del giroscopio. Quel lavoro "sintonizzato" presupponeva implicitamente propulsori perfettamente allineati e perfettamente posizionati con un sacco di grinta . Io, invece, ho dovuto fare i conti con l'equivalente di un camion Mack sul ghiaccio con motori VW disallineati e senza interruzioni. Non avevo un semplice problema di segnale-rumore con cui confrontarmi. Ho dovuto fare i conti con un problema di rumore per segnalare.

Ho utilizzato un approccio bayesiano. Quasi nessuno ha capito la mia matematica. Un altro gruppo (molto costoso) è stato consultato per assicurarsi che quello che ho fatto fosse corretto. Hanno riscontrato lo stesso problema dal rumore al segnale, ma hanno utilizzato un approccio frequentista per risolvere il problema. (Quasi nessuno capiva nemmeno la loro matematica.) Anche se loro erano frequentisti e io ero un bayesiano, concordarono che il mio approccio era valido. Alla fine, è costato due anni del mio tempo e un anno del tempo dell'altro gruppo. Confrontalo con $ 200K per i sensori più alcuni mesi del tempo necessario a un programmatore di basso livello, il cui codice potrebbe essere facilmente compreso da tutti. Anche se mi divertivo tantissimo, investire in me e in quell'altro gruppo è stato stupido sia dal punto di vista economico che da quello della manutenibilità.

L'ho visto più e più volte nel corso della mia carriera.

La mia sordida storia: ero stato ammesso a un programma di dottorato in fisica, grazie alle raccomandazioni del mio consulente di ricerca universitario, solo per sentirmi dire dal mio consulente accademico che ** non mi stavo laureando **. Lo ha fatto due giorni prima della laurea, un sabato, quando ero a 150 miglia dalla mia scuola, dove ero il testimone al matrimonio del mio migliore amico. Mi è stato detto dopo il fatto che sembravo più nervoso della sposa o dello sposo.
Alla fine ho preso quella dannata laurea. Il mio consulente ha trovato una clausola che diceva che dovevo frequentare quattro corsi di arti liberali come matricola e secondo anno, e altri quattro come junior e senior. Io invece ne ho presi cinque e tre. In seguito ho seguito un corso su Shakespeare in un'altra scuola, limitato alle major inglesi. L'istruttore mi ha accettato con riluttanza, ma ha detto che sarebbe stata colpa mia se non potessi produrre risultati di qualità. Ho un A-. Il mio consulente ha detto "non ti diplomerai, mai, sul mio cadavere". Sono diventato abbastanza intelligente da andare oltre la sua testa. Per anni ho donato soldi alle scuole della Ivy League in competizione.
Roy T.
2016-04-22 12:17:03 UTC
view on stackexchange narkive permalink

Nel contesto dello sviluppo di algoritmi per scopi accademici, il tempo di esecuzione "orologio da parete" reale del programma non è importante. Ciò che è importante è la complessità temporale (vedere la notazione Big-Oh). Di solito alcune modifiche alle prestazioni o ottimizzazioni di un algoritmo non cambiano la complessità temporale effettiva e sono quindi di scarso interesse.

Se un algoritmo cambia la complessità temporale, ma cambia anche l'accuratezza che l'algoritmo ha risolto a problema diverso e non confrontabile. Tuttavia, il confronto tra questi è almeno un caso di grave abbandono.

Sfortunatamente, nel mondo reale, solo i problemi "banali", come l'ordinamento di una lista, sono così ben definiti che tutti creano un algoritmo che ha esattamente le stesse condizioni pre e post. Un buon documento che confronta gli algoritmi dovrebbe riconoscere queste differenze e studiarne l'impatto.

_il vero tempo di esecuzione dell'orologio da parete del programma non è importante._ [citazione necessaria]. Quando gli algoritmi vengono confrontati su set di dati realistici, il tempo di esecuzione è importante, perché la o grande è solitamente fissa. Prendiamo, ad esempio, qualsiasi documento sulle reti neurali: sono O (n), ma l'utilizzo di una funzione di non linearità o di un'altra può avere enormi impatti in termini di precisione e / o prestazioni.
La differenza tra un computer del 1986 e uno del 2016 è un fattore costante, quindi di scarso interesse :-) La differenza tra un modem a 19200 bit e una gigabit ethernet è un fattore costante, quindi di scarso interesse.


Questa domanda e risposta è stata tradotta automaticamente dalla lingua inglese. Il contenuto originale è disponibile su stackexchange, che ringraziamo per la licenza cc by-sa 3.0 con cui è distribuito.
Loading...