Le pub des programmeurs
- 1 927 réponses
- 117 participants
- 131 686 vues
- 130 followers

Anonyme



Pov Gabou

Pour les GMM, je fais un peu de pub, mon module pyem pour python marche bien maintenant, et est relativement utilisable (comprendre peut traiter des dizaines de milliers de samples en plusieurs dizaines de dimensions en temps raisonnable, ie quelque minutes sur des machines pas trop vieilles) tant qu'on se cantonne a des modeles diagonaux:
http://svn.scipy.org/svn/scipy/trunk/Lib/sandbox/pyem/
Il y a aussi le BIC pour le clustering automatique, une implementation initiale de EM recursif, et bientot j'espere des methodes de regularisation pour les matrices de covariance.
Les figures suivantes sont toutes obtenues en une 20ne de lignes de code python





ClockworkOi!


Mais justement c'est pour un (petit

La partie GMM fonctionne (j'ais comparé avec torch pour debugger, le code le plus attroce du monde... si j'avais su j'aurais regarder le tiens gabou).
Le liens sur les fft est pas mal du tout!! J'ai toujours eu l'impression de passer à coté de quelques choses...


Pov Gabou

Citation :
(j'ais comparé avec torch pour debugger, le code le plus attroce du monde... si j'avais su j'aurais regarder le tiens gabou).
Tu m'etonnes, du C++ de chercheurs, c'est le pire code du monde. Meme le C++ 'normal' a cote est joli. T'aurais du regarde du cote des codes matlab pour les GMM, quand meme.
Pour les MFCC, tu peux utiliser ce code comme reference pour comparer:
https://labrosa.ee.columbia.edu/matlab/rastamat/mfccs.html
Mais si c'est pour un taf, je comprends vraiment pas l'interet de tout coder en java, surtout la FFT, c'est stupide. Il y a le module de Soras que tu peux utiliser pour de la FFT, qui est rapide pour des puissances de 2, et est utilisable dans du commercial sans cout supplementaire.

batman14

Citation :
Pour les GMM, je fais un peu de pub, mon module pyem pour python marche bien maintenant, et est relativement utilisable.
Man google -> Je veux savoir ce qu'est un GMM.
Je me souviens avoir vu un tutorial en flsah sur le site de NI, mais je ne sais plus si il faut posséder un produit de chez eux ou pas...je vérifie.
Edit : non, en fait y'a pas besoin de s'enregistrer, mais il n'explique rien de bien passionnant sur le fonctionnement de l'algorithme. Ils font la promo de labview, leur soft d'analyse, et nous explique plutot comment régler un soft procédant à une fft, que commment la réaliser.
Mais bon des fois, avoir ue vue utilisateur d'abord, c'est quand même pas mal !
http://soundcloud.com/bat-manson

ClockworkOi!

Citation : Tu m'etonnes, du C++ de chercheurs, c'est le pire code du monde.
un condensé de ce que l'on troue dans torch ;)
float *mean_acc_i = mean_acc[i];
float *x = inputs->data;
for(julie = 0; julie < n; julie++) {
*mean_acc_i++ += *x * *x++;
}
float *mean_i = mean[i];
float *weight_acc_i = weight_acc[i];
mean_acc_i = mean_acc[i]
for(andrea = 0; andrea < n; andrea++, weight_acc_i++)
*mean++ = *mean_acc_i++ / *weight_acc_i++

(j'ai écris n'importe quoi, seul la syntaxe sert d'exemple)

Pov Gabou

L'algorithme EM permet de calculer les parametres a, mu et va en utilisant le principe du maximum de vraisemblance. Tu peux montrer (facile) que le modele est equivalent a un modele ou tu tires au hasard un entier i parmi K avec probabilite a_i, et tu generes un echantillon issue d'une variable aleatoire gaussienne de paramettres mu_i, va_i. Ca permet de faire du clustering. Il y a une litterature enorme sur le sujet (modeles de melanges et "apprentissage statistique"; je hais le terme apprentissage, mais c'est l'expression consacree).
C'est utilise en parole (reconnaissance de parole et de locuteur), et dans enormement d'autres champs ou l'apprentissage statistique est utilise. Perso, j'utilise des versions recursives (ou tu estimes les parametres recusrivement, cad "online") pour faire de la detection de voix (j'ai un papier la dessus a interspeech 2006 si ca t'interesse et que tu as acces aux proceeding de interspeech).

ClockworkOi!

Citation : je hais le terme apprentissage
Pourquoi ca?

Pov Gabou

Citation :
un condensé de ce que l'on troue dans torch
Chez moi, ca donne ca

#===========================================
# GMM of 30 comp, 45 dimension, 1e5 frames
#===========================================
d = 45
k = 30
nframes = 1e5
niter = 10
mode = 'diag'
#+++++++++++++++++++++++++++++++++++++++++++
# Create an artificial GMM model, samples it
#+++++++++++++++++++++++++++++++++++++++++++
# Generate a model with k components, d dimensions
w, mu, va = GM.gen_param(d, k, mode, spread = 3)
gm = GM.fromvalues(w, mu, va)
# Sample nframes frames from the model
data = gm.sample(nframes)
#++++++++++++++++++++++++
# Learn the model with EM
#++++++++++++++++++++++++
# Init the model
lgm = GM(d, k, mode)
gmm = GMM(lgm, 'kmean')
em = EM()
like= em.train(data, gmm, niter)
Utiliser entierement du C++, ca me parait vraiment debile aujourd'hui (enfin, je vais pas rouvrir le debat, il a ete fait aujourd'hui meme), surtout si c'est pour utiliser de l'arithmetique de pointeurs que n'importe quel compilateur digne de ce nom peut faire par lui meme a partir des indexes depuis au moins 10 ans.

Pov Gabou

Citation :
Pourquoi ca?
Ben je sais pas, en maths, quand tu fais de l'interpolation, t'appelles pas ca de l'apprentissage. C'est un terme ultra-pompeux, comme intelligence artificielle ou reseau de neurones; tout le monde sait que ca n'a plus rien a voir ni avec l'intelligence ni le cerveau, mais on fait semblant, parce que ca fait plus classe.
C'est comme certains nouveaux trucs a la mode, "document understanding" ou "speech understanding"; tout ca pour te filer un resume qui contient la premiere et derniere phrase du document dans 95 % des cas... Mais bon, la encore c'est un autre debat.

batman14

Citation :
est un terme ultra-pompeux, comme intelligence artificielle ou reseau de neurones;
héhé. C'est à la mode. Mais bon, pour le document understanding c'est normal : ce sont généralement les mêmes équipes de recherches, ou des transfuges, que ceux qui utilisent journaiérement les termes d'apprentissage automatique.
Parce qu'on peut qualifier tout système avec feedback, résonant, de système à apprentissage automatique, non ? Je n'ai jamais rencontré de définition qui me convienent, concernant l'apprentissage automatique. Mais ce n'est peut être du qu'à mon ignorance !
Prenons le paradygme le plus sexy dans l'histoire, pour valoriser son travail. Le fonctionnement de l'homme et de sa pensée en est un !
Pour les réseaux de neurones par contre, j'ai rencontré tout une litterature bien précise sur le sujet. C'est utilisé dans beaucoup de domaines, l'approche est bien défini, et l'on connait les limitations. C'est ptet à la mode, mais c'est vieux comme concept !
http://soundcloud.com/bat-manson

batman14

http://soundcloud.com/bat-manson

Pov Gabou

Citation :
Pour les réseaux de neurones par contre, j'ai rencontré tout une litterature bien précise sur le sujet. C'est utilisé dans beaucoup de domaines, l'approche est bien défini, et l'on connait les limitations. C'est ptet à la mode, mais c'est vieux comme concept
Je sais bien que c'est vieux, mais ca fait longtemps que ca n'a plus rien a voir avec les neurones. Tu prends un des bouquins de ref, qui a deja plus de 10 ans, neural networks for pattern recognition de Bishop (Excellent bouquin par ailleurs), ca n'a rien a voir avec les neurosciences.J'en discutais d'ailleurs il y a 2 jours avec un americain qui bosse dans un labo de neuro sciences au Japon, ce ce type de defauts semantiques (mais apres quelques bieres, ca a devie sur foxnews et les rednecks

Les raisons pour le document understanding et cie, je suis bien conscient des raisons

Citation :
Parce qu'on peut qualifier tout système avec feedback, résonant, de système à apprentissage automatique, non ?
Ouais, donc un algo de newton, c'est un algo d'apprentissage, quoi.

Pov Gabou

Citation :
Tiens c'est la première fois que je remarque la faute d'orthographe à pub des prograMeurs...
Si on est rigoureux, on dirait pas programmeur de toute facon pour designer quelqu'un qui programme. Un programmeur, c'est le truc que tu mets sur ta prise electrique pour faire marcher le grille pain a 8 heures du matin.

batman14

Le bouquin de Bishop est effectivement super. Je l'avais lu pour mon TIPE en prépa. Je l'avais fait sur les reseaux de neurones et l'apprentissage automatique du langage. Si c'est pas sexy comme sujet !
J'étais tombé sur un prof de physique qui avait des gosses et une prof de math qui était passionné des questions d'intelligence. Le coup de bol. 17 au final, juste à cause d'un sujet sexy, vraiment pas à cause de mon taf effectif (même si j'avais vachement bossé, j'ai rien pu montrer de ce que j'avais fait !)
http://soundcloud.com/bat-manson

batman14

Citation :
Un programmeur, c'est le truc que tu mets sur ta prise electrique pour faire marcher le grille pain a 8 heures du matin.
Non ça c'est un programmateur !

http://soundcloud.com/bat-manson

Choc

Citation : neural networks for pattern recognition de Bishop (Excellent bouquin par ailleurs), ca n'a rien a voir avec les neurosciences.J'en discutais d'ailleurs il y a 2 jours avec un americain qui bosse dans un labo de neuro sciences au Japon, ce ce type de defauts semantiques (mais apres quelques bieres, ca a devie sur foxnews et les rednecks ). Les reseaux de neurones sont plus trop a la mode, d'ailleurs, en machine learning, j'ai l'impression; maintenant, c'est plus SVM et methodes bayesiennes (reseaux bayesiens).
+1000 pour le bouquin de Bishop
+1000 pour les SVM
Niveau classif, quand, j'ai besoin d'un truc, je me pose pas 40000 questions, SVM !
Par contre, y a pleins d'arguments pro SVM qui ne tiennent pas la route.
Citation : Parce qu'on peut qualifier tout système avec feedback, résonant, de système à apprentissage automatique, non ?
Attention, quand y a feedback (ca depend ce que tu definis par feedback, si c'est un retour d'un systeme expert ton assertion est fausse), c'est que tu es dans des algos a apprentissage supervisé. Tu as des algos par apprentissage sans feedback, on appelle ca simplement apprentissage non supervisé. C'est le cas des carte autoorganisatrice de Kohonen par exemple (SOM)
Site personnel: https://www.enib.fr/~choqueuse/

Pov Gabou

Citation :
Je pense que d'aborder les réseaux de neurones avec l'analogie des neurones aide quand meme pas mal à comprendre...
J'avoue ne pas etre persuade. Enfin bon, je prefere de toute facon l'approche statistique; c'est sur que ca fait moins sexy, mais bon...
Citation :
Attention, quand y a feedback, c'est que tu es dans des algos a apprentissage supervisé.
Ca depend de quel feedback tu parles. Par exemple, si on parle de retropropagation dans les reseaux de neurones, ca n'a en soit rien a voir avec supervise/non supervise.
Les algo EM recursifs que j'utilise sont avec feedback, mais non supervises (dans l'utilisation que j'en fais; tu peux utiliser les GMM dans un contexte supervise, ou chaque mixture est une classe, ou dans une approche non supervisee, ou clustering, ou chaque gaussienne correspond a une classe, dont la probabilite cachee est trouvee grace a l'algo EM). Puis aussi, j'ai pompe l'idee dans un article sur le reinforcement learning, qui est entre supervise et non supervise.

