machine learning pour tous

43
MACHINE LEARNING POUR TOUS L'éducation a des racines amères, mais ses fruits sont doux Forum AFUP, Paris, 2015

Upload: damien-seguy-

Post on 13-Jan-2017

1.457 views

Category:

Technology


4 download

TRANSCRIPT

Page 1: Machine learning pour tous

MACHINE LEARNING POUR TOUSL'éducation a des racines amères, mais ses fruits sont doux

Forum AFUP, Paris, 2015

Page 2: Machine learning pour tous

AGENDA

Comment enseigner à un ordinateur

Application à la recherche de code dans les commentaires

Des apprentissages complexes

Page 3: Machine learning pour tous

INTERVENANT

Damien Seguy

Directeur technique à Exakat

Services d'analyse de code

Page 4: Machine learning pour tous

APPLICATIONS

Detection de fraude et estimation du risque

Traduction automatique ou la transcription automatique

Reconnaissance de caractères ou de visages

Les diagnostics médicaux

La reconnaissance de bon code PHP

Page 5: Machine learning pour tous

MACHINE LEARNING

Machine : l'ordinateur

Learning : apprentissage

Il se bâtit un modèle tout seul : phase d'entrainement

Il propose alors des prédictions : phase d'utilisation

Page 6: Machine learning pour tous

APPRENTISSAGE SURPERVISÉ

DonnéesHistoriques Apprentissage

ModèleDonnées réelles

Résultat

Page 7: Machine learning pour tous

APPLICATION PRATIQUE

Détecter du code dans les commentaires

Un problème classique

Un bon problème de machine learning

Complexe, pas de solution simple

Permet de faire des tests avec beaucoup de données

Page 8: Machine learning pour tous

THE FANN EXTENSION

ext/fann (https://pecl.php.net/package/fann)

Fast Artificial Neural Network

http://leenissen.dk/fann/wp/

Réseaux Neuronaux en PHP

Page 9: Machine learning pour tous

RÉSEAUX NEURONAUX

Imitation de la nature

Couche d'entrée

Couche de sortie

Neurones intermédiaires et couches de neurones

Page 10: Machine learning pour tous

RÉSEAUX NEURONAUX

Imitation de la nature

Couche d'entrée

Couche de sortie

Neurones intermédiaires et couches de neurones

Page 11: Machine learning pour tous

INITIALISATION<?php

$num_layers  = 1; $num_input  = 5; $num_neurons_hidden = 3; $num_output  = 1; $ann = fann_create_standard($num_layers, $num_input,  $num_neurons_hidden, $num_output);

// fonction d'activation fann_set_activation_function_hidden($ann, 

FANN_SIGMOID_SYMMETRIC); fann_set_activation_function_output($ann,  FANN_SIGMOID_SYMMETRIC);

Page 12: Machine learning pour tous

EXPERTISE// Test if the if is in a compressed format

// none need yet

// icon

// There is a parser specified in `Parser::$KEYWORD_PARSERS`

// Show generated config file in a <textarea>

// numGlyphs + 1

// $a && $b and multidimensional

// $result should exist, regardless of $_message

// if(ob_get_clean()){

//$annots .= ' /StructParent ';

// $cfg['Servers'][$i]['controlpass'] = 'pmapass';

Page 13: Machine learning pour tous

VECTEUR D'ENTRÉE

'length' : taille du commentaire

'countDollar' : présence du $

'countEqual' : présence du =

'countObjectOperator' présence du ->

'countSemicolon' : présence de ;

Page 14: Machine learning pour tous

DONNÉES D'ENTRÉE46 5 1 825 0 0 0 1 0 37 2 0 0 0 0 55 2 2 0 1 1 61 2 1 3 1 1 ...

 * This file is part of Exakat.  *  * Exakat is free software: you can redistribute it and/or modify  * it under the terms of the GNU Affero General Public License as published by  * the Free Software Foundation, either version 3 of the License, or  * (at your option) any later version.  *  * Exakat is distributed in the hope that it will be useful,  * but WITHOUT ANY WARRANTY; without even the implied warranty of  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the  * GNU Affero General Public License for more details.  *  * You should have received a copy of the GNU Affero General Public License  * along with Exakat.  If not, see <http://www.gnu.org/licenses/>.  *  * The latest code can be found at <http://exakat.io/>.  * */

// $x[3] or $x[] and multidimensional

//if ($round == 3) { die('Round '.$round);}

//$this->errors[] = $this->language->get('error_permission');

Page 15: Machine learning pour tous

APPRENTISSAGE$max_epochs  = 500000; $desired_error  = 0.001;

// apprentissage lui-même if (fann_train_on_file($ann,  'leçon.data',  $max_epochs,  $epochs_between_reports,  $desired_error)) {        fann_save($ann, 'appris.out'); }fann_destroy($ann); ?>

Page 16: Machine learning pour tous
Page 17: Machine learning pour tous
Page 18: Machine learning pour tous
Page 19: Machine learning pour tous

APPRENTISSAGE

47 leçons

5 caractéristiques

3 neurones

Durée d'exécution : 5,711 s

Page 20: Machine learning pour tous

EXPLOITATION

DonnéesHistoriques Apprentissage

ModèleDonnées réelles

Résultat

Page 21: Machine learning pour tous

EXPLOITATION<?php 

