machine learning pour tous

Post on 13-Jan-2017

1.457 Views

Category:

Technology

4 Downloads

Preview:

Click to see full reader

TRANSCRIPT

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

Forum AFUP, Paris, 2015

AGENDA

Comment enseigner à un ordinateur

Application à la recherche de code dans les commentaires

Des apprentissages complexes

INTERVENANT

Damien Seguy

Directeur technique à Exakat

Services d'analyse de code

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

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

APPRENTISSAGE SURPERVISÉ

DonnéesHistoriques Apprentissage

ModèleDonnées réelles

Résultat

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

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

RÉSEAUX NEURONAUX

Imitation de la nature

Couche d'entrée

Couche de sortie

Neurones intermédiaires et couches de neurones

RÉSEAUX NEURONAUX

Imitation de la nature

Couche d'entrée

Couche de sortie

Neurones intermédiaires et couches de neurones

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);

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';

VECTEUR D'ENTRÉE

'length' : taille du commentaire

'countDollar' : présence du $

'countEqual' : présence du =

'countObjectOperator' présence du ->

'countSemicolon' : présence de ;

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');

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); ?>

APPRENTISSAGE

47 leçons

5 caractéristiques

3 neurones

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

EXPLOITATION

DonnéesHistoriques Apprentissage

ModèleDonnées réelles

Résultat

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";  } 

?>

DONNÉES RÉELLES

Testé sur 14093 cas

Durée d'exécution 367.01ms

Trouvé 665 cas (5%)

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]);         }     } }

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    

Vrai positif Faux positif

Vrai négatif Faux négatif

Rapporté par le RN

Objectif

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

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    

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

AMÉLIORATION DE LA BASE

Augmentation de la taille

Variété des situations

Inclusion des cas particuliers rencontrés

Accumulation d'expérience

REVUE DES CARACTÉRISTIQUES

Ajouts de nouvelles caractéristiques

Retrait des caractéristiques moins pertinentes

CONFIGURATION DU RN

Vecteurs d'entrée

Couches intermédiaires et neurones cachés

Fonction d'activation

Vecteur de sortie

PILOTAGE AUTOMATIQUE

Tester sur différentes configurations

Identifier les résultats

Idéalement, retirer les faux positifs

RésultatsNombre de couches

Nombre de neurones

SYNOPSIS

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

Configuration du RN

Apprentissage

Validation sur des données de tests

Retroaction

AUTRES TECHNIQUES

Réseaux Bayésiens

Algorithmes génétiques

Apprentissage par renforcement

APPRENTISSAGE PAR RENFORCEMENT

Logiciel

Monde réel

RécompenseActionRéaction

FILTRES BAYESIENS

ALGORITHMES GÉNÉTIQUES

Population

Population

Selection

Reproduction

PopulationVariations

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/

MERCI@exakat

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

AUTRES CONFIGURATIONS

Fonction d'activation

FANN_SIGMOID_SYMMETRIC

FANN_LINEAR

FANN_THRESHOLD

FANN_SIN_SYMMETRIC

Linéaire Seuil

Tangeante

Gaussienne Quadratique

Sigmoide

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

top related