ClockworkOi!

J'ai un master (tout neuf) qui contenait des unités Apprentissage automatique, Sémantique, etc, et ce qui revenais le plus souvent de la part des enseignants (chercheurs) est que l'intelligence artificielle était dès le début un abus de langage dans lequel on placait trop d'espoir, et qui finalement n'as rien fais de ce qui était promis (genre la Programmation Logique Inductive, etc).

Choc


En tout cas en classif, la question du classifieur n'est pas vraiement importante (K-means, RNA, SVM ou autre). L'essentiel ca va toujours rester les PARAMETRES DISCRIMINANTS
parce que tout ca c'est des systemes GIGO: Garbage In- Garbage Out

Site personnel: https://www.enib.fr/~choqueuse/

Pov Gabou

Citation :
Il me semble que les reseaux de neuronnes séduisaient à une époque car on disait que c'était comme le cerveau humain,
Oui, il y a 30-40 ans, mais c'etait un modele qui de toute facon n'est plus valable depuis longtemps. Un neurone, c'est nettement plus complique qu'une sigmoide ...
Citation :
En tout cas en classif, la question du classifieur n'est pas vraiement importante (K-means, RNA, SVM ou autre). L'essentiel ca va toujours rester les PARAMETRES DISCRIMINANTS
Certes, "there is no such thing as free lunch", mais ca depend dans quel contexte tu te places. Par exemple, je trouve que ces algos de reinforcement learning sont interessants, car ca permet d'appliquer des methodes de classification avec un bon fond theorique a certains problemes ou la classification etait tres heuristique. Par exemple, pour mon probleme de detection de voix, tu vas avoir des algos sophistiques avec une machine a etat super complique; je trouve un truc comme l'algo EM recursif plus interessant (c'est pas pour rien que je me suis fait chier a le programmer et a le faire inclure dans scipy, pour que d'autres personnes puissent jouer avec).

