【Deep Learning OCR Series·7】Fonction de perte CTC et techniques d’entraînement
📅
Heure de publication : 2025-08-19
👁️
Lecture :1999
⏱️
Environ 21 minutes (4005 mots)
📁
Catégorie : Guides avancés
Le principe, la mise en œuvre et les techniques d’entraînement des fonctions de perte CTC, ainsi que les techniques de base pour résoudre les problèmes d’alignement des séquences. Plongez dans les algorithmes avant-arrière, les stratégies de décodage et les méthodes d’optimisation.
## Introduction
La classification temporelle connexionniste (CTC) représente une percée importante dans la modélisation des séquences par apprentissage profond, surtout dans le domaine de la ROC. Le CTC résout le problème fondamental du décalage entre la longueur de la séquence d’entrée et celle de sortie, permettant l’apprentissage de séquences de bout en bout. Cet article explorera les principes mathématiques, l’implémentation des algorithmes et les techniques d’optimisation d’entraînement de la CTC.
## Concepts de base du CTC
### Problèmes d’alignement des séquences
Dans les tâches OCR, nous faisons face aux défis suivants :
**Décalage de longueur** : La longueur de la séquence de caractéristiques de l’image d’entrée est différente de la longueur de la séquence de texte de sortie. Par exemple, un mot contenant 3 caractères peut correspondre à une séquence de caractéristiques de 100 pas de temps.
**Position incertaine** : La position exacte de chaque caractère dans l’image est inconnue. Les méthodes traditionnelles exigent une segmentation précise des caractères, ce qui est difficile dans les applications pratiques.
**Difficulté dans la segmentation des caractères** : Le texte écrit continuellement, le texte manuscrit ou les polices artistiques ont du mal à se diviser précisément en caractères individuels.
### Solution du CTC
Le CTC résout les problèmes d’alignement des séquences de manière innovante :
Présentation des marqueurs vierges : Utilisez des marqueurs vierges spéciaux pour gérer l’alignement. Les balises vides ne correspondent à aucun caractère de sortie et servent à séparer les caractères dupliqués des séquences de remplissage.
Probabilité de chemin : Calcule la probabilité de tous les chemins d’alignement possibles. Chaque chemin représente une correspondance possible entre les étapes du caractère et du temps.
**Planification dynamique** : Calculer efficacement les probabilités de chemin à l’aide d’algorithmes avant-arrière, en évitant d’énumérer tous les chemins possibles.
## Principes mathématiques CTC
### Définitions de base
Étant donné la séquence d’entrée X = (x₁, x₂, ..., xt) et la séquence cible Y = (y₁, y₂, ..., yu), où T ≥ U.
Ensemble de balises : L = {1, 2, ..., K}, contenant K catégories de caractères.
**Collection étendue de tags** : L_ext = L ∪ {blank}, contenant des tags vides.
**Chemin d’alignement** : Une suite de longueur T π = (π₁, π₂, ..., πt), où πt ∈ L_ext.
### Cartographie des chemins vers les balises
CTC définit une fonction de mappage B qui convertit le chemin d’alignement en une séquence d’étiquettes de sortie :
1. Enlever tous les marqueurs vierges
2. Fusionner les caractères dupliqués consécutifs
**Exemple cartographique** :
- π = (a, a, blanc, b, blanc, b, b) → B(π) = (a, b, b)
- π = (blanc, c, c, a, blanc, t) → B(π) = (c, a, t)
### Fonction de perte CTC
La fonction de perte CTC est définie comme le logarithme négatif de la somme de toutes les probabilités de chemin mappées à la séquence cible Y :
L_CTC = -log P(Y| X) = -log Σ_{π∈B⁻¹(Y)} P(π| X)
où B⁻¹(Y) est l’ensemble de tous les chemins mappés à Y.
Probabilité de chemin : En supposant que les prédictions de chaque pas de temps sont indépendantes, la probabilité du chemin est :
P(π| X) = ∏t yt^{πt}
où yt^{πt} est la probabilité que l’étape de temps t prédise l’étiquette πt.
## Algorithme Avant-Arrière
### Algorithme en avant
L’algorithme en avant calcule la probabilité de chemin du début de la séquence jusqu’à la position actuelle.
**Séquence d’étiquettes étendue** : Pour faciliter le calcul, développez la séquence cible Y à Y_ext, en insérant des étiquettes vides avant et après chaque caractère.
**Initialisation** :
- α₁(1) = y₁^{blanc} (la première position est vide)
- α₁(2) = y₁^{y₁} (la première position est le premier caractère)
- α₁(s) = 0 pour les autres emplacements
**Formule récursive** :
Pour t > 1 et les positions s :
- Si Y_ext[s] est vide ou identique au caractère précédent :
α_t(s) = (α_{t-1}(s) + α_{t-1}(s-1)) × y_t^{Y_ext[s]}
- Sinon :
α_t(s) = (α_{t-1}(s) + α_{t-1}(s-1) + α_{t-1}(s-2)) × y_t^{Y_ext[s]}
### Algorithme à l’envers
L’algorithme rétrograde calcule la probabilité de chemin de la position actuelle jusqu’à la fin de la séquence.
**Initialisation** :
- β_T(| Y_ext|) = 1
- β_T(| Y_ext|-1) = 1 (si la dernière étiquette n’est pas vide)
- β_T(s) = 0 pour les autres emplacements
**Formule récursive** :
Pour t < T et les positions s :
- Si Y_ext [s+1] est vide ou le même que le caractère actuel :
β_t(s) = (β_{t+1}(s) + β_{t+1}(s+1)) × y_{t+1}^{Y_ext[s+1]}
- Sinon :
β_t(s) = (β_{t+1}(s) + β_{t+1}(s+1) + β_{t+1}(s+2)) × y_{t+1}^{Y_ext[s+1]}
### Calcul du gradient
Probabilité totale : P (Y| X) = α_T(| Y_ext|) + α_T(| Y_ext|-1)
**Gradient de probabilité de l’étiquette** :
∂(-lin P(Y| X))/∂y_k^t = -1/P(Y| X) × Σ_{s :Y_ext[s]=k} (α_t(s) × β_t(s))/y_k^t
## Stratégie de décodage CTC
### Décodage avide
Greedy décode l’étiquette avec la probabilité la plus élevée à chaque pas de temps :
π_t = argmax_k y_t^k
Ensuite, appliquez la correspondance B pour obtenir la séquence finale.
**Avantages** : Calculs faciles et rapidité
**Inconvénients** : La solution optimale globale peut ne pas être obtenue
### Décodage par recherche par faisceau
La recherche par faisceau maintient plusieurs chemins candidats, élargissant les chemins les plus prometteurs à chaque étape temporelle.
**Étapes de l’algorithme** :
1. Initialisation : La collection candidate contient des chemins vides
2. Pour chaque pas de temps :
- Étendre tous les chemins candidats
- Garder le K-chemin avec la probabilité la plus élevée
3. Retourner le chemin complet avec la probabilité la plus élevée
**Réglage des paramètres** :
- Largeur de faisceau K : équilibre la complexité de calcul avec la qualité de décodage
- Pénalité de longueur : Éviter de favoriser les séquences courtes
### Recherche par fibré de préfixes
La recherche par fibré de préfixe considère la probabilité d’un chemin pour éviter le double comptage des chemins avec le même préfixe.
**Idée centrale** : Fusionner les chemins avec le même préfixe, et ne garder que la méthode d’extension la plus probable.
## Techniques d’entraînement et optimisation
### Prétraitement des données
**Traitement de la longueur de séquence** :
- Batching dynamique : regroupement de séquences de longueur similaire
- Stratégie de remplissage : Remplir les courtes séquences avec des marqueurs spéciaux
- Stratégie de troncature : tronquer raisonnablement les suites excessivement longues
**Prétraitement des étiquettes** :
- Standardisation des jeux de caractères : encodage et capitalisation uniformes des caractères
- Traitement des caractères spéciaux : gère les signes de ponctuation et les espaces
- Développement du vocabulaire : Construire un glossaire complet des personnages
### Stratégie d’entraînement
**Apprentissage du cours** :
Commencez à vous entraîner avec des échantillons simples et augmentez graduellement la difficulté :
- Séquences courtes à longues
- Image claire vers image floue
- Polices régulières vers polices manuscrites
**Amélioration des données** :
- Transformations géométriques : rotation, échelle, coupe
- Ajout de bruit : bruit gaussienne, bruit poivre et sel
- Changements d’éclairage : luminosité, ajustements de contraste
**Techniques de régularisation** :
- Abandon : Empêcher le surajustement
- Dégradation du poids : régularisation L2
- Lissage des étiquettes : Réduit la surconfiance
### Réglage des hyperparamètres
**Planification du taux d’apprentissage** :
- Stratégie d’échauffement : Les premières époques utilisent un faible taux d’apprentissage
- Recuit cosinus : Le taux d’apprentissage diminue selon la fonction cosinus
- Ajustement adaptatif : ajuste en fonction de la performance de l’ensemble de validation
**Sélection de la taille du lot** :
- Limitations de la mémoire : Considérer la capacité mémoire du GPU
- Stabilité du gradient : Offre un gradient plus stable pour les lots plus importants
- Vitesse de convergence : équilibre la vitesse d’entraînement et la stabilité
## Considérations d’application pratique
### Optimisation computationnelle
**Optimisation de la mémoire** :
- Points de contrôle de gradient : Réduit l’empreinte mémoire de la propagation directe
- Entraînement en précision mixte : réduire les besoins en mémoire avec FP16
- Optimisation dynamique des graphes : Optimise l’allocation mémoire pour les graphes calculés
**Optimisation de la vitesse** :
- Calcul parallèle : Utilise les capacités de traitement parallèle GPU
- Optimisation des algorithmes : Mise en œuvre à l’aide d’algorithmes efficaces d’avant en arrière
- Optimisation par lots : définir les tailles des lots de manière appropriée
### Stabilité numérique
**Calcul de probabilité** :
- Calcul en espace logarithmique : Éviter le débordement de valeurs causé par la multiplication de probabilité
- Découpage numérique : limite la plage des valeurs de probabilité
- Techniques de normalisation : Assurer la validité des distributions de probabilité
**Stabilité du gradient** :
- Recadrage en gradient : Empêche les explosions de gradient
- Initialisation des poids : Utiliser une stratégie d’initialisation appropriée
- Normalisation par lots : stabilise le processus d’entraînement
## Évaluation de la performance
### Évaluer les indicateurs
**Précision au niveau des personnages** :
Accuracy_char = Nombre de caractères correctement reconnus / Nombre total de caractères
**Précision au niveau sériel** :
Accuracy_seq = nombre de séquences exactement correctes / nombre total de séquences
**Distance de montage** :
Mesure la différence entre la séquence prédite et la séquence réelle, incluant le nombre minimum d’opérations d’insertion, de suppression et de remplacement.
### Analyse des erreurs
**Types d’erreurs courants** :
- Confusion de personnages : Mauvaise identification de personnages similaires
- Erreurs dupliquées : Les CTC ont tendance à produire des caractères en double
- Erreur de longueur : Prédictions de longueur de séquence inexactes
**Stratégies d’amélioration** :
- Minage d’échantillons difficile : se concentrer sur des échantillons d’entraînement avec des taux d’erreur élevés
- Optimisation post-traitement : Corrige les erreurs à l’aide de modèles de langage
- Approche intégrée : Combinaison de prédictions provenant de plusieurs modèles
## Résumé
La fonction de perte CTC offre un outil puissant pour la modélisation de séquences, surtout lorsqu’il s’agit de problèmes d’alignement. En introduisant l’étiquetage blanc et des algorithmes de programmation dynamique, le CTC réalise un apprentissage de séquences de bout en bout et évite des étapes complexes de prétraitement.
**Points clés** :
- CTC résout le problème des longueurs de séquences d’entrée et de sortie incompatibles
- Les algorithmes avant-arrière fournissent des calculs de probabilité efficaces
- Une stratégie de décodage appropriée est cruciale pour la performance finale
- Les techniques d’entraînement et les stratégies d’optimisation ont un impact significatif sur la performance du modèle
**Suggestions de candidature** :
- Choisir la stratégie de décodage appropriée pour la tâche spécifique
- Accent mis sur le prétraitement des données et les techniques d’amélioration
- Accent sur la stabilité numérique et l’efficacité computationnelle
- Optimisation du post-traitement basée sur la connaissance du domaine
L’application réussie de la CTC a posé une base importante pour le développement de l’apprentissage profond dans le domaine de la modélisation de séquences, et a également fourni un soutien clé au progrès de la technologie OCR.
Mots-clés :
Fonction de perte CTC
Rejoignez la classification de timing
Alignement des séquences
Algorithme avant-arrière
Planification dynamique
Formation OCR
Modélisation de séquences