Formation TensorFlow : Qu’est-ce que le One-hot encoding

    Formation TensorFlow : Qu’est-ce que le One-hot encoding
    Actu IA

    Qu’est-ce que le One-hot encoding ? Cette nouvelle vidéo de la formation à TensorFlow s’intéresse à un concept important permettant d’exploiter des données représentant des classes distinctes.  En effet, comment faire en sorte qu’en encodant la lettre A sous forme numérique,celle-ci ne soit pas considérée comme 20 fois inférieure à la 20ème lettre de l’alphabet, la lettre T ? Encoder ces lettres en fonction de leur position dans l’alphabet serait réellement problématique, sachant que leurs valeurs sont destinées à être multipliées par le poids en entrée des neurones.

    Le One-hot encoding permet de traiter les données sous formes vectorielle et de répondre à cette problématique. En utilisant cette fonctionnalité, un vecteur de valeurs binaires de la dimension : nombre de classes X 1 est automatiquement créé et utilisé.

    Retrourner au sommaire de la formation à TensorFlow 2.0

     

     

    Transcription de la vidéo :

    Bienvenue à tous dans cette série de vidéos consacrées à Tensorflow 2.0.
    Dans la dernière vidéo, on avait vu comment on va pouvoir générer des batchs. On a vu sur quel dataset on allait travailler pour générer des poèmes de Victor Hugo. Dans cette vidéo, on va voir un concept important, qui est le One Hot Encoding. Ces lettres que l’on va générer, ce ne sont pas réellement des lettres que l’on va traiter mais des chiffres. On va considérer qu’on a un vocabulaire assez réduit, constitué de seulement 4 caractères : L , U, I et ESPACE. Le nombre de lettres possibles est réduit.. On a donc seulement une séquence de 1, 2 ,3 ,4. La target du 1 est 2. La target du 2 est 3, la target du 3 est 4. Quand on repense aux premières vidéos que j’ai faites sur les réseaux de neurones, on imagine qu’on a seulement une seule entrée et que la valeur de cette input est un nombre : 1, 2, 3 ou 4. Il faut imaginer que cet input va être multiplié par des poids et avoir une importance numérique dans le calculs. Une valeur qui a 4 a plus d’importance qu’une valeur de 1. Quand le modèle va s’entraîner, il va modifier les poids du réseau pour que ces poids prêtent plus d’importance à certaines features et moins à d’autres features. Pour cela, lors de l’entrainement, certains poids vont s’augmenter ou diminuer. Mais puisque nos lettres en entrées sont symbolisées par des valeurs numériques, le caractère représenté par le 4 aura par défaut plus d’importance que celle symbolisée par le 1. Si nous avons 34 caractères, le caractère 34 sera 34 fois plus important que le 1er.

    La question que l’on peut se poser est de savoir s’il y a une raison pour qu’un caractère soit 34 fois important qu’un autre par défaut et la réponse est bien sûr non. Pour limiter ça, on va non pas représenter nos nombres sous forme de nombre mais sous forme vectorielle. On va représenter chaque caractère sous forme de vecteur, c’est ce que l’on appelle le One Hot encoding. Ainsi, le 1er caractère sera représenté sous la forme d’un vecteur [1,0,0,0] , le 2ème sous la forme [0,1,0,0] , le 3ème sous la forme [0,0,1,0] et le 4ème sous la forme [0,0,0,1].

    Cette manière de représenter des informations quand on a des classes permet d’éviter d’assigner une valeur supérieure à une classe qu’une autre. C’est cela, que l’on appelle le one hot encoding.

    Si nous avons 34 caractères nous aurons donc des vecteurs de 34 valeurs, dont chaque exemple contiendra un seule 1 et les autres éléments seront à zéro.

    J’ai donc créé un layer pour vous donner un exemple de comment on pourrait utiliser un layer dans un projet de ce type. On crée un layer personnalisé, dérivé de la classe layer, et l’on prend en paramètre la profondeur du layer (34 dans notre exemple). On utilise une fonction bas niveau de Tensorflow : tf.one_hot , qui permet automatiquement de convertir notre valeur en vecteur one hot encoding à partir d’une valeur et une profondeur. On crée ensuite un modèle très rapide qui utilise le layer que l’on vient de créer. On l’initialise avec la longueur de notre layer puis on lui passe nos valeurs.

    Je génère un batch aléatoire (vu dans la dernière vidé) avec des séquences de 50 et batchs de 32. On initialise le modèle puis l’on fait une prédiction. On récupère ensuite le premier batch et la première prédiction de la séquence. On constate que la forme de la sortie est contient 32 éléments, où chaque élément est un élément de 33 valeurs. Nous pouvons également voir la représentation One hot encoding de notre troisème caractère en faisant un print de batch_inputs[0][0] et output[0]

    Le One hot encoding n’est pas utilisé que dans les réseaux de neurones récurrents, mais également dans les réseaux de neurones classiques dès lors qu’il n’y a aucune raison qu’une classe soit plus importante qu’une autre.

    PARTAGER