FichesCarte › Partie 07 · Arbres, ensembles, k-means › chaîne 03

Gradient boosting — une descente dans l'espace des fonctions

Ce qu'un arbre de boosting ajuste exactement — et pourquoi ce n'est pas « les résidus de l'arbre précédent ». Une seule phrase tient la chaîne : le m-ième arbre ajuste le gradient négatif de la loss, pris au modèle cumulé Fm−1, et ν est le pas de cette descente. Fil rouge : quatre points y = (1 ; 2 ; 3 ; 6) sur x = 1, 2, 3, 4, F0 = 3, RSS = 14 ; la première souche coupe en x ≤ 3, et à ν = 0,1 la RSS tombe à 11,72 — un dixième du chemin, cinquante fois.

Ce que cette chaîne suppose acquis
  • La descente de gradient. θθηL : la direction de plus forte baisse locale, un pas η, et un pas trop grand qui oscille (p03-02 pas 2–3). Toute cette chaîne ne change qu'une chose : par rapport à quoi on dérive.
  • Un arbre de régression. Coupures axe par axe, une feuille prédit la moyenne des y qu'elle contient (p07-01 pas 7) ; la profondeur est le bouton de variance (pas 5).
  • Moyenner ne baisse que la variance. Le biais de la moyenne est exactement le biais d'un composant — démontré en une ligne de linéarité dans p07-02 pas 2, et c'est de là que vient « arbres profonds pour la forêt, arbres courts pour le boosting » (pas 7). On l'applique ici, on ne le redémontre pas.
  • La loss vient de l'hypothèse de bruit. Gaussien ⇒ quadratique, Bernoulli ⇒ log-loss (p02-01 pas 8). Choisir la loss est un choix de modèle ; le boosting, lui, ne change pas.
  • Le gradient de la log-loss. Avec p = σ(F), ∂L/∂F = py, le −1/p du log compensant l'écrasement de σ′ (p03-01 pas 7). C'est ce nombre-là que l'arbre ajuste quand on classe.
Hypothèses posées
H1Le modèle est une somme FM(x) = F0 + ν Σm=1M hm(x), construite séquentiellement : une fois hm posé, on n'y revient plus. Aucun terme n'est réajusté à la lumière des suivants. H2Chaque hm est un arbre de régression court (profondeur 1 à 6), quelle que soit la tâche — classer ou régresser. En classification aussi, l'arbre régresse : il ajuste des nombres réels, jamais des étiquettes. H3La loss est dérivable en F : quadratique, log-loss, Huber, quantile. Une loss en marches (la 0/1) ne donnerait aucune cible à l'arbre — c'est exactement l'argument de b05, lu ici dans l'espace des fonctions.

La chaîne

Le décor : additionner, pas moyenner

Le bagging moyenne des modèles de même loi et ne touche pas au biais : il divise ce qui reste de variance (p07-02 pas 2). Le boosting prend l'autre côté du budget d'erreur : un modèle additif où chaque terme corrige ce que la somme des précédents laisse encore.

FM(x) = F0 + ν h1(x) + ν h2(x) + … + ν hM(x)

D'où les composants faibles : un terme qui corrige n'a pas besoin d'être bon seul, il a besoin de laisser du travail aux suivants.

« Moyenner laisse le biais intact, donc pour l'attaquer il faut additionner et non moyenner, donc chaque terme doit viser ce que les précédents laissent, donc le modèle se construit séquentiellement à partir de composants faibles. »

Le fil rouge, posé

Quatre points : x = 1, 2, 3, 4 et y = 1, 2, 3, 6. Un seul feature, donc une souche ne peut que choisir sa coupure parmi x ≤ 1, x ≤ 2, x ≤ 3.

x=1x=2x=3x=4
y1236
F0 = ȳ3333
yF0−2−10+3

RSS de départ : 4 + 1 + 0 + 9 = 14. F0 est la constante qui minimise la loss quadratique — c'est déjà le premier « arbre », de profondeur zéro.

Le geste : ajuster le gradient négatif tronc

À l'étape m, on calcule un nombre par point d'entraînement : de combien la loss baisserait si l'on remontait un peu la prédiction en ce point.