batman14

Ils ont utilisé un modèle bien plus compliqué qu'un simple perceptron pour l'apprentissage de la marche sur leur chien, non ? Merde encore une source à retrouver...
Je trouve ça quand même pétillant pour l'esprit cette démarche gognitive où on observe la nature on la modélise et on tente de reagrder pourquoi c'est efficace.
Pour les cartes de Kohonen, je connais pas du tout. Je crois que c'est un réseau de neurones où ils sont tous connectés entre eux, avec une organisation "à plat" non (qu'on peut représenter sur un cercle je veux dire) ?
Citation :
PARAMETRES DISCRIMINANTS
Oui +1 pour l'intuition que j'ai de ce problème, même si en classif, hummm, je suis pas du tout expert.
http://soundcloud.com/bat-manson

ClockworkOi!

Citation : aibo, le chien de sony.
Ils ont utilisé un modèle bien plus compliqué qu'un simple perceptron pour l'apprentissage de la marche sur leur chien, non ? Merde encore une source à retrouver...
Ouais ce genre d'application c'est pas mal, y'a quelques papier de recherche sur des modèles utilisant des simulation physique pour apprendre ce genre de chose. Quand on vois le temps nécéssaire pour creer des modèles 3D animé, ca serait génial d'avoir un modèle (d'animation) de ce genre.

ClockworkOi!

Il reste toujours des zones d'ombres, mais c'est une question de temps ;)
C'est assez nouveau encore pour moi, mais il semblerai que l'appellation MFCC regroupe finalement plusieurs technique? Par exemple l'idée de base que j'avais était:
FFT -> Pre-emphasis -> mel scale filter bank -> DCT
En tant que novice, je me demandais l'importance du filtre Pre emphasis (dans spro elle est faite sur les donnée audio, et non pas sur le résultat de la FFT).
Merci, Merci Merci!!!

