Bonjour chères moules,
ma nouvelle lubie consiste à m'intéresser au monde a priori très complexe de l'intelligence artificielle. J'ai envie de découvrir le truc, d'un point de vue théorique bien sûr, mais aussi avec des exemples simples et concrets pour démarrer (je développe beaucoup en python et en java), car quand c'est trop austère, je n'accroche pas.
J'en ai marre de coder des ptits jeux qui ne fonctionnent qu'en mode multijoueur car je suis incapable de coder une IA correcte (soit elle est nulle, soit elle est trop parfaite car elle connait les variables censées être inconnues)
Bref, si vous avez des références d'ouvrages, si possible en français, susceptibles de m'intéresser, je suis preneur.
Note : je suis très mauvais matheux, j'espère que cet aspect de ma personne n'est pas trop handicapant pour rentrer dans le sujet :-/
Merci beaucoup !
# Trop vague
Posté par Snarky . Évalué à 4.
Il faut préciser le sujet qui t'intéresse.
Pour parler grossièrement, l'IA, actuellement, est fréquemment un simple système qui distribue des points sur des actions possibles, ensuite, elle prend le meilleur score pour réaliser l'action.
Mais souvent, avec un peu de logique, tu peux faire ce que tu veux, par exemple, il y a quelque année (je devais avoir environ 16ans), je m'étais amusé à réaliser un algorithme de path finding pour un petit jeu à moi. J'avais réfléchi plusieurs nuit et en moins d'une semaine, j'avais pondu un truc en delphi qui fonctionnait de façon nickel pour trouver un chemin, en fonction de "poids" de terrain.
Quel ne fut pas ma surprise quelque année plus tard en découvrant l'algorithme A*. C'était pour ainsi dire, mon truc. J'avais réussi à sortir un algo connu simplement en réfléchissant logiquement (j'en étais fier, et encore aujourd'hui ;-) ). J'avais même intégrer des optimisations que n'avais pas le A* de base.
Tout ça pour dire, que, en fonction de ce que tu as besoin, même sans gros écrit, tu trouve toujours ce que tu as besoin si tu es capable d'être purement logique et de mettre par écrit ce que tu as en tête.
Les écrits ne permettent que d'optimiser ce que tu as imaginer : un exemple, tout le monde sais facilement imaginer une recherche d'un mot dans une chaîne de caractères, mais en cherchant un peu, il es possible de tomber sur des algorithmes permettant une optimisation de la recherche ( http://fr.wikipedia.org/wiki/Algorithme_de_recherche_de_sous(...) ).
Tout ça pour dire que souvent, si tu arrive a mettre les comportements souhaité par écrit, tu as déjà une grosse partie du boulot de fait.
[^] # Re: Trop vague
Posté par ciol . Évalué à -5.
[^] # Re: Trop vague
Posté par seginus . Évalué à 3.
D'ailleurs, notre cerveau ne fonctionne-t-il pas lui aussi de cette façon ?
l'information suit un chemin parmis les neurones suivant des critères qui lui ont été attribué. Peut-être avec un peu de hasard pour la créativité, mais bon, tout ceci est normalement restranscriptible, et quelque soit la complexité, ça reste de l'algorithmique quand même.
[^] # Re: Trop vague
Posté par Sebbbastien . Évalué à 2.
Tout ce qui ce passe dans le cerveau est parallélisé à un point inimaginable et incomparable à ce qui est fait en informatique.
L'information suit pas vraiment un chemin mais se diffuse et renforce ou affaiblit les liens entre les neurones. Par exemple pour l'instant les modèles de connexions les plus performants pour les réseaux de neurones bah c'est les modèles aléatoires...
[^] # Re: Trop vague
Posté par Thomas Douillard . Évalué à 10.
Mon avis est assez proche de Chambre_chinoise.
En gros, un bête algorithme n'est pas "intelligent" en soi.
Genre un algo de plus court chemin, exécuté par une machine, en entré il a un graphe, en sortie il a un chemin, et c'est tout, c'est une coquille vide.
Quand tu étales une carte devant toi, tu as un but, tu veux à priori aller quelque part, par envie, par obligation, que sais-je. Après, sur cette carte, tu vois des traits, qui représentent des routes, des autoroutes, des chemins: tout ça fait sens.
Sans but, sans motivation, sans représentation, sans envie, sans besoin, sans conscience d'un monde extérieur à soi, un graphe n'est rien. Pour toi, (sans d'ailleurs que tu en ai conscience, tu fais pas des maths pour aller chez un amis) ce n'est pas un graphe, c'est la représentation de quelque chose.
Pour moi c'est ce qui fait la différence entre une coquille qui calcule et quelque chose d'intelligent. Et c'est le sens des recherches dans ce genre d'équipe: http://www.aiboteamhumboldt.com/projekte.php?lang=en ( http://www.martin-loetzsch.de/ par exemple) en robotique. Les robots ont besoin de concevoir le monde, et de le représenter de manière interne pour ne pas raisonner que sur un modèle, mais pour agir dessus.
L'intelligence, dans ce cas, serait un comportement émergent. Je sais que d'autres existe, je sais qu'un monde existe, je sais que je peux agir dessus, je sais que quand j'agis, je fais plaisir (ou pas) à des gens, a moi. Je ne calcule pas le plus court chemin dans un graphe.
[^] # Re: Trop vague
Posté par pix (site web personnel) . Évalué à 2.
Relisez ce commentaire avec dans la tête la voix et la tête de cette personne: http://l.yimg.com/img.tv.yahoo.com/tv/us/img/site/35/30/0000(...)
Saisissant hein ? Bon ben, c'est pas le tout mais, je retourne bosser.
PS Pour les autres il s'agit du rôle de Charle Epps un acteur qui joue un mathématiciens super méga balèze dans la série Numb3rs sur M6 et qui aide le FBI parce que les maths ça fait enfermer les méchants
[^] # Re: Trop vague
Posté par Thomas Douillard . Évalué à 4.
Bon évidemment, dans mon cas, c'est naturel, donc c'est un peu de la triche.
(je fais semblant d'être sérieux, enfin, j'essaye. Ça y est, je pouffe. J'éclate de rire, ça suffit les conneries)
[^] # Re: Trop vague
Posté par chuchunain (site web personnel) . Évalué à 1.
quand tu demandes à ton GPS JonJon de trouver le plus court chemin, il fait quoi ? un calcul, comme un robot dans son expression la plus simple. on appelle les algos de Dijkstra au secours et basta.
si je code une équipe de foot ball, c'est tellement basique car tout est codé en dur (je suis une quiche en foot et ia), de fait je trouve que c'est le niveau zéro de l'IA.
cependant lorsqu'un robot est plus évolué, qu'il apprend, enrichit de lui même son comportment, là pour moi on peut appeler ça de l'IA.
je vais finir par l'exemple. le WALL-E est un robot de la compagnie Buy N'Large (tirée du film à succès de Pixar). si le robot se contente de rassembler les ordures et les aggréger : c'est un automate et somme toute son IA est faible, voire nulle (cf les gros modèles travaillant dans les soutes à ordures du vaisseau).
losque le petit WALL-E, sur Terre, développe des comportements typiquement humains (collectionnite aïgue et nostalgie), il cesse d'être un automate et devient une IA.
notez que les nouveaux comportements développés ne sont pas nécessairement utiles et peuvent se réveler néfastes.
T'as le bonjour de JavaScript !
[^] # Re: Trop vague
Posté par nicoastro . Évalué à 4.
[^] # Re: Trop vague
Posté par Perthmâd (site web personnel) . Évalué à 4.
Non, non, très facile. Les humains utilisent KDE plutôt que Gnome.
[^] # Re: Trop vague
Posté par Thomas Douillard . Évalué à 7.
[^] # Re: Trop vague
Posté par fearan . Évalué à 3.
Il ne faut pas décorner les boeufs avant d'avoir semé le vent
[^] # Re: Trop vague
Posté par chuchunain (site web personnel) . Évalué à 1.
- tout comportement évolué et inutile ?
- ce qui ne se réfère pas aux fonctions essentielles (manger, dormir, se reproduire) ?
- l'opposition de l'animal
je sais que je shématise, les baleines, les singes et d'autres sont connus pour des capacités parfois proches des notres. il paraît qu'il y a des singes sous kde et fans d'emacs !!! (troll rapport aux commentaires plus bas). moi c'est gnome et vi. pas gnome en fait mais bon, s'il faut choisir...
T'as le bonjour de JavaScript !
[^] # Re: Trop vague
Posté par Perthmâd (site web personnel) . Évalué à 2.
Moi proposer réécrire KDE en Ook : ça comprendre plus facile.
[^] # Re: Trop vague
Posté par Jerome Herman . Évalué à 4.
Bien que le domaine soit encore très expérimental, il est à peu près certain que le mode de fonctionnement privilégié du cerveau est la reconnaissance de motif, alors que l'ordinateur ne sait faire que du calcul. C'est pour celà que l'ordinateur est capable d'extraire des logarithmes à toute vitesse alors qu'il n'est pas capable de reconnaitre un arbre stylisé sur une peinture.
Généralement l'intelligence artificielle, au sens noble du terme, cherche à émuler la reconnaissance de motifs (pattern matching) du cerveau. Après les méthodes sont nombreuses : réseaux de neurones, algorithmes évolutifs, algorithmes figés ou approche statistique tout est bon pour arriver au résultat.
Dans un jeu vidéo, le plus souvent (et si le problème n'est pas NP complet) on se contente bêtement d'un algorithme figé : on évalue tous les coups possibles, puis tous les coups suivants etc. jusqu'à descendre de N niveaux dans l'arbre des possibilités et on prend la position la plus favorable (La notation de la position la plus favorable étant définie arbitrairement par le codeur)
Après si ca ne marche pas (trop gourmand en ressource, trop long, notation des positions favorables trop ardue etc.) on est obligé de se tordre un peu la tête pour donner plus de peps à son algo. Mais là les choix de méthodes se font au cas par cas suivant les problèmes.
[^] # Re: Trop vague
Posté par benja . Évalué à 2.
Une autre question dans ce genre réthorique, peut-on reconnaître quelque chose que l'on ne connait pas ou, au moins, reconnaître que l'on ne la connaît pas ? Comment ça trop d'alcool...
*: ce n'est pas tout à fait ce que tu as dit mais bon.
[^] # Re: Trop vague
Posté par Jerome Herman . Évalué à 3.
Non le mode de fonctionnement de l'intelligence humaine est principalement basée sur la reconnaissance de motif. De même qu'un immeuble est principalement basé sur de la pierre. Mais bon une pierre n'est pas un immeuble. Une autre preuve de pensée évoluée est l'enterrement des morts, ce qui ne correspond pas vraiment à une reconnaissance de motif.
Une autre question dans ce genre réthorique, peut-on reconnaître quelque chose que l'on ne connait pas ou, au moins, reconnaître que l'on ne la connaît pas
Oui et non, un objet inconnu est par définition inconnu. Par contre on peut reconnaitre tout ce que l'on a conceptualisé. Par exemple l'atome a été conceptualisé bien avant d'être découvert et il a été observé bien après avoir été découvert. Autre exemple les aveugles de naissance qui recouvrent la vue suite à une opération médicale sont capables de reconnaitre des objets de visu. Par exemple si on montre à un aveugle une boite ou le dessin d'un triangle il va être capable de dire ce que c'est. (C'est le principe des correspondances)
[^] # Re: Trop vague
Posté par Erwan . Évalué à 1.
[^] # Re: Trop vague
Posté par allcolor (site web personnel) . Évalué à 2.
[^] # Re: Trop vague
Posté par Thomas Douillard . Évalué à 4.
Parce qu'effectivement, l'IA c'est vaste.
Le truc le plus "ambitieux" que j'ai vu de ce côté là, pour la partie raisonnement pur, c'est le projet CHERCHEUR, de Jacques_Pitrat, qui vise grossièrement à construire un programme informatique qui raisonne comme un humain qui résoudra un problème.
Grossièrement toujours, l'approche est la suivante:
-> tu décris un problème dans un langage formel (problème SEND+MORE=MONEY, Sudoku ou ce genre de problème, mais pas seulement) relativement expressif
-> le programme analyse et génère un programme spécifique en C, qui va raisonner d'abord sur le problème pour faire des déductions utiles à la résolution (il possède déja une base de donnée de règles à appliquer)
-> appliquer une phase de combinatoire pour tester des hypothèses (genre S=4) quand on a "suffisamment" raisonnés sur le problème, relancer une phase de raisonnement en tenant compte de cette hypothèse, et recommencer
Je crois qu'il y a aussi une phase d'apprentissage, ou si le programme C a pas l'air d'être efficace, il va essayer d'en tenir compte pour être plus efficace après, essayer de n'utiliser que les règles les plus efficaces, etc.
L'objectif ultime du projet est de faire en sorte que le programme devienne autonome en apprenant de lui même comment raisonner sur le problème original. Dans son cas c'est apprendre les règles de raisonnement.
En gros ce qu'il fait avec c'est modéliser un problème, le filer à son programme, attendre le résultat et regarder la démonstration, et s'extasier genre "ah ouais ça j'y aurai jamais pensé"
Pour la partie raisonnement sur le problème (partie "meta") il s'est amusé à faire faire le raisonnement automatiquement par son programme lui même (faire le choix des règles à appliquer en gros) et à coder un choix de règles lui même et à constater que son choix de règle marchait moins bien. (Pas compris comment ça marchait, il a pas beaucoup détaillé)
Désolé pour les refs, j'ai ça http://www.lina.sciences.univ-nantes.fr/JFPC08/jfpc08/index.(...) mais c'est pas très parlant pour un néophyte je pense, il y avait aussi des slides mais pas très détaillés.
En dehors de ça il y a la page de Pitrat, ses publis et les thèses de ses thésards, mais le tout n'est pas forcément "à jour" sur ce projet.
Il y a ça aussi : http://www.automatesintelligents.com/interviews/2001/nov/pit(...)
[^] # Re: Trop vague
Posté par lolop (site web personnel) . Évalué à 2.
http://enterface08.limsi.fr/static/docs/InvitedPresentations(...)
Votez les 30 juin et 7 juillet, en connaissance de cause. http://www.pointal.net/VotesDeputesRN
# Re:
Posté par ciol . Évalué à 1.
Non. Au contraire en IA, tout reste à faire et ce qu'il manque, c'est de l'imagination.
Pour commencer, tu peux voir des trucs un peu rigolo comme les automates cellulaires ou les algorithmes génétiques. Il n'y a pas du tout de maths là dedans.
[^] # Re: Re:
Posté par Sebbbastien . Évalué à -3.
Sans blague, y'a pas plu con qu'un automate (on dit souvent que le premier ordinateur/automate construit est une calculatrice, c'est intelligent une calculatrice ?!?)
Et pour ce qui est des algos. génétiques, des réseaux de neurones et des systèmes multi-agents effectivement tout ça peut être utilisé sans être mathieu, mais il n'empêche que pour utiliser à fond ces outils il faut les comprendre, et pour les comprendre, bah les maths ça aide...
[^] # Re: Re:
Posté par ciol . Évalué à 4.
Ce que je voulais dire, c'est qu'en trouvant des méthodes vraiment originales on a peut être plus de chance de s'en approcher.
Il y a aussi une théorie qui dit que les personnes qui ont le plus de chances de trouver certains problèmes réputés très difficiles (comme trouver une vraie IA ou démontrer que P != NP (ou égal)), sont ceux qui sont loin du domaine, car ils pourront penser différemment, sans être influencés.
Enfin bon pour revenir aux automates cellulaires, comme ceux de Conway, c'est quand même assez fou ce qu'on peut faire de complexe à partir de choses simples.
[^] # Re: Re:
Posté par Sebbbastien . Évalué à -1.
100% d'accord
[^] # Re: Re:
Posté par Thomas Douillard . Évalué à 3.
Merde, alors ma grand mère aurait aurait pu demontrer le théorème de Fermat si j'avais essayé de lui expliquer ? Dommage que je l'aie pas fait :)
[^] # Re: Re:
Posté par ciol . Évalué à 4.
Mais de nombreux problèmes peuvent être expliqué d'une façon détourné.
# un rat ?
Posté par icyfemur . Évalué à 2.
# Écrit comment TU joues !!
Posté par chimrod (site web personnel) . Évalué à 7.
Si la probabilité de se faire remarquer >= la probabilité d'attraper sa proie
Attaquer();
Quand on y réfléchi ça semble logique, mais c'est justement le calcul de cette probabilité qu'il va te falloir modéliser.
Je pense que je vais dire une évidence, mais dans un code, la seule chose qui permet d'influencer le comportement du programme, ce sont les variables. Ici ça va être la même chose. Pour commencer, joue a tes jeux, en te demandant qu'est ce qui te pousse à prendre telle décision dans le jeu.
Le hasard ? Un comportement autistique qui fait que tu prend en compte l'ensemble des paramètres du jeu ? Ni l'un ni l'autre. L'homme n'est ni libre ni rationnel, et nos décisions ne sont jamais justes car nous n'avons jamais une information complète et objective. Voir les pages très intéressantes sur la Theorie_des_jeux
Il faut que tu fasses la liste des paramètres qui entrent en compte quand tu joues à tes jeux : bilan perte/gain si on est dans un jeu comme les échecs; stade dans le jeu ( début/milieu/fin ) pour les jeux fermés : tournois poker, course de voiture; connaissance de l'adversaire ( temps de réaction, style de jeu etc ); il y a énormément de paramètres qui peuvent influencer internes au jeu ( points de vie ) ou externes ( nombre d'adversaires déjà en train de s'acharner sur ta cible.. )
Ensuite, à partir de ça, il faut élaborer un modèle à suivre ( ou plusieurs, et présenter différentes IA, chacune aillant son style ). La prise de décision est très facile à mettre en place, et se résume à une simple équation en prenant en compte les paramètres relevés plus haut. Libre à toi de les complexifier en mettant en compte un historique des décisions de l'adversaire, de rajouter un peu d'aléatoire pour éviter des réactions prévisibles etc
Je n'ai pas d'ouvrages à te conseiller, mais je pourrais te conseiller d'aller voir les pages qui traitent de CoreWar, c'est - une forme - d'intelligence artificielle, qui dispose d'une grande littérature et qui devrait déjà t'occuper un petit moment ! :)
Amuse toi bien !
[^] # Re: Écrit comment TU joues !!
Posté par Thomas Douillard . Évalué à 2.
Attaquer();
J'en doute: t'as au moins d'autres paramètres. Genre "si j'ai très très faim" et si "j'ai pas vu un oiseau depuis des siècles" alors "seuil de risque" très très haut :)
Son expérience de la chasse aussi j'imagine, genre le chat inexpérimenté va plus facilement se faire remarquer, il va mal évaluer la probabilité de se faire remarquer, voir ne pas du tout avoir conscience qu'il peut se faire remarquer.
L'homme n'est ni libre ni rationnel, et nos décisions ne sont jamais justes car nous n'avons jamais une information complète et objective.
C'est aussi une question de temps: nous disposons d'un temps limité pour prendre nos décisions. C'est même pire que ça, notre esprit nous "pousse" à prendre des décisions rapide (ennui, lassitude) si nous stagnons, amha.
Et si tu regardes théories des jeux, il existe des jeux à information complète, genre le solitaire pas exemple. Les échecs aussi même, nous avons toutes les informations sur le jeu, pas de hasard. Certe nous ne savons pas ce que va jouer l'adversaire, on peut seulement l'imaginer.
À part ça, quelques algos "de bases" en algo de jeux : en:Negamax en:Alpha-beta_pruning, etc.
[^] # Re: Écrit comment TU joues !!
Posté par chimrod (site web personnel) . Évalué à 1.
ce que tu dis sur les jeux à information complète est intéressant, mais ça ne rend pas les choix plus objectifs pour autant. Le jeu d'échec est reconnu pour êter un jeu de mémoire : il y a une liste d'ouverture à connaître, une liste de fermeture, et la partie se déroule entre ces deux états définis ( enfin je dis peut être des bêtises, il faudrait qu'un amateur vienne confirmer ).
Dans les réflections sur le jeu, il y a le livre de Carse, Jeux finis Jeux infinis, qui présente les jeux selon qu'ils sont tournés vers l'intérieur, ou vers l'extérieur. De même, on peut s'intéresser à la manière dont le changement d'un détail dans la règle, change la stratégie du joueur en profondeur etc.. Mais ce sont là d'autres débats !
[^] # Re: Écrit comment TU joues !!
Posté par Thomas Douillard . Évalué à 2.
Le jeu peut très bien être vu comme un moyen d'apprendre justement :) Le jeune chat s'entraîne, instinctivement, pour quand il devra trouver sa bouffe tout seul et pour régler les paramètres de l'équation.
Héhé, l'information est complète, ça n'empêche pas qu'on a une capacité limitée à "dérouler" le jeu, due au très très grand nombre de combinaisons possible et qu'on ne sait pas ce que l'adversaire va jouer.
Donc effectivement c'est beaucoup de pratique, du par cœur au début ou à la fin quand la combinatoire est "calme" et de "feeling" (quoi que ça puisse vouloir dire) pour pas te mettre dans des situations ou d'expérience tu te mets en danger et mettre l'adversaire en danger, de prévisions sur ce que va jouer l'adversaire, de dosage du risque, ...
Du coup, comme disais mon prof d'IA, il y a deux façon de faire de l'IA, grossièrement:
* Mettre l'intelligence et la connaissance humaine sur le problème dans l'algorithme,
* Ou pondre un algo qui va prendre les décisions toutes seules sans qu'on lui tienne forcément la main.
Il y a aussi le bourrinage que permet la machine, bien sûr quand c'est possible, mais je suis pas sûr qu'en soit ça mérite le qualificatif "d'intelligence artificielle" :)
[^] # Re: Écrit comment TU joues !!
Posté par smc . Évalué à 10.
(1) Don’t run, if you can walk.
(2) Don’t walk, if you can stand.
(3) Don’t stand, if you can sit.
(4) Don’t sit, if you can lie down, and
(5) Don’t stay awake, if you can take a nap.
Et celui du chien:
if you can’t eat it, and you can’t fuck it; piss on it.
(source: Church of Satan [http://www.churchofsatan.com/Pages/MostPower.html])
# Pouet
Posté par cho7 (site web personnel) . Évalué à 2.
Effectivement je suis resté un peu flou dans ma question initiale... Je pense utiliser ca dans un premier temps dans des petits jeux que j'ai développé à la va-vite, et qui sont relativement simple dans les règles.
Dans ce qui m'a poussé à éclaircir mes idées : je tombais souvent sur des textes parlant de réseaux neuronaux, d'algo génétiques, ou plus récemment (avec le spam) les filtres bayésiens, et j'étais curieux de mettre une image derrière toutes ces appellations qui pour l'instant sont plutôt obscures à mes yeux.
Bref, dans ma grande naïveté je pensais qu'un bouquin super interessant appelé "l'IA pour les nuls" me détaillerait plein de trucs chouettes, avec des cas typiques à modéliser, un peu comme les designs pattern utilisés en POO ^^
De toute évidence ce n'est pas le cas :)
[^] # Re: Pouet
Posté par cho7 (site web personnel) . Évalué à 1.
[^] # Re: Pouet
Posté par Nicolas Boulay (site web personnel) . Évalué à 2.
"La première sécurité est la liberté"
# Définition
Posté par Jiba (site web personnel) . Évalué à 4.
Au final, attends-toi à être déçu :-). La plupart des techniques d'IA sont soit du type "je teste toute les solutions possibles, je garde la meilleure", soit du type "le concepteur a fait un truc astucieux qui colle bien à la situation dans lequel le programme est utilisé, mais sorti de ce contexte le programme n'a aucune intelligence".
[^] # Re: Définition
Posté par Nicolas Boulay (site web personnel) . Évalué à 4.
"La première sécurité est la liberté"
# Il n'y a pas que des algos !
Posté par Guinns . Évalué à 4.
Les méthodes du style "lago génétique" ou "réseau de neuronnes" ont été citées, je vais décrire rapidement la deuxième ...
En fait, on commence par considérer un certains nombre de critères que l'on met en entrée du système. Le choix de ces critères dépend beaucoup du type d'application que l'on veut faire , même s'il ne faut pas hésiter à ajouter des critères aléatoires (l'age du capitaine ?) pour parfois obtenir des résultats étonnants.
Ensuite, ces critères sont donnés en entrée à un système d'équations dont les coefficients sont variables. Ceci constitue en effet un algorithme, mais ce n'est pas cet algorithme qui est intelligent.
Puis on éduque le système, on fourni des tests dont on connaît la réponse, et on donne des bonnes ou mauvaises notes au système (en effet, au début on donne beaucoup de mauvaises notes).
L'algo précédent récupères les notes et modifie les coefficients - en gros, l'algo dit, "je me suis pris une mauvaise note, mais si j'avais le coefficient X un peu plus fort, j'aurais eu une meilleur note" (c'est la que les maths interviennent bcp).
Et au bout de nombreux essais, les notes commencent à être meilleures ... jusqu'à obtenir des taux de succès acceptables.
Pourquoi donc, parler d'intelligence ?
Parce que l'algorithme, le programme, n'ont pas changé entre le début ou toute réponse était mauvaise, et la fin ou toute réponse est bonne.
Ce qui permet d'avoir le bon résultat qui a été appris est stocké en mémoire (cerveau?), et seuls les coefficients finaux sont importants.
Et c'est d'ailleurs à ce stade que l'on peut découvrir que le critère "age du capitaine" intervient finalement de facon non négligeable pour déterminer si un poisson péché est frais ...
Ceci étant dit, les jeux utilisent en effet quasiment jamais de réelle IA, mais des algos prédéfinis, ou alors des recherches exhaustives de solution...
[^] # Re: Il n'y a pas que des algos !
Posté par Thomas Douillard . Évalué à 3.
Ça les rends plus souple et plus adaptables, même ça marche pas bien dans tous les cas. un des problèmes des metaheuristiques, d'autres algo à apprentissage ou plus ou moins, par exemple, c'est qu'ils sont adaptables certes, mais qu'il est parfois difficile de les "tuner" pour obtenir le résultat souhaité.
[^] # Re: Il n'y a pas que des algos !
Posté par Sebbbastien . Évalué à 1.
Par contre les réseaux de neurones sont effectivement performants pour de la classification. La reconnaissance de visages passe assez bien par exemple, mais apprendre quelle réponse donner à un certain groupe de stimuli est aussi de la classification... Un réseau de neurones est aussi capable d'apprendre (à partir d'une base exemples avec solution par exemple) et d'extraire les poids accordé à chaque paramètre de l'équation. Mais il n'y a la dedans aucune représentation, pas d'intelligence.
Une image qui permet assez bien de fixer quelques limites à ce que l'on peut considérer comme intelligent ou pas est la suivante (je sais plu qui l'a dit mais c'est pas de moi) :
Imaginez un ordinateur avec une mémoire infinie (c'est juste un postulat quoi). Bon, si cet ordinateur avait en mémoire toutes les conversations possibles, qui ont étés tenues et qui seront tenues (c'est possible, on a dit infini !).
Si vous commencez une discussion avec lui sur mettons vos vacances au ski, il pourra vous répondre (il aura même une infinité de réponses disponibles ayant comme antécédent votre première phrase). Vous répondrez à sa réponse, puis à son tour il répondra, mais tout cela restera cohérent, c'est juste un re-jeu de conversassions potentielles... donc si il vous réponds comme un humain, c'est qu'il est intelligent.
Pourtant on voit bien qu'en partant du principe qu'il fait que rejouer de l'existant, la présence d'intelligence est plus ou moins douteuse...
(Si quelqu'un voit qui (un chercheur) a pris cet exemple je suis preneur...)
[^] # Re: Il n'y a pas que des algos !
Posté par smc . Évalué à 1.
Il s'agit d'une expérience proposée par Turing pour déterminer un seuil en ce qu'on n'appelait pas encore Intelligence Artificielle, et ce qu'on n'appelle plus Intelligence Artificielle ! C'est-à-dire l'utopie d'une machine intelligente. Mais comme bien d'autres messages l'ont précisé, l'IA c'est désormais plus un ensemble de champs, mais principalement un nom donné à l'étude d'algorithmes non-déterministes et bidouillages associés genre, "quelle fonction heuristique pour ce problème" (donc ici c'est bien l'humain qui réfléchit à l'heuristique, et pas la machine). Il y a bien entendu d'autres approches sous la coupe de "l'intelligence artificielle", y compris celles qui essaient de simuler le cerveau humain au maximum, comme si ça avait un sens.
Mais ce qui est sûr, c'est qu'une machine qui passe le test de Turing n'est pas intelligente pour autant. C'est l'illusion de l'intelligence, et c'est bien entendu différent. Car pour passer le test dans sa version générique, il suffit de duper l'examinateur dans une conversation (un autre humain étant un témoin). Bien que la conversation puisse faire appel à "l'intelligence", il s'agit ici plus de mimer le comportement humain que d'être intelligent... et malheureusement comme on le sait bien, l'un n'implique pas l'autre ;).
[^] # Re: Il n'y a pas que des algos !
Posté par Thomas Douillard . Évalué à 2.
Oui mais non, dans le cas de la classification, il y a une sorte de représentation d'un ensemble de visages, genre il n'a pas vu toutes les photos possibles du visage, mais grâce à sa structure il va pouvoir classer le visage. Il encode d'une certaine manière une représentation possible d'un ensemble de visages connus.
Après, effectivement, le réseau de neurone n'a aucune idée de ce qu'est un visage ou de ce qu'est une personne. Il n'a aucune notion de sémantique.
Est-ce à dire que les machines ne sont pas capables d'intelligence ? Ce n'est pas forcément mon avis. Ça veut simplement dire que le réseau de neurone en lui même n'est pas un être intelligent. Par contre il peut faire parti d'un être plus vaste qui lui, sera peut être intelligent. L'intelligence émergerait alors de cet ensemble plus vaste, d'un être qui serait capable de comprendre et d'agir sur le monde. Voir de se concevoir lui même.
Pour l'exemple du ski: le bot, dans ce cas, n'est pas personnellement impliqué dans l'affaire, il donne juste la sensation de l'intelligence. Serait-ce différent pour un robot suffisament élaboré ayant découvert et appris le ski alors qu'il n'en avait aucune connaissance avant, et qu'il ait appris de lui même les concepts ?
[^] # Re: Il n'y a pas que des algos !
Posté par cho7 (site web personnel) . Évalué à 1.
Je crois que c'est là dessus que j'aimerais orienter mes recherches.
C'est faisable facilement un truc qui avale une image et qui dit si oui ou non un panneau de circulation (à peu près rond et à peu près rouge) se trouve dedans ?
On lui basarderait plein de photos avec des leurres, et le bouzin serait capable à plus ou moins long terme de dire "oui ya un panneau rond et rouge" ou "non ya pas de panneau"
Algo génétique ou réseau de neurones pour ce genre de trucs ? mes premières recherches indiquent plutôt réseaux de neurones.
Sauf qu'un commentaire plus haut disait que c'était fun, mais quand je lis [http://alp.developpez.com/tutoriels/intelligence-artificiell(...)] je trouve ça beaucoup moins fun :(
[^] # Re: Il n'y a pas que des algos !
Posté par Nicolas Boulay (site web personnel) . Évalué à 2.
En général, cela prend un temps cpu monstre (sauf si les images peuvent rester petite) et les seul algo de reconnaissance ("amateur") que j'ai vu fonctionner correctement utilisait des trucs simplismes (seuillage de couleur, etc...) et une maitrise de l'éclairage (pour maitriser la couleur). Le nombre de faux positif est sinon hallucinant.
En général, une reconnaissance de forme "robuste" est un ensemble d'astuce lié à ce que tu veux reconnaitre.
Un algo bourrin souvent vu est un calcul de "distance" entre l'image et une image de référence (genre 4*4 pixel). La référence est baladé sur l'image n*m, cela fait donc en gros (n-4)*(m-4) distance à calculer (addition de différence au plus simple, car une racine carré coute chère). Ensuite, comme l'objet peut tourner, on recommence avec plusieurs version de la référence incliné... C'est du bourrin.
"La première sécurité est la liberté"
[^] # Re: Il n'y a pas que des algos !
Posté par Sebbbastien . Évalué à 0.
C'est pour ça que dire que y'a pas besoin de math pour utiliser c'est prendre un gros raccourci.
99% des utilisateurs d'internet ne comprennent rien aux protocoles de routage et pourtant ils les utilisent au final.
# On t'a reconnu
Posté par kowalsky . Évalué à 10.
qui cherche une IA femelle...
C'est degoutant, il y a des sites pour ça !! :)
==========> [ ]
# SMA
Posté par pemarson . Évalué à 2.
Gerhard Weiss, ed. by, Multiagent Systems, A Modern Approach to Distributed Artificial Intelligence, MIT Press, 1999, ISBN 0-262-23203-0.
# Bien
Posté par cho7 (site web personnel) . Évalué à 1.
J'ai fais une première tentative de codage d'algo génétique en python en m'inspirant d'un truc trouvé en java
Ca marche a peu près correctement, mais c'est terriblement lent (de 2 à 30 secondes pour trouver un nombre à deux chiffres), là où le programme java semble trouver toujours du premier coup.
J'ai une de mes fonctions qui doit plomber tout ca...
Pour ceux que ca interesse : [http://fuck.the.world.free.fr/algo/algogen.py]
Ca se lance comme ca :
python algogen.py [nombre]
et ca donne grosso merdo ça :
cho7@cho7land:~/Desktop$ python algogen.py 6
Le nombre 6 admet par exemple la solution 0+6
cho7@cho7land:~/Desktop$ python algogen.py 6
Le nombre 6 admet par exemple la solution 4+2
cho7@cho7land:~/Desktop$ python algogen.py 6
Le nombre 6 admet par exemple la solution 1+1+4
ps : désolé pour le code trop moche écrit à la sauce python 2.1 et un développeur qui a un peu trop bu de java recemment
[^] # Re: Bien
Posté par benoar . Évalué à 2.
Bravo, j'avoue qu'utiliser des chaînes de caractères de 0 et de 1 pour signifier des bits, c'est assez fort ... vive les programmeurs java et leur lourdeur !
[/humour]
[^] # Re: Bien
Posté par cho7 (site web personnel) . Évalué à 1.
Bof, les chaines c'est plus une méconnaissance de python qu'un héritage de java.
J'utilise beaucoup python, énormément même, mais comme un couteau suisse. Je fais des utilitaires avec, qui répondent à un besoin donné à un instant T, et qui ensuite sont archivés "au cas où". Du coup je ne peaufine pas trop mon code, et je trouve les nouvelles syntaxes pythoniennes certes plus concices, mais moins lisibles àmha pour ma ptite tête
Pour en revenir aux tableaux de bytes, je n'ai pas trop cherché si le "type" existait en python. Je suis parti sur l'idée que je ne savais pas trop s'il fallait mieux utiliser une collection remplie de 0 et 1 avec python utilisant 4 octets pour chaque entier, ou une chaine sachant qu'un caractère est probablement codé sur moins.
Bref, on s'en fiche pas mal, ce n'est pas le débat. Fin du HS donc, merci :)
[/hs]
[^] # Re: Bien
Posté par Octabrain . Évalué à 2.
Le problème, c'est que c'est de l'optimisation pas terrible (qui est un peu pas naturelle, et qui est un peu de l'héritage C) au détriment de trucs qu'on ne voit pas forcément (les comparaisons sur les chaines sont peut-être plus coûteuses). C'est un peu prématuré et sans profiling :)
Ceci dit, je n'ai pas lu ton code, je ne connais rien aux algos génétiques :)
[/hs]
Sinon, il y a ça, mais je ne sais pas du tout ce que ça vaut : http://home.gna.org/oomadness/en/genetic/index.html
[^] # Re: Bien
Posté par smc . Évalué à 3.
# Bien
Posté par cho7 (site web personnel) . Évalué à 2.
Je pense avoir compris la base des réseaux génétiques. On créé une population au hasard, on tire 2 individus, dans 70% des cas environ ils se reproduisent pour donner naissance à deux autres individus, qui 1 fois sur 1000 subissent des mutations génétiques. Ces deux individus sont ensuite réintégrés dans la population initiale (parcontre les deux parents ne le sont pas forcément, d'après ce que j'ai lu, ca doit dépendre des philosophies...) ou bien commence à peupler une nouvelle population, et on boucle autant de fois qu'on peut tirer d'individu dans la population. Ensuite soit on ajoute la nouvelle population à l'ancienne, soit elle la remplace completement (vous conseillez quoi, vous ? car j'avoue que c'est pas très clair tout ça, chacun y va de sa sauce)
De même il faut parfois rajouter des individus au hasard en fin de cycle pour ne pas faire tirer l'algo vers les maximums locaux, à savoir plein d'individus tip-top au niveau de leur fitness score, mais malheureusement serait incapable de résoudre le problème pour autant.
Le choix des deux individus reproducteurs peut varier d'un algo à l'autre. Certains trient leur population et prennent les deux meilleurs à chaque fois, d'autres en prennent deux au hasard, d'autres prennent le meilleur et le font s'accoupler avec tous les autres, mais globalement la technique de la roulette est utilisée, à savoir qu'on tire bien au sort les individus, mais avec tout de même plus de chance de tirer un bon qu'un mauvais.
Ensuite les réseaux neuronaux.
Là je trouve les explications que j'ai trouvé sur internet beaucoup plus élitistes !
En gros, un neurone est une fonction qui attend n entrées. Pour chacune de ces entrée est appliquée un coefficient multiplicateur (ou poids), et quand le neurone fait la somme de toutes ses entrées*poids, il lance sa fonction d'activation. C'est le résultat de cette dernière qui dira si le neurone est actif ou non, sachant que pour un neurone basique, la fonction d'activation est simple : si la somme de mes entrées*poids >0 elle retourne 1, sinon elle retourne 0
On peut être moins binaire en utilisant une fonction sigmoïde, nom barbare signifiante que la représentation graphique de cette fonction ressemble à un S, et qu'en gros selon la somme des entrées*poids, ce qui sort de la fonction d'activation sera proportionnellement proche de -1 ou 1 (par exemple 0.3 ou -0.3)
On peut calibrer les poids à la main pour forcer le résultat attendu en sortie de neurone selon certaines entrées, c'est ce qu'on appelle l'apprentissage supervisé.
On peut également laisser les neurones trouver le poids idéal en leur fournissant un jeu d'essai conséquent comprenant une série de valeur d'entrées et la valeur de sortie attendue.
Ca peut être fait simplement pour deux entrées et deux poids, par rééquilibrage progressif, mais pour plein de neurones avec pleins d'entrées, ca devient long et fastidieux.
Les algorithmes génétiques entrent donc en jeu et permettent de calculer grossomerdo un ensemble de poids que le neurone devra utiliser pour répondre à peu près correctement aux entrées qu'on lui fourni.
Pour se faire, il devra à chaque nouvelle entrée dans les neurones qu'on lui fournit en jeu de test regarder le résultat attendu, tenir compte des autres poids qu'il avait déjà et qui lui permettait de répondre juste, pour élaborer un nouvel ensemble de poids qui répondrait juste à la fois aux anciennes demandes, mais également à cette nouvelle.
L'avantage de l'algorithme génétique, c'est qu'on peut être "tolérant" et lui dire par exemple, si tu t'approche de la solution à 90% ça nous va ! (le réseau donnera donc la bonne réponse 9 fois sur 10)
(ça je suis vraiment pas sûr) Donc si on veut reprendre notre algo génétique de base, l'individu aura de plus en plus de gène au fur et à mesure qu'on l'entrainera, et l'algo moulinera de plus en plus pour trouver un ensemble de poids corrects.
Bon, maintenant c'est l'heure des corrections, n'hésitez pas à me dire ce que je n'ai pas compris :)
[^] # Re: Bien
Posté par Thomas Douillard . Évalué à 4.
Régler les poids à la mano, c'est pas du tout de l'apprentissage, c'est une sorte de tuning manuel. L'apprentissage ça doit être automatique.
Apprendre à partir d'exemples, c'est ce qu'on appelle l'apprentissage supervisé, par opposition à apprentissage non supervisé.
L'apprentissage non supervisé, grosso modo, c'est apprendre quand on a pas d'information préalable sur les données qu'on va traîter.
Si on prends l'exemple de la reconnaissance d'écriture par exemple, l'apprentissage supervisé ce serait:
J'ai une base de donnée de dessin de "R", je les donne à manger à l'algo d'apprentissage en lui disant qu'il doit les classer comme des "R", je recommence avec des "A", ...
Ensuite tu lui file un dessin, et il doit trouver quelle lettre ton dessin représente.
L'apprentissage non supervisé, il ne connait pas les classes au préalable, et il doit trouver tout seul que deux "R" sont dans la même classe, que les "A" se ressemblent tous mais qu'ils sont différents des "R", donc créer deux classes "A" et "R".
Pour finir, j'y connais pas grand chose en réseau de neurone, mais utiliser des algo génétiques pour fixer les poids d'un réseau neuronal, ça a l'air plutôt avancé et de ma petite fenêtre j'ai pas vu ça dans les algo "classique" d'apprentissage pour un réseau de neurone ...
[^] # Re: Bien
Posté par cho7 (site web personnel) . Évalué à 2.
Il me reste beaucoup de zones d'ombre; notamment sur la quantité de neurone/synapses_par_neurones/couches qu'un réseau doit avoir pour un problème donné.
Par exemple, je souhaite mettre en place un réseau neuronal super avancé à qui on donnerait un triplet de chiffre.
Le but est de lui apprendre à dire Oui si le plus petit des 3 chiffres se trouve à gauche du triplet ou à droite. Et de répondre Non s'il se trouve au milieu.
Vous le modéliserez comment ce problème ?
[^] # Re: Bien
Posté par benoar . Évalué à 2.
Après, la quantité de neurones, bah ça dépend du nombre d'entrées et de sorties que tu veux.
Et pour les nombre de synapses et de liaisons, il doit y avoir des études un peu partout sur les différentes topologies.
En tous cas, pour tout ce qui est "tunage" de ce genre de paramètre, je pense que le mieux pour commencer est d'essayer avec différentes valeurs, et de voir le résultat. Tu trouveras plein d'avis différents sur la question, si tu veux pousser un peu plus, il doit y avoir pas mal de publi dessus. En fait, il n'y a pas (encore ?) de règles sur tout dans ce domaine, alors oui c'est un peu vague au début, tu sembles paumé, mais c'est comme ça que ça marche !
[^] # Re: Bien
Posté par Guinns . Évalué à 1.
Non, le nombre de gènes est immuable (chaque gêne correspond à un élément de ton algo de réponse, il est donc figé), par contre la combinaisons des gènes s'améliore de génération en génération par rapport à la solution cherchée.
'algo moulinera de plus en plus pour trouver un ensemble de poids corrects.
Non, le réseau de neurones ne retient pas l'ensemble des scénarios déjà joués (pas d'historique), chaque nouveau réajustement se fait en fonction des poids en place et du jeu en cours. On modifie _légèrement_ les poids pour les faire tendre vers la solution (ce qui fait qu'on ne change pas complètement notre comportement en un coup, et donc que le test précédent doit toujours être valable).
Mais il est possible qu'un cas de test OK au début devienne KO plus tard ...
Au bout du compte (en production) soit on fige les poids aux valeurs qui nous conviennent le mieux (95% succès ?), soit notre système continue d'apprendre (idéal dans un milieu évolutif) ...
Globalement, les deux systèmes fonctionnent sur le même principe, ce qui change, c'est la méthode de réajustement des variables.
# IA mauvais souvenir
Posté par Mes Zigues . Évalué à 1.
[^] # Re: IA mauvais souvenir
Posté par 2PetitsVerres . Évalué à 5.
Tous les nombres premiers sont impairs, sauf un. Tous les nombres premiers sont impairs, sauf deux.
Suivre le flux des commentaires
Note : les commentaires appartiennent à celles et ceux qui les ont postés. Nous n’en sommes pas responsables.