ri = −∂L(yi, F)/∂F évalué en F = Fm−1(xi)   puis   hm = arbre ajusté sur (xi, ri)   puis   Fm = Fm−1 + ν hm

L'arbre ne fait qu'une chose : rendre ce gradient utilisable ailleurs qu'aux n points où on sait le calculer. Deux mots portent tout : le gradient est pris au modèle cumulé, et il est pris de la loss — pas d'un résidu, pas du dernier arbre (b01 pas 4).

« La loss est une fonction de la prédiction en chaque point, donc son gradient négatif dit dans quel sens corriger chaque point, donc un arbre ajusté sur ces nombres est un pas de descente, donc le boosting descend la loss dans l'espace des fonctions. »

Application — le premier arbre, et le piège

Cible du premier arbre : (−2 ; −1 ; 0 ; +3). La souche qui minimise la SSE de ces nombres coupe en x ≤ 3 :

coupurefeuille gauchefeuille droiteSSE
x ≤ 1−2+0,6678,667
x ≤ 2−1,5+1,55,000
x ≤ 3−1+32,000

Donc h1 = (−1 ; −1 ; −1 ; +3). À ν = 0,1 : F1 = (2,9 ; 2,9 ; 2,9 ; 3,3), RSS 14 → 11,72.

Le piège, en chiffres. La cible du deuxième arbre est yF1 = (−1,9 ; −0,9 ; +0,1 ; +2,7). Ce que beaucoup récitent — « les résidus laissés par h1 », soit r1h1 = (−1 ; 0 ; +1 ; 0) — n'a aucune composante en commun avec elle. Les deux ne coïncideraient qu'à ν = 1 : c'est ce qui rend la confusion durable.

Quadratique ⇒ les résidus, et seulement là

Une seule loss fait coïncider le gradient négatif avec le résidu, et il faut pour cela garder le ½ :

L = ½(yF)²  ⇒  ∂L/∂F = −(yF)  ⇒  r = yF

Convention de ce dépôt : le ½ est gardé ici pour que le pseudo-résidu soit exactement le résidu ; sans lui r = 2(yF) et le facteur 2 est absorbé par ν — même mécanisme, chiffres doublés. Même ligne dans b01. (À ne pas confondre avec la convention des pénalités, L + λ·pen, écrite sans ½.)

« La dérivée de ½(y − F)² en F vaut −(y − F), donc son opposé est exactement le résidu, donc « chaque arbre ajuste les résidus » est vrai pour cette loss, donc c'est un cas particulier et non la définition. »

Application — cinquante souches à ν = 0,1
MF(1)F(2)F(3)F(4)RSS
0333314
12,9002,9002,9003,30011,72
52,5412,5412,7724,1476,150
201,6062,0842,9165,3940,749
501,0802,0072,9885,9250,0123

Une souche ne sait produire que deux valeurs ; cinquante souches sommées en produisent quatre distinctes, et retrouvent (1 ; 2 ; 3 ; 6). Le pouvoir d'expression est dans la somme, pas dans l'arbre.

Figure 1 — un arbre à la fois

Les quatre points en rouge, Fm en marches bleues, les résidus en pointillés. Clique « arbre suivant » : la souche choisie coupe le résidu courant, et seule une fraction ν en est ajoutée. Remonte ν à 1 — la RSS passe de 14 à 2,0 en un arbre et sous 0,01 en dix ; redescends à 0,1 — il en faut cinquante pour arriver à 0,012. Même direction à chaque fois ; seule la longueur du pas change.

Log-loss ⇒ yp : on régresse quand même

Pour classer, F est un logit et p = σ(F). Le gradient de la log-loss par rapport à F est celui de p03-01 pas 7 :