$ann = fann_create_from_file('appris.out'); 

$commentaire = "//$gvars = $this->getGraphicVars();";

$input  = makeVector($commentaire); $resultats = fann_run($ann, $input); 

if ($resultats[0] > 0.8) {       print "\"$commentaire\" : -> $resultats[0] %\n";  } 

?>

Page 22: Machine learning pour tous

DONNÉES RÉELLES

Testé sur 14093 cas

Durée d'exécution 367.01ms

Trouvé 665 cas (5%)

Page 23: Machine learning pour tous

99.999893 // $cfg['Servers'][$i]['controlhost'] = '';    

99.999928 //$_SESSION['Import_message'] = $message->getDisplay();    

/* 99.999928 if (defined('SESSIONUPLOAD')) {     // write sessionupload back into the loaded PMA session

    $sessionupload = unserialize(SESSIONUPLOAD);     foreach ($sessionupload as $key => $value) {         $_SESSION[$key] = $value;     }

    // remove session upload data that are not set anymore     foreach ($_SESSION as $key => $value) {         if (mb_substr($key, 0, mb_strlen(UPLOAD_PREFIX))             == UPLOAD_PREFIX             && ! isset($sessionupload[$key])         ) {             unset($_SESSION[$key]);         }     } }

Page 24: Machine learning pour tous

98.780382 //LEAD_OFFSET = (0xD800 - (0x10000 >> 10)) = 55232    

99.361396 // We have server(s) => apply default configuration      98.383027 // Duration = as configured    

99.999928 // original -> translation mapping    

97.590065 // = (   59 x 84   ) mm  = (  2.32 x 3.31  ) in    

Page 25: Machine learning pour tous

Vrai positif Faux positif

Vrai négatif Faux négatif

Rapporté par le RN

Objectif

Page 26: Machine learning pour tous

Vrai positif Faux positif

Vrai négatif Faux négatif

Rapporté par le RN

Objectif

// $cfg['Servers'][$i]['table_coords'] = 'pma__table_coords';    

//(isset($attribs['height'])?$attribs['height']: 1);    

// if ($key != null) did not work for index "0"    

// the PASSWORD() function    

99.999923

73.295981

99.999851

2.104115

Page 27: Machine learning pour tous

BILAN

665 code trouvés

72% de faux positifs

mais après nettoyage facile, il reste 23% de faux positif

Analyse de 14k commentaires en 367 ms// = (   59 x 84   ) mm  = (  2.32 x 3.31  ) in    

Page 28: Machine learning pour tous

RETROACTION

Amélioration de la base d'entrainement

Ajout/retraits de caractéristiques

Changement de configuration du RN

Nouvel apprentissage

Nouvelle validation

Données réelles

DonnéesHistoriques

Apprentissage

Modèle Résultat

Rétraction

Page 29: Machine learning pour tous

AMÉLIORATION DE LA BASE

Augmentation de la taille

Variété des situations

Inclusion des cas particuliers rencontrés

Accumulation d'expérience

Page 30: Machine learning pour tous

REVUE DES CARACTÉRISTIQUES

Ajouts de nouvelles caractéristiques

Retrait des caractéristiques moins pertinentes

Page 31: Machine learning pour tous

CONFIGURATION DU RN

Vecteurs d'entrée

Couches intermédiaires et neurones cachés

Fonction d'activation

Vecteur de sortie

Page 32: Machine learning pour tous

PILOTAGE AUTOMATIQUE

Tester sur différentes configurations

Identifier les résultats

Idéalement, retirer les faux positifs

RésultatsNombre de couches

Nombre de neurones

Page 33: Machine learning pour tous

SYNOPSIS

Selection d'une base de données d'apprentissage

Configuration du RN

Apprentissage

Validation sur des données de tests

Retroaction

Page 34: Machine learning pour tous

AUTRES TECHNIQUES

Réseaux Bayésiens

Algorithmes génétiques

Apprentissage par renforcement

Page 35: Machine learning pour tous

APPRENTISSAGE PAR RENFORCEMENT

Logiciel

Monde réel

RécompenseActionRéaction

Page 36: Machine learning pour tous

FILTRES BAYESIENS

Page 37: Machine learning pour tous

ALGORITHMES GÉNÉTIQUES

Population

Population

Selection

Reproduction

PopulationVariations

Page 38: Machine learning pour tous

QUELQUES OUTILS

PHP ext/fann

Langage R

https://github.com/kachkaev/php-r

Scikit-learn

https://github.com/scikit-learn/scikit-learn

Mahout

https://mahout.apache.org/

Page 39: Machine learning pour tous

MERCI@exakat

http://joind.in/talk/view/15265

Page 40: Machine learning pour tous
Page 41: Machine learning pour tous

AUTRES CONFIGURATIONS

Fonction d'activation

FANN_SIGMOID_SYMMETRIC

FANN_LINEAR

FANN_THRESHOLD

FANN_SIN_SYMMETRIC

Page 42: Machine learning pour tous

Linéaire Seuil

Tangeante

Gaussienne Quadratique

Sigmoide

Page 43: Machine learning pour tous

QUELLES APPLICATIONS?

Non-déterministe

Elimination de tout ce qui est systématique à trouver

Accès à l'expertise et aux vecteurs de caractéristiques

Couche finale après les résultats

Classification, priorisation, approximation rapide