Comment faire évoluer le développement d'algorithmes?

18

En travaillant sur l'analyse exploratoire des données et en développant des algorithmes, je trouve que la plupart de mon temps est consacré à un cycle de visualisation, d'écriture de code, d'exécution sur un petit ensemble de données, de répétition. Les données que j'ai ont tendance à être des trucs de type vision par ordinateur / fusion de capteurs, et les algorithmes sont lourds de vision (par exemple, détection et suivi d'objets, etc.), et les algorithmes standard ne fonctionnent pas dans ce contexte. Je trouve que cela prend beaucoup d'itérations (par exemple, pour composer le type d'algorithme ou régler les paramètres dans l'algorithme, ou pour obtenir une bonne visualisation) et aussi les temps d'exécution même sur un petit ensemble de données sont assez longs, donc tous ensemble, cela prend du temps.

Comment accélérer le développement de l'algorithme lui-même et le rendre plus évolutif?

Quelques défis spécifiques:

Comment réduire le nombre d'itérations? (Surtout quand quel type d'algorithme, sans parler des détails de celui-ci, ne semble pas facilement prévisible sans essayer différentes versions et examiner leur comportement)

Comment exécuter sur des ensembles de données plus importants pendant le développement? (Passer souvent d'un petit à un grand ensemble de données, c'est quand on voit un tas de nouveaux comportements et de nouveaux problèmes)

Comment les paramètres d'algorithme peuvent-ils être réglés plus rapidement?

Comment appliquer les outils de type d'apprentissage automatique au développement d'algorithmes lui-même? (Par exemple, au lieu d'écrire l'algorithme à la main, écrivez quelques blocs de construction simples et combinez-les d'une manière tirée du problème, etc.)

Alex I
la source

Réponses:

7

Tout d'abord, si vos données ont autant de variations (en fonction du temps, du contexte et autres) que de rendre difficile l'application d'une seule stratégie pour y faire face, vous pourriez être intéressé à faire un préalable temporel / contextuel / .. caractérisation de l'ensemble de données. Caractériser les données, c'est-à-dire extraire des informations sur la façon dont le volume ou les spécificités du contenu varie en fonction de certains critères, permet généralement une meilleure compréhension (plus concise et plus précise) que de simplement inférer des algorithmes de manière brutale.

Donc, répondre à chaque question:

  1. la caractérisation est certainement un moyen de réduire le nombre d' itérations tout en essayant de sélectionner des algorithmes appropriés pour des données spécifiques;
  2. si vous avez un ensemble discret de critères sur lesquels vos données varient, il devient beaucoup plus facile de mettre à l' échelle des solutions, comme vous saurez quelles informations vous gagneriez / perdriez si des solutions plus simples / spécifiques étaient appliquées;
  3. après une caractérisation, vous devriez également être plus facile de sélectionner des paramètres, car vous savez à quel type de données spécifiques vous avez affaire;
  4. enfin, vous pouvez utiliser des algorithmes d'exploration de données / d'apprentissage automatique pour prendre en charge cette caractérisation. Cela comprend l'utilisation:
    • algorithmes de clustering, pour réduire la dimensionnalité des données;
    • algorithmes de classification, pour aider à décider des propriétés spécifiques que les données en fonction du temps / du contexte / ... peuvent présenter;
    • des règles d'association, pour prédire des connaissances particulières de l'ensemble de données, tout en améliorant / affinant les données utilisées pour une analyse ultérieure;
    • et d'autres stratégies et analyses possibles.

Et voici une liste de certains critères sur lesquels analyser les données, qui peuvent vous être utiles.

Rubens
la source
5

Deux choses que vous pourriez trouver utiles:

  1. méta-apprentissage pour accélérer la recherche du bon modèle et des paramètres optimaux. Le méta-apprentissage consiste à appliquer des outils d'apprentissage machine au problème de trouver le bon outil / paramètres d'apprentissage machine pour le problème en question. C'est par exemple ce document pour un exemple pratique;

  2. gpucomputing pour accélérer l'algorithme sur des ensembles de données plus importants. Par exemple, OpenCV peut utiliser des GPU , qui sont très efficaces pour traiter des images / vidéos et peuvent apporter 10 à 100 accélérations par rapport aux CPU. Étant donné que votre ordinateur possède très probablement un GPU compatible gpucomputing, vous pourriez gagner beaucoup de temps à l'utiliser.

damienfrancois
la source
4

Je suppose qu'il est probable que vous ayez vu cette démo YouTube et le Google Tech Talk connexe, qui est lié à ces documents:

Et cet ensemble de code sur GitHub pour OpenTLD . Si vous cochez la case "Lisez-moi" sur GitHub ici, vous remarquerez que l'e-mail de l'auteur (Zdenek Kalal) est répertorié, il peut donc être utile de lui envoyer un e-mail à propos de vos questions, ou même de l'inviter à répondre à cette question également.

bévues
la source