−∂L/∂F = yp  ∈ ]−1 ; 1[     puis, comme toujours,  hm = arbre de régression sur ces yipi

La cible n'est pas une étiquette mais un écart de probabilité : « de combien la probabilité est fausse, et dans quel sens ». Huber, quantile, Poisson donnent d'autres pseudo-résidus ; le geste, lui, ne bouge pas d'une ligne.

« La cible d'un arbre est le gradient négatif de la loss, donc elle change avec la loss, donc en classification c'est y − p et non un label, donc l'arbre reste un arbre de régression. »

Application — dix points, ν = 0,5

y = 1 en x = 6, 7, 9, 10 ; y = 0 ailleurs. Taux de base p0 = 0,4, donc F0 = log(0,4/0,6) = −0,405 partout.

les 6 points y = 0les 4 points y = 1
pseudo-résidu yp0−0,4+0,6

Meilleure souche sur ces nombres : x ≤ 5, feuilles −0,4 et +0,4 (SSE 0,80 contre 1,50 en x ≤ 8). Avec ν = 0,5 les logits deviennent −0,605 à gauche et −0,205 à droite, soit p = 0,353 et 0,449. Log-loss moyenne : 0,673 → 0,598.

Le point à contre-courant. x = 8 porte y = 0 mais tombe dans la feuille droite : son pseudo-résidu grandit, de −0,400 à −0,449. Il réclamera plus fort au tour suivant — c'est le mécanisme, et c'est déjà la limite du pas 8.

ν : le pas, et une régularisation tronc

ν ∈ ]0 ; 1] : chaque arbre ne corrige qu'une fraction de ce qu'il voit. C'est le η de p03-02 pas 3, avec un rôle de plus.

