CNTK - Mesure des performances

Ce chapitre explique comment mesurer les performances du modèle dans CNKT.

Stratégie pour valider les performances du modèle

Après avoir construit un modèle ML, nous avions l'habitude de le former à l'aide d'un ensemble d'échantillons de données. Grâce à cette formation, notre modèle ML apprend et dérive quelques règles générales. Les performances du modèle ML sont importantes lorsque nous introduisons de nouveaux échantillons, c'est-à-dire des échantillons différents de ceux fournis au moment de la formation, au modèle. Le modèle se comporte différemment dans ce cas. Il peut être pire de faire une bonne prédiction sur ces nouveaux échantillons.

Mais le modèle doit également bien fonctionner pour les nouveaux échantillons, car dans l'environnement de production, nous obtiendrons une entrée différente de celle utilisée pour les échantillons de données à des fins de formation. C'est la raison pour laquelle nous devrions valider le modèle ML en utilisant un ensemble d'échantillons différents des échantillons que nous avons utilisés à des fins de formation. Ici, nous allons discuter de deux techniques différentes pour créer un jeu de données pour valider un NN.

Ensemble de données hold-out

C'est l'une des méthodes les plus simples pour créer un ensemble de données pour valider un NN. Comme son nom l'indique, dans cette méthode, nous retiendrons un ensemble d'échantillons de la formation (disons 20%) et l'utiliserons pour tester les performances de notre modèle ML. Le diagramme suivant montre le rapport entre les échantillons de formation et de validation -

Le modèle de jeu de données hold-out garantit que nous avons suffisamment de données pour entraîner notre modèle ML et en même temps, nous aurons un nombre raisonnable d'échantillons pour obtenir une bonne mesure des performances du modèle.

Afin de les inclure dans l'ensemble d'apprentissage et l'ensemble de test, il est recommandé de choisir des échantillons aléatoires dans l'ensemble de données principal. Il garantit une répartition uniforme entre la formation et l'ensemble de test.

Voici un exemple dans lequel nous produisons notre propre jeu de données d'exclusion en utilisant train_test_split fonction de la scikit-learn bibliothèque.

Exemple

from sklearn.datasets import load_iris
iris = load_iris()
X = iris.data
y = iris.target
from sklearn.model_selection import train_test_split
X_train, X_test, y_train, y_test = train_test_split(X, y, test_size=0.2, random_state=1)
# Here above test_size = 0.2 represents that we provided 20% of the data as test data.
from sklearn.neighbors import KNeighborsClassifier
from sklearn import metrics
classifier_knn = KNeighborsClassifier(n_neighbors=3)
classifier_knn.fit(X_train, y_train)
y_pred = classifier_knn.predict(X_test)
# Providing sample data and the model will make prediction out of that data
sample = [[5, 5, 3, 2], [2, 4, 3, 5]]
preds = classifier_knn.predict(sample)
pred_species = [iris.target_names[p] for p in preds] print("Predictions:", pred_species)

Production

Predictions: ['versicolor', 'virginica']

Lors de l'utilisation de CNTK, nous devons randomiser l'ordre de notre ensemble de données à chaque fois que nous entraînons notre modèle car -

  • Les algorithmes d'apprentissage en profondeur sont fortement influencés par les générateurs de nombres aléatoires.

  • L'ordre dans lequel nous fournissons les échantillons à NN pendant l'entraînement affecte considérablement ses performances.

Le principal inconvénient de l'utilisation de la technique des jeux de données d'exclusion est qu'elle n'est pas fiable car parfois nous obtenons de très bons résultats, mais parfois, nous obtenons de mauvais résultats.

Validation croisée du pli K

Pour rendre notre modèle ML plus fiable, il existe une technique appelée validation croisée K-fold. Dans la nature, la technique de validation croisée du pli K est la même que la technique précédente, mais elle la répète plusieurs fois, généralement environ 5 à 10 fois. Le diagramme suivant représente son concept -

Fonctionnement de la validation croisée du pli K

Le fonctionnement de la validation croisée du pli K peut être compris à l'aide des étapes suivantes -

