Come aumentare lo sviluppo dell'algoritmo?


18

Nel lavorare sull'analisi dei dati esplorativi e nello sviluppo di algoritmi, trovo che la maggior parte del mio tempo è trascorso in un ciclo di visualizzazione, scrittura di codice, esecuzione su piccoli set di dati, ripetizione. I dati che ho tendono ad essere roba di tipo computer vision / sensor fusion e gli algoritmi sono pesanti per la visione (ad esempio rilevamento e tracciamento di oggetti, ecc.) E gli algoritmi standardizzati non funzionano in questo contesto. Trovo che questo richieda molte iterazioni (ad esempio, per comporre il tipo di algoritmo o ottimizzare i parametri nell'algoritmo, o per ottenere una visualizzazione corretta) e anche i tempi di esecuzione anche su un piccolo set di dati sono piuttosto lunghi, quindi tutti insieme ci vuole un po '.

Come può lo sviluppo dell'algoritmo stesso essere accelerato e reso più scalabile?

Alcune sfide specifiche:

Come si può ridurre il numero di iterazioni? (Esp. Quando quale tipo di algoritmo, figuriamoci i dettagli di esso, non sembra essere facilmente prevedibile senza provare versioni diverse ed esaminarne il comportamento)

Come eseguire set di dati più grandi durante lo sviluppo? (Spesso il passaggio da un set di dati di piccole a grandi dimensioni avviene quando si notano un sacco di nuovi comportamenti e nuovi problemi)

Come si possono sintonizzare i parametri dell'algoritmo più velocemente?

Come applicare gli strumenti del tipo di apprendimento automatico allo sviluppo dell'algoritmo stesso? (Ad esempio, invece di scrivere manualmente l'algoritmo, scrivere alcuni semplici blocchi e combinarli in un modo appreso dal problema, ecc.)

Risposte:


7

Prima di tutto, se i tuoi dati hanno tante variazioni (in funzione del tempo, del contesto e di altri) che rendono difficile applicare una singola strategia per affrontarla, potresti essere interessato a fare un precedente temporale / contestuale / .. caratterizzazione del set di dati. La caratterizzazione dei dati, ovvero l'estrazione di informazioni su come il volume o le specifiche del contenuto varia in base ad alcuni criteri, di solito fornisce una migliore comprensione (più concisa e precisa) rispetto alla semplice inferenza di algoritmi in modo bruto.

Quindi, rispondendo ad ogni domanda:

  1. la caratterizzazione è sicuramente un mezzo per ridurre il numero di iterazioni mentre si cerca di selezionare algoritmi adeguati per dati specifici;
  2. se disponi di una serie discreta di criteri sui quali variano i tuoi dati, diventa molto più facile scalare le soluzioni, così saprai quali informazioni guadagneresti / perdi se fossero applicate soluzioni più semplici / specifiche;
  3. dopo una caratterizzazione, dovresti anche essere più facile selezionare i parametri, poiché sapresti che tipo di dati specifici avresti a che fare;
  4. infine, è possibile utilizzare algoritmi di data mining / machine learning per supportare questa caratterizzazione. Ciò include l'utilizzo di:
    • algoritmi di clustering, per ridurre la dimensionalità dei dati;
    • algoritmi di classificazione, per aiutare a decidere su proprietà specifiche che i dati in funzione di tempo / contesto / ... possono presentare;
    • regole di associazione, per prevedere particolari conoscenze dal set di dati, migliorando / perfezionando al contempo i dati utilizzati per successive analisi;
    • e altre possibili strategie e analisi.

Ed ecco un elenco di alcuni criteri su cui analizzare i dati, che potresti trovare utili.


5

Due cose che potresti trovare utili:

  1. meta-apprendimento per accelerare la ricerca del modello giusto e dei parametri ottimali. Il meta-apprendimento consiste nell'applicare gli strumenti di apprendimento automatico al problema di trovare i giusti strumenti / parametri di apprendimento automatico per il problema in questione. Questo ad esempio questo documento per un esempio pratico;

  2. gpucomputing per velocizzare l'algoritmo su set di dati più grandi. Ad esempio, OpenCV può utilizzare GPU , che sono molto efficaci nell'elaborazione di immagini / video e possono portare da 10 a 100 accelerazioni rispetto alle CPU. Dato che molto probabilmente il tuo computer ha una GPU compatibile con gpucomputing, potresti guadagnare molto tempo ad usarlo.


4

Indovinando è probabile che tu abbia visto questa demo di YouTube e il relativo Google Tech Talk , che è correlato a questi documenti:

E questo set di codice su GitHub per OpenTLD . Se controlli "leggimi" su GitHub qui, noterai che l'email dell'autore (Zdenek Kalal) è elencata, quindi potrebbe valere la pena inviargli un'e-mail sulle tue domande o anche invitarlo a rispondere anche a questa domanda.

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.