Jump to content

Je raconte my life II - Le retour


Mobius

Recommended Posts

tout à fait, d'ailleurs :

Java = drones corporate ennuyants qui ont peur de tout

PHP = nihilistes

Ruby = hipsters qui réinventent la roue

Node.JS = Ruby²

Python = gens biens et normaux

C = grincheux barbus

C++ = masochistes

OCaml = universitaires

Ada = pas assez d'utilisateurs pour faire une généralité

En toute objectivité bien sûr.

On est les meilleurs programmeurs (en toute objectivité bien sûr)

http://caml.inria.fr/pub/old_caml_site/contests-eng.html

Link to comment

Aux membres du forums intéressés par le fonctionnement du cerveau, au niveau neuronal, Jeff Hawkins (créateur de la société Palm, entre autres, mais dont la seconde activité, c'est la neurobiologie), a écrit un bouquin en 2004, qui résume bien ce qu'on sait de la neurobiologie, de manière vulgarisante (en tout cas jusqu'à cette date) : http://en.wikipedia.org/wiki/On_Intelligence

Je n'ai pas trouvé de trucs écrit depuis qui ai cet axe là (de la vulgarisation scientifique écrite par quelqu'un qui n'est pas uniquement bio ou neurobio).

Il y a notamment le détail de la structuration du neo-cortex en "couches" de colonnes (6 ou 7 couches, je ne sais plus). Chaque colonne étant un assemblage de neurone. Plus on monte dans les couches, plus on abstrait les informations provenant des couches basses, qui sont reliées au cerveau reptiliens, au nerfs des membres, etc.

Il a ensuite créé une boite qui exploite en informatique ce modèle (notamment car à peu près à l'époque, on a vu que les différentes zones du cerveau - vision, gout, toucher, odorat, proprioception, etc… - utilisent globalement le même "algorithme" pour fonctionner).

Dans la même veine, c'est à cette époque qu'en Intelligence Artificielle (Hinton et al.) apparaissent le Deep Network Belief/Boltzmann machine un peu puissantes (les grosses structures de réseaux de neurones associatifs, qui peuvent boucler sur eux-memes, et qui disposent d'un nombre de couches suffisamment intéressant pour faire quelque chose de puissant. Au même moment, les machines "grand public" commençaient à disposer de la puissance nécessaire pour travailler avec ce genre de réseau) : http://en.wikipedia.org/wiki/Restricted_Boltzmann_machine#Restricted_Boltzmann_machine

C'est ce genre de structure qui a été utilisé par Andrew Ng (qui gagne le prix du Nom de Famille le Plus Improbable) chez Google avec l'expérience récente de reconnaissance de chats sur vidéos Youtube non-labelisées.

Donc ce qui se passe actuellement en sciences cognitives m'a l'air de s'orienter massivement vers des méthodes n’utilisant pas spécialement d'imagerie cérébrale. S'intéresser aux bases neuronales de la cognition n'est pas majoritaire me semble-t-il.

On n'a pas encore les machines suffisamment précises et pas chères pour regarder ce qui se passe au niveau d'un neurone ou d'une colonne de neurone pour un grand nombre d'expériences.

D'ici 15 ans, ça va venir.

@Chitah @F.mas :

je pense que les publications de Vilayanur Subramanian Ramachandran devraient vous intéresser (http://fr.wikipedia.org/wiki/Vilayanur_S._Ramachandran - oui, il a un nom de sous-marin). C'est un chercheur en neuro-science, assez coonu pour ses expériences qui s'attachent à comprendre le fonctionnement d'un élément du cerveau en particulier. Ses travaux sur la synesthésie et les membres fantomes ont apporté pas mal d'infos sur le fonctionnement du cerveau. Il est passé plusieurs fois à la BBC et il a un certain succès car sa personnalité est assez bonhomme et didactique (série "Secrets of The Mind", notamment).

Autre résultat qui m'a frappé : les enfants comprennent parfaitement les notions de poids et de volume, mais absolument pas celle de vitesse, de concentration (au sens de concentration de sucre dans l'eau par exemple) ni de température.

[…]

En fait, le cerveau a plusieurs modes de représentations des informations, suivant qu'il travaille en 2D ou en 3D, sur des choses qui sont internes au corps, et sur des choses externes. La structuration de ces modes se fait progressivement, chacun apparait après l'autre suivant l'age.

Ainsi, un truc marrant : si je te fais dessiner une ligne droite sur une grande feuille A3, sur une table, et que je te distrait en parlant en meme temps, ton cerveau va calculer le déplacement de la main en faisant bouger le membre effecteur final (la main), et toutes les articulations, muscles et tendon derrière vont suivre pour que le geste soit possible. C'est un système de contrainte connu, par exemple, des roboticiens (c'est aussi utilisé dans les jeux vidéos, quand tu veux faire bouger les membres d'un perso : tout les algos de Inverse Kinematics) - représentation extrinsèque.

Par contre, si je te fais tracer une ligne droite dans l'espace alors que tu es debout, et que je te parle aussi, l'extrémité de ta main va décrire un arc de cercle dans l'espace. Ton cerveau va plannifier le déplacement comme une combinaison d'angles et de moments de torsion entre tes articulations - représentation intrinsèque.

Maintenant, si je te demande, toujours debout et dans l'espace, d'imaginer que tu dessines sur une feuille dressée devant toi, ton geste redevient un geste rectiligne, avec un mode de représentation extrinsèque !

C'est assez génial d'observer des enfants qui grandissent, et de voir les rouages qui se mettent en place dans le cerveau.

Si tu as le bouquin dont je parles sous la main, dans l'un des premiers articles, il y a un schéma que je trouve assez bien fait qui résume l'écart entre le fonctionnement (biologique, chimique, etc) du cerveau et les représentations qui sont utilisées ordinairement pour décrire (ou prescrire) la vie de l'esprit. Est-ce qu'il y a un fondement biologique ou neuromachin à la volonté par exemple ? Ou est-ce seulement une convention linguistique qui flotte un peu dans les airs (et dans les écrits philosophiques) ?

Je n'ai pas la réponse complète à ta question, mais on a déjà quelques infos. Par exemple, avec un EEG on voit que le pic d'action électrique lorsque ton cerveau décide de faire une action a lieu plusieurs centaines de millisecondes avant que la décision ne te devienne consciente.

Par contre, si je te demande de choisir une lettre de l'alphabet, et que je fais ensuite défiler les lettres devant tes yeux, il va se produire un pic d'activité électrique dans ton cerveau 300 millisecondes après que tu ai "vu" la lettre (dit P300 : http://fr.wikipedia.org/wiki/P300). Ça permet d'équipper certains tétraplégiques avec des interfaces cerveau-machine, pour leur permettre d'utiliser un ordinateur, par exemple.

Lorsque j'allais en clinique, pendant mon temps au labo, je pouvais suivre des héminégligents, des anosognosiques, des prosopagnosique, des synesthètes, etc… C'est terrible à vivre pour eux, mais pour les chercheurs ça permet de voir fonctionner un cerveau avec une "variable" désactivée (comme pour un système info), et donc d'en déduire comment fonctionne cette fonction là dans le cerveau.

Link to comment
Mouais le code des universitaires c'est pas toujours très sympa à lire / maintenir.

Un peu comme celui des cryptographes qui est souvent cryptique.

C'est peut-être fait exprès. Ca équivaut un peu à ajouter des douves marécageuses à une forteresse. :D

Link to comment

Il a ensuite créé une boite qui exploite en informatique ce modèle (notamment car à peu près à l'époque, on a vu que les différentes zones du cerveau - vision, gout, toucher, odorat, proprioception, etc… - utilisent globalement le même "algorithme" pour fonctionner).

Dans la même veine, c'est à cette époque qu'en Intelligence Artificielle (Hinton et al.) apparaissent le Deep Network Belief/Boltzmann machine un peu puissantes (les grosses structures de réseaux de neurones associatifs, qui peuvent boucler sur eux-memes, et qui disposent d'un nombre de couches suffisamment intéressant pour faire quelque chose de puissant.

Hmm dans l'absolu si je ne m'abuse, si tu as une contre réaction, tu n'as pas besoin de plus que trois couches, juste d'un nombre ahurissant de neurones au milieu.

Link to comment

Voui, de plus 'élégant' n'est pas vraiment le qualificatif qui me vient à l'esprit quand je pense à perl.

je reprécise ce que j'ai dit : le meilleur compromis puissance/élégance/simplicité.

Au cas où ça ne serait pas clair : je suis un noob de la programmation, tout ça c'est des vieux et bons souvenirs …

Mais bon j'entends bien la classification de pankkake concernant Java, C et C++. Php = nihiliste là par contre je capte pas trop.

Link to comment

Hmm dans l'absolu si je ne m'abuse, si tu as une contre réaction, tu n'as pas besoin de plus que trois couches, juste d'un nombre ahurissant de neurones au milieu.

Ça m'intéresse ça. Je visualise mal l'exemple que tu donnes. Tu as un lien ?

Link to comment

On est les meilleurs programmeurs (en toute objectivité bien sûr)

http://caml.inria.fr/pub/old_caml_site/contests-eng.html

Ah, et Caml avait ce truc génial, les filtres, qui évitait l'enfilage de elif… Mon meilleur souvenir de programmation ces trucs.

Et geek que vous êtes, vous oubliez le VBA, qui couplé à des feuilles excel immonde permet au corporate incompétent de pondre des trucs absolument illisibles. En croyant qu'il programme.

Link to comment

Ça m'intéresse ça. Je visualise mal l'exemple que tu donnes. Tu as un lien ?

Bon en fait j'ai du parler trop vite et je m'explique :

Si on parle de réseaux de neurones pour un problème de décision ( => approximation d'une courbe ) alors là la preuve date depuis 20 ans.

Mais en relisant ton sujet, j'ai l'impression que c'est pas ce que tu cherches à résoudre.

Au hasard je mets mes sources :

http://neuron.eng.wa.../chap2/2_3.html

Bouquin complet :

http://neuron.eng.wa...t_contents.html

Autre hypothèse, j'ai rien compris au réseaux de neurones dont tu parles….

Link to comment

Et geek que vous êtes, vous oubliez le VBA, qui couplé à des feuilles excel immonde permet au corporate incompétent de pondre des trucs absolument illisibles. En croyant qu'il programme.

Mouais.

Un vrai programmeur comprend ce code soit-disant illisible, mais, dans le même temps, conçoit aussi le programme qui aurait été adapté aux besoins :P (en économisant des caractères, des lignes, et simplifiant le propos…)

Link to comment

VBA c'est de la merde un langage parfaitement adapté pour faire des prototypes.

Je me souviens d'un stage pour une célèbre compagnie d'assainissement des eaux, où il s'agissait de prévoir le comportement des cours d'eaux de la région parisienne (expansions alguales, bactériologiques, etc.). J'ai commencé par faire un mix de fuzzy logic et de système expert (pardon pardon, c'était en 1998), que j'ai prototypé avec VBA, j'ai consolidé le modèle avec Matlab, puis on a déployé en codant du C pour le système en production (à destination des stations de pompages et de mesures sur les cours d'eau, de mémoire la Seine, et…euh, deux autres dont la Marne je crois).

Ce stage a été plus ou moins un cauchemar, mais bon, j'ai ramassé de l'oseille, et derrière le projet a été déployé donc bon. Réussite disons. Ce qui m'a vacciné des entreprises étato-privées.

Ce qui ne m'a pas empêché quelques mois plus tard de faire rebelote avec une entreprise de chauffage urbain. :online2long:

Link to comment

Je me souviens d'un stage pour une célèbre compagnie d'assainissement des eaux, où il s'agissait de prévoir le comportement des cours d'eaux de la région parisienne

[…]

Ce qui ne m'a pas empêché quelques mois plus tard de faire rebelote avec une entreprise de chauffage urbain. :online2long:

T'es passé de l'eau froide à l'eau chaude. T'aurais pas eu à réinventer l'eau tiède en faisant la synthèse de tes deux stages ? :dents:

VBA est une sorte de monstre, disons que d'un point de vue scientifique ça ressemble aux rats de Séralini. Des excroissances cancéreuses de partout sur un corps qui n'est rien d'autre qu'un macro assembleur semi portable en provenance directe des années 70.

Link to comment

Bon en fait j'ai du parler trop vite et je m'explique :

Si on parle de réseaux de neurones pour un problème de décision ( => approximation d'une courbe ) alors là la preuve date depuis 20 ans.

Mais en relisant ton sujet, j'ai l'impression que c'est pas ce que tu cherches à résoudre.

Au hasard je mets mes sources :

http://neuron.eng.wa.../chap2/2_3.html

Bouquin complet :

http://neuron.eng.wa...t_contents.html

Autre hypothèse, j'ai rien compris au réseaux de neurones dont tu parles….

En fait, je parlais de 2 choses. Les couches de neurones dans le neo-cortex (là, ce sont des neurones physiques). Meme si pour eux on commence un peu à comprendre leur organisation et construction, leur "algorithme" n'est pas encore maitrisé (étymologie : algorithme = rythme des algues, ça n'aide pas à comprendre).

Les réseaux de neurones artificiels dont je parlais sont dans la classe des réseaux de neurones stochastiques récurent. Tous les réseaux de neurones fonctionnent plus ou moins de la même manière, en fait.

Ce qui les différencie, c'est le nombre d'entrée, de sorties, de couches cachées autorisées, et la fonction de transfert de chaque neurone. Après, tu peux rajouter des raffinements, comme introduire de l'aléatoire sur certains neurones, ou sur la fonction de transfert. Ou régulièrement "tuer" des neurones (comme un Alzheimer) en coupant les entrées, pour le forcer à "halluciner" (bien pratique dans certains cas).

Tu peux autoriser les couches cachées à boucler sur les couches antérieures (là, tu augmentes la complexité et le temps de calcul de plusieurs ordres), etc…

Ce qui est à la mode, depuis 2006 à peu près, c'est les Deep Learning Encoder/Autoencoder. Les réseaux stochastiques récurrents dont je parlais. Tu peux aussi trouver ça sous les termes de Boltzmann Machine (ou Restricted Boltzmann Machine pour avoir un modèle réaliste sur nos machines), de Hierarchical Temporal Memory (un modèle de pooling créé chez Numenta, de Jeff Hawkings), etc…

Toutes ces versions sont sensiblement équivalentes, ce qui les différencie de la grande mode des réseaux de neurones des années fin 70/80, c'est la puissance de calcul, qui autorise des complexités qui les rendent enfin intéressant. Au delà de l'exercice de reconnaissance des Perceptrons, on va dire. Cette puissance permet d'introduire du random, d'avoir plusieurs couches cachées, de raffiner, et donc de commencer à pouvoir proposer une solution commerciale "en boite noire" à des boites pour résoudre des problèmes un peu générique. (Un peu plus générique, par exemple, que la reconnaissance des adresses manuscrites sur les enveloppes timbrées à la Poste).

J'espère que j'ai éclairci mon explication, et pas l'inverse ;).

Link to comment

En fait et c'est marrant car je ne suis pas un pro de l'objet c'est Eiffel qui m'a le plus impressionné. Une année je devais faire un cours d'objet avec et j'ai implanté un projet pour les étudiants assez gros (core war) : c'est le plus gros programme que j'ai réalisé bug free du premier coup merde !

Ha la programmation par contrat, il paraît que c'est très efficace, mais j'ai jamais l'occasion de travailler avec Eiffel. Le zéro-erreur c'est ce que promet Eiffel, apparemment c'est pas des promesses en l'air.

Sinon, il faudrait rajouter quelques langages avec des généralités:

- Javascript: groupe de bidouilleurs et hipsters, particulièrement vicieux et prolifiques.

- Clojure: nostalgiques du LISP (qui tel le phénix n'en finit pas de se réincarner).

- Scala: universitaires et masochistes.

- Ceylon: avant-gardistes.

- Erlang: j'hésite entre hipsters et avant-gardistes.

bien sûr, en toute objectivité…

Link to comment

- Javascript: groupe de bidouilleurs et hipsters, particulièrement vicieux et prolifiques.

Tout à fait. En meme temps, l'industrie manque de bons codeur Javascript. Il y a plus de postes et de jobs que de personnes. Les jeunes qui commencent en info peuvent s'attacher à ce langage, il y a des débouchés pour les 5 à 10 ans qui viennent.

Link to comment
Pour être bon codeur en Javascript il avoir envie de maîtriser un langage qui a des erreurs fondamentales dans sa conception, et donc… enfin, je pense que ça peut arriver, par accident.

Y a-t-il des langages un peu répandus (mettons, au moins autant que le LISP, c'est dire le faible niveau exigé) qui ne reposent pas sur de telles erreurs ?

Link to comment

Y a-t-il des langages un peu répandus (mettons, au moins autant que le LISP, c'est dire le faible niveau exigé) qui ne reposent pas sur de telles erreurs ?

Difficile de dire qu'il existe un langage parfait (même si Python 3 s'en approche :P) mais il y a quand même des langages comme Javascript et PHP qui en tiennent une couche.

Link to comment

Pour être bon codeur en Javascript il avoir envie de maîtriser un langage qui a des erreurs fondamentales dans sa conception, et donc… enfin, je pense que ça peut arriver, par accident.

Tu penses a quoi comme erreurs ?

Le langage a un cote minimaliste et flexible que j'aime bien (et pourtant je suis un hipster grincheu barbu qui fait aussi du C# et qui était nihiliste il y a 10 ans, mais au moins j'ai jamais été masochiste).

Link to comment

Les types de base très pauvres. Les comportements comme ne pas planter pour une variable non définie, le fait qu'une variable est globale par défaut.

Un modèle bizarre sans objet et sans exceptions, même si on peut simuler le premier, j'ai du mal à voir que « c'est mieux parce que plus flexible ».

Le fait qu'il soit très difficile à optimiser.

Tout ce qui est date, itération, etc. demande d'utiliser des librairies tierces tellement les trucs de base sont pourris.

Et http://wtfjs.com/

Link to comment

Un modèle bizarre sans objet et sans exceptions, même si on peut simuler le premier, j'ai du mal à voir que « c'est mieux parce que plus flexible ».

Les exceptions ne me manquent pas du tout, c'est une source de chaos et de confusions.

"Mieux" ça dépend par rapport a quoi et pour quoi faire, mais l’absence de concepts prédéfinis comme les classes, l’héritage etc. rend le tout flexible. On défini soi même ce qu'on entend par classe.

Si par exemple je veux qu'un changement runtime dans une "classe" change aussi toute les instances de cette classe, je peux.

Je me demande quand même si on abuse pas de la tolérance de lib.org envers les informaticiens la :online2long:

Link to comment

Tout à fait. En meme temps, l'industrie manque de bons codeur Javascript. Il y a plus de postes et de jobs que de personnes. Les jeunes qui commencent en info peuvent s'attacher à ce langage, il y a des débouchés pour les 5 à 10 ans qui viennent.

Pankkake m'a un peu coupé l'herbe sous le pied, mais j'allais dire: un bon codeur, en général il ne fait pas de Javascript parcequ'il réalise très vite que ce langage est une merde sans nom - en toute objectivité, bien sûr.

En ce moment il y a effectivement un regain d'intérêt énorme pour JS, et donc beaucoup de jobs. Il y a des développeurs JS qui vont se faire de l'argent les 3-4 prochaines années, et s'ils sont un tant soit peu malins ils vont rapidement quitter le marché JS. Le gros du troupeau pataugera dans le bourbier infâme de la maintenance applicative, à s'arracher les yeux sur du code pourri. Au bout d'un moment , complètement désespérés, ils réécriront tout avec le nouveau truc à la mode.

Sinon pourquoi JS c'est de la merde ?

- des variables globales: rien que ça c'est suffisant pour foutre le truc à la poubelle avec un regard dédaigneux.

- le scope des variables incompréhensible

- un système de prototypes qui permet la modification à la volée de n'importe quel "objet"

- et le top: ça fonctionne pas de la même façon suivant la VM qui l'exécute (mais apparemment les devs JS trouvent ça normal…)

Link to comment

- des variables globales: rien que ça c'est suffisant pour foutre le truc à la poubelle avec un regard dédaigneux.

A peu près tous les langages ont des variables globales, on est pas obligé de les utiliser.

- le scope des variables incompréhensible

Oui ça je suis d'accord, c'est un cauchemar.

- un système de prototypes qui permet la modification à la volée de n'importe quel "objet"

Ca justement c'est ce que j'aime :)

Link to comment
Guest
This topic is now closed to further replies.
×
×
  • Create New...