bara

Citation : Tiens c'est la première fois que je remarque la faute d'orthographe à pub des prograMeurs
Et c'était la dernière -> correction immédiate.

Pov Gabou

Citation :
C'est assez nouveau encore pour moi, mais il semblerai que l'appellation MFCC regroupe finalement plusieurs technique? Par exemple l'idée de base que j'avais était:
FFT -> Pre-emphasis -> mel scale filter bank -> DCT
Deja, l'ordre est pas bon

Bref, de memoire, j'irai verifier ce soir dans mes docs, je les ai pas au boulot, puis il doit surement y avoir plein de definitions differentes avec des resultats differents
- pre-emphasis. Simple filtre purement non-recursif, en general [1, -alpha] avec alpha dans ]0 1[ (je crois que dans Huang et Rabiner, c'est fixe a 0.99). Le but de ce passe haut est de diminuer l'importance du premier formant, qui n'est pas interessant en general (celui qui correspond a la frequence fondamentale).
- fenetrage (Hamming, par exemple)
- passage au domain spectral, log amplitude
- filtrage mel
- DCT inverse
Apres, tu peux calculer les MFCC a partir des coeff LPC, aussi, mais je me souviens plus tres bien.
La reference pour ce genre de trucs basiques de parole, c'est le Rabiner et Huang.
- < Liste des sujets
- Charte