Un arbre ajusté sur le résidu courant ajuste aussi le bruit du résidu courant. À ν = 1 cette part de bruit entre entièrement dans F et aucun arbre suivant ne la reprendra (H1 : rien n'est réajusté). À ν petit, chaque arbre n'en verse qu'un dixième et les suivants corrigent le reste : le modèle final est une moyenne implicite de beaucoup d'avis, au lieu de la somme de quelques-uns.

« Un pas complet verse dans F tout le bruit du résidu courant, donc rien ne le reprendra ensuite, donc on prend un pas partiel et plus d'arbres, donc ν est à la fois le taux d'apprentissage et une régularisation. »

Application — le fil rouge aux deux vitesses
RSS après M arbres1351050
ν = 0,111,728,3776,1502,9580,0123
ν = 12,0000,5190,1070,0081≈ 0

Sur ces quatre points sans bruit, ν = 1 est simplement plus rapide, et c'est très bien. L'arbitrage n'apparaît que quand y contient du bruit : la figure 2 rejoue exactement la même comparaison sur quarante points bruités, et le classement s'inverse.

La profondeur fixe l'ordre des interactions

Une somme de souches est une somme de fonctions d'une seule variable à la fois : un modèle additif, incapable par construction de dire « si x1 est grand et x2 petit ». Un arbre de profondeur d teste d questions avant de prédire, donc exprime des interactions d'ordre d.

D'où le réglage usuel 3 à 6 : assez pour les interactions utiles, assez court pour que le biais reste à réduire par la somme et non par l'arbre. Plus profond n'ajoute pas de la finesse, ça ajoute de la variance (p07-01 pas 5) — et c'est l'exact miroir de la forêt, qui veut des arbres profonds parce qu'elle ne sait baisser que la variance (p07-02 pas 7).

« Une souche ne voit qu'une variable à la fois, donc une somme de souches est un modèle additif, donc il faut une profondeur d pour exprimer une interaction d'ordre d, donc on règle la profondeur sur l'ordre des interactions attendues et non sur la précision voulue. »

Application — le XOR, en quatre points

x1, x2 ∈ {0, 1} et y = 1 si exactement l'une des deux vaut 1. Cible purement interactive : chaque variable prise seule ne dit rien.

(x1, x2)(0,0)(0,1)(1,0)(1,1)RSS
y0110
somme de souches, au mieux0,50,50,50,51
un arbre de profondeur 201100

Le meilleur modèle additif α + β1x1 + β2x2 a pour solution des moindres carrés α = 0,5 et β1 = β2 = 0 : il prédit la moyenne partout. Mille souches n'y changent rien — ce n'est pas un manque d'arbres, c'est un manque de profondeur.

M : le seul réglage qui se lit sur une courbe

La loss d'entraînement décroît à chaque arbre, toujours : on la descend par construction. La loss de validation fait un U (p06-01 pas 6, b03). On prend le M du minimum, mesuré et non choisi : c'est l'arrêt anticipé.

Autour, tous les autres boutons sont des boutons de variance posés sur un procédé qui, lui, attaque le biais : sous-échantillonner les lignes à chaque arbre (stochastic gradient boosting), sous-échantillonner les colonnes, pénaliser les valeurs de feuille, limiter le nombre de feuilles.

« La loss d'entraînement décroît à chaque arbre par construction, donc elle ne peut pas servir à choisir M, donc on lit le minimum de la validation, donc M est mesuré et non réglé. »

Application — quarante points bruités

y = sin(2πx) + bruit d'écart-type 0,45, n = 40 en entraînement, 200 en validation, souches, M jusqu'à 200.

M du minval. au minval. à M=200train à M=200
ν = 0,1980,2570,2690,064
ν = 170,2720,3340,011

Le pas court gagne sur les deux tableaux : son minimum arrive plus tard (98 contre 7) et plus bas (0,257 contre 0,272). À ν = 1, la train tombe à 0,011 — six fois moins que l'autre — pendant que la validation remonte à 0,334 : la loss d'entraînement ne dit rien de ce qui se passe.

Figure 2 — le U de la validation, aux deux vitesses

Quatre courbes : train et validation, pour ν = 0,1 et ν = 1. Les deux train (violet, ambre) descendent sans jamais remonter. Les deux validation (bleu, rouge) font un U, dont le creux est marqué. Fais glisser M : à M = 7 le rouge est à son minimum et le bleu encore loin du sien ; à M = 200 le rouge est remonté de 23 %, le bleu de 5 %. Un pas court décale le creux vers la droite et le descend.

Forêt ou boosting : la question est le bruit des labels tronc

Les deux ensemblent des arbres, et c'est tout ce qu'ils ont en commun. La forêt moyenne : un label faux entre dans une minorité d'arbres et se dilue dans le vote. Le boosting corrige : un label faux produit à chaque étape un pseudo-résidu qui ne se résorbe pas, et reçoit donc une correction à chaque étape (pas 4, le point x = 8).

Bien réglé sur des labels propres, le boosting gagne presque toujours — c'est un procédé qui baisse le biais, et la forêt plafonne à ρσ² (p07-02 pas 4). Le prix est le nombre de boutons : ν, la profondeur, M, et un jeu de validation pour les régler.

« La forêt moyenne et dilue un label faux, donc le boosting le corrige et le poursuit, donc sur des labels propres le boosting gagne, donc sur des labels bruités la forêt est le choix sûr. »

Application — la table, et 10 % de labels retournés
forêt aléatoiregradient boosting
ce qu'elle baissela variancele biais
composantsarbres profonds, faible biaisarbres courts, fort biais
commentmoyenne / votesomme séquentielle
arbres indépendantsoui — parallélisablenon — l'arbre m attend m−1
ajouter des arbresne nuit jamais (plafond ρσ²)finit par nuire (le U)
labels bruitésdiluepoursuit

Simulation : frontière sinusoïdale dans le carré unité, 120 points d'entraînement dont 10 % d'étiquettes retournées, 500 points de test propres. Forêt de 25 arbres profonds contre 200 arbres de profondeur 2 à ν = 0,3, sans arrêt anticipé. Sur 100 tirages (les 25 de l’ouverture, puis trois fois « tirer 25 ») : erreur test moyenne 8,9 % pour la forêt, 10,9 % pour le boosting, qui est le pire des deux dans 82 tirages sur 100.

Figure 3 — deux ensembles sur des labels bruités

Chaque tirage rejoue tout : un jeu d'entraînement, 10 % de labels retournés, une forêt, un boosting, deux erreurs de test. Barres pleines : la forêt. Contour rouge : le boosting. Les traits épais marquent les deux moyennes. Tire une centaine de fois : les deux histogrammes se chevauchent largement — ce n'est pas une catastrophe, c'est un décalage —, mais celui du boosting est franchement à droite. Un arrêt anticipé sur validation en récupérerait l'essentiel : ici, exprès, il n'y en a pas.

Où ça casse casse

Le boosting est le procédé le plus précis du ML tabulaire et le plus facile à mal régler. Trois de ses quatre limites ont la même racine : il corrige, donc il corrige aussi ce qui n'aurait pas dû l'être.

« Chaque arbre corrige ce que le cumul laisse, donc ce qu'un point faux laisse ne se résorbe jamais, donc il reçoit une correction à chaque étape, donc le remède est de borner la loss ou de s'arrêter tôt. »

Quatre limites
  • Labels bruités et outliers. La log-loss n'est pas bornée (p03-01, casse) et la quadratique pèse le carré de l'écart : un point faux appelle une correction à chaque étape et finit par déplacer la frontière. Remèdes : Huber ou quantile en régression, arrêt anticipé, sous-échantillonnage — ou la forêt, qui dilue.
  • Profond et pressé. Grande profondeur et ν grand mémorisent en quelques dizaines d'arbres : la train tombe, la validation remonte, et ajouter des arbres n'y change rien — ce n'est pas M qui est mal réglé. Baisser ν et la profondeur, dans cet ordre.
  • Séquentiel par construction (H1). Aucun parallélisme entre arbres ; seul le choix des coupures dans un arbre se parallélise. À nombre d'arbres égal, un boosting s'entraîne plus lentement qu'une forêt, et une forêt reste le premier modèle à essayer.
  • « Chaque arbre ajuste les résidus du précédent ». Faux deux fois : hors loss quadratique il n'y a pas de résidu (pas 4), et même en quadratique le gradient est pris au modèle cumulé, pas au dernier arbre (pas 2). La formulation exacte est la seule à retenir : le gradient négatif de la loss, évalué au modèle cumulé.

Résumé

À retenir
  1. FM = F0 + ν Σ hm : modèle additif, construit séquentiellement, à partir de composants faibles.
  2. Chaque arbre ajuste ri = −∂L/∂F pris au modèle cumulé : une descente de gradient dont la variable est la fonction (b01).
  3. Quadratique avec ½ ⇒ le résidu yF ; log-loss ⇒ yp ; dans tous les cas un arbre de régression.
  4. ν est le pas et une régularisation : petit ν, beaucoup d'arbres — le creux de validation se décale à droite et descend.
  5. La profondeur fixe l'ordre des interactions (3 à 6) ; le biais est réduit par la somme, pas par l'arbre.
  6. M se lit au minimum de la validation (arrêt anticipé) ; forêt si les labels sont bruités, boosting s'ils sont propres et le réglage soigné.
« Le gradient boosting est une descente de gradient où la variable est la fonction : à chaque étape j'ajuste un petit arbre sur le gradient négatif de la loss au modèle cumulé — les résidus pour une loss quadratique, y moins p pour la log-loss — et j'ajoute une fraction ν de cet arbre. ν est à la fois le pas et la régularisation, la profondeur fixe l'ordre des interactions, le nombre d'arbres se choisit par arrêt anticipé. La forêt dilue le bruit, le boosting le poursuit : c'est le critère de choix. »

Chaîne verbalisée — une prise, à voix haute

6 maillons · clique pour révéler après avoir dit
  1. Que cible exactement le m-ième arbre ?
    −∂L/∂F évalué au modèle cumulé Fm−1, point d'entraînement par point d'entraînement. Ni un résidu d'arbre, ni une étiquette.
  2. Pourquoi dit-on « les résidus », et quand est-ce vrai ?
    Uniquement pour L = ½(yF)², où −∂L/∂F = yF. Cas particulier, pas définition — et le résidu est celui du cumul, pas du dernier arbre.
  3. Et en classification ?
    F est un logit, p = σ(F), pseudo-résidu yp : un écart de probabilité. L'arbre reste un arbre de régression.
  4. Que fait ν, et pourquoi le prendre petit ?
    C'est le pas de la descente. Petit, chaque arbre ne verse qu'une fraction du bruit du résidu courant et les suivants le corrigent : creux de validation plus tardif et plus bas.
  5. Arbres courts ou profonds, et pourquoi pas comme la forêt ?
    Courts : la profondeur d ne sert qu'à exprimer des interactions d'ordre d, le biais étant réduit par la somme. La forêt veut des arbres profonds, elle ne sait baisser que la variance.
  6. Labels bruités : forêt ou boosting ?
    Forêt. Elle moyenne, donc elle dilue le label faux ; le boosting lui envoie une correction à chaque étape. À défaut : Huber, quantile, arrêt anticipé.