Step 1- Comme dans la technique de jeu de données Hand-out, dans la technique de validation croisée K-fold, nous devons d'abord diviser le jeu de données en un ensemble de formation et de test. Idéalement, le ratio est de 80 à 20, soit 80% de l'ensemble d'apprentissage et 20% de l'ensemble de test.

Step 2 - Ensuite, nous devons former notre modèle à l'aide de l'ensemble d'apprentissage.

Step 3−Enfin, nous utiliserons l'ensemble de test pour mesurer les performances de notre modèle. La seule différence entre la technique de jeu de données Hold-out et la technique de validation k-cross est que le processus ci-dessus est répété généralement 5 à 10 fois et à la fin, la moyenne est calculée sur toutes les mesures de performance. Cette moyenne constituerait les indicateurs de performance finaux.

Voyons un exemple avec un petit jeu de données -

Exemple

from numpy import array
from sklearn.model_selection import KFold
data = array([0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7, 0.8, 0.9, 1.0])
kfold = KFold(5, True, 1)
for train, test in kfold.split(data):
   print('train: %s, test: %s' % (data[train],(data[test]))

Production

train: [0.1 0.2 0.4 0.5 0.6 0.7 0.8 0.9], test: [0.3 1. ]
train: [0.1 0.2 0.3 0.4 0.6 0.8 0.9 1. ], test: [0.5 0.7]
train: [0.2 0.3 0.5 0.6 0.7 0.8 0.9 1. ], test: [0.1 0.4]
train: [0.1 0.3 0.4 0.5 0.6 0.7 0.9 1. ], test: [0.2 0.8]
train: [0.1 0.2 0.3 0.4 0.5 0.7 0.8 1. ], test: [0.6 0.9]

Comme nous le voyons, en raison de l'utilisation d'un scénario d'entraînement et de test plus réaliste, la technique de validation croisée k-fold nous donne une mesure des performances beaucoup plus stable, mais, en revanche, cela prend beaucoup de temps lors de la validation des modèles d'apprentissage en profondeur.

CNTK ne prend pas en charge la validation k-cross, nous devons donc écrire notre propre script pour le faire.

Détecter le sous-ajustement et le sur-ajustement

Que nous utilisions l'ensemble de données Hand-out ou la technique de validation croisée de K-fold, nous découvrirons que la sortie des métriques sera différente pour l'ensemble de données utilisé pour la formation et l'ensemble de données utilisé pour la validation.

Détecter le surajustement

Le phénomène appelé surajustement est une situation dans laquelle notre modèle ML modélise les données d'entraînement de manière exceptionnelle, mais ne parvient pas à bien fonctionner sur les données de test, c'est-à-dire n'a pas été en mesure de prédire les données de test.

Cela se produit lorsqu'un modèle d'apprentissage automatique apprend un modèle et un bruit spécifiques à partir des données d'apprentissage à un point tel que cela a un impact négatif sur la capacité de ce modèle à généraliser des données d'apprentissage à des données nouvelles, c'est-à-dire invisibles. Ici, le bruit est l'information non pertinente ou le caractère aléatoire d'un ensemble de données.

Voici les deux façons à l'aide desquelles nous pouvons détecter le temps que notre modèle est sur-ajusté ou non -

  • Le modèle overfit fonctionnera bien sur les mêmes échantillons que nous avons utilisés pour l'entraînement, mais il fonctionnera très mal sur les nouveaux échantillons, c'est-à-dire des échantillons différents de l'entraînement.

  • Le modèle est surajusté lors de la validation si la métrique de l'ensemble de test est inférieure à la même métrique que nous utilisons sur notre ensemble d'entraînement.

Détecter le sous-ajustement

Une autre situation qui peut survenir dans notre ML est le sous-ajustement. Il s'agit d'une situation où notre modèle ML n'a pas bien modélisé les données d'entraînement et ne parvient pas à prédire la sortie utile. Lorsque nous commencerons à nous entraîner à la première époque, notre modèle sera sous-adapté, mais deviendra moins sous-adapté au fur et à mesure que la formation progressera.

L'un des moyens de détecter si notre modèle est sous-adapté ou non consiste à examiner les métriques pour l'ensemble d'entraînement et l'ensemble de test. Notre modèle sera sous-adapté si la métrique de l'ensemble de test est supérieure à la métrique de l'ensemble d'apprentissage.