Je participais au concours de traitement du langage naturel de Kaggle et je voulais peaufiner BERT. Lorsque j'ai appris que le taux d'apprentissage triangulaire incliné (STLR) était bon et que je l'ai implémenté dans Keras, la précision s'est considérablement améliorée.
(Ajout) Après cela, j'ai pu obtenir une médaille d'argent.
Slanted triangualr learning rate
J'ai fait référence à l'article ci-dessous.
Comme vous pouvez le voir sur la figure 2, l'échauffement de la vitesse d'apprentissage au début de l'apprentissage et l'atténuation de la vitesse d'apprentissage après l'étape intermédiaire sont rendus linéaires. "Triangulaire incliné" car il ressemble à un triangle incliné.
Au fait, le papier original que j'ai décidé d'utiliser STLR est ↓
Ceci peut être réalisé en utilisant le mécanisme de «Callbacks» de Keras. Vous ne pouvez pas utiliser LearningRateScheduler
car STLR doit changer le taux d'apprentissage pour chaque itération (étapes dans la terminologie Keras), pas pour chaque époque. Vous devez hériter de la classe Callbacks
et la rendre vierge.
class SlantedTriangularScheduler(Callback):
def __init__(self,
lr_max: float = 0.001,
cut_frac: float = 0.1,
ratio: float = 32):
self.lr_max = lr_max
self.cut_frac = cut_frac
self.ratio = ratio
def on_train_begin(self, logs = None):
epochs = self.params['epochs']
steps = self.params['steps']
self.cut = epochs * steps * self.cut_frac
self.iteration = 0
def on_batch_begin(self, batch: int, logs = None):
t = self.iteration
cut = self.cut
if t < cut:
p = t / cut
else:
p = 1 - (t - cut) / (cut * (1 / self.cut_frac - 1))
lr = self.lr_max * (1 + p * (self.ratio - 1)) / self.ratio
K.set_value(self.model.optimizer.lr, lr)
self.iteration += 1
En ce qui concerne les noms de variables, les mêmes que Eq (3) de l'article original sont utilisés autant que possible.
Comme indiqué dans Comment affiner BERT pour la classification de texte?, cette combinaison a bien fonctionné pour le réglage fin de BERT.
Hyper paramètres | valeur |
---|---|
lr_max |
2e-5 |
cut_frac |
0.1 |
ratio |
32 |
Recommended Posts