Visualiser l'impact de différents taux d'apprentissage.
Pour la même fonction, exécutez une descente de gradient avec des taux d'apprentissage trop petits, appropriés et trop grands, puis observez directement la comparaison de trois courbes typiques.
Après avoir terminé cette étude de cas, vous comprendrez :Le taux d'apprentissage est l'hyperparamètre le plus important de la descente de gradient—s'il est défini trop petit, c'est trop lent ; s'il est défini trop grand, cela diverge.
Introduction à la vie
En rentrant à la maison — à quelle force faut-il appuyer sur l'accélérateur ?
À 10 kilomètres de la maison. Appuyer trop légèrement sur l'accélérateur (taux d'apprentissage trop petit) — rouler pendant une heure et ne pas être encore arrivé. Appuyer trop fort sur l'accélérateur (taux d'apprentissage trop grand) — dépasser, faire demi-tour et repartir, dépasser encore, osciller d'avant en arrière. Juste la bonne pression (taux d'apprentissage approprié) — arriver en douceur.
Le choix du taux d'apprentissage dans la descente de gradient et le contrôle de l'accélérateur en conduite rencontrent exactement le même problème.
Compréhension intuitive.
La fonction objectif \(f(x) = x^2\), avec un minimum en \(x=0\). Le gradient est \(f'(x) = 2x\).
Règle de mise à jour : \(x_{t+1} = x_t - \eta \cdot 2x_t = x_t \cdot (1 - 2\eta)\). Si \(\eta < 0.5\), il y a convergence ; si \(\eta > 1.0\), il y a divergence.
Exercice pratique Python
exemple
def f(x): return x ** 2
def grad(x): return 2 * x
def run_gd(lr, steps=30, x0=8.0):
x = x0
history = [x]
for _ in range(steps):
x = x - lr * grad(x)
history.append(x)
if abs(x) > 1e6: break
return history
paramètres = {
Trop petit (lr=0.01): 0.01,
Adapté (lr=0.2): 0.2,
Trop grand (lr=1.05): 1.05,
}
results = {name: run_gd(lr) for name, lr in settings.items()}
print(EXEMPLE de comparaison de trois taux d'apprentissage après 30 étapes:\n")
print(f{'Réglage du taux d'apprentissage':<20} {'x final':<12} {'f(x)':<14} {'Jugement'})
print("-" * 56)
for name, hist in results.items():
x_final = hist[-1]
judgement = (A convergé if abs(x_final) < 0.01
else En convergence if abs(x_final) < 3
else Divergence)
print(f"{name:<20} {x_final:<12.4f} {f(x_final):<14.6f} {judgement}")
# Analyse : Combien d'étapes sont nécessaires pour que |x| < 0.01 ?
print("\nCombien d'étapes EXAMPLE a-t-il besoin pour converger vers |x| < 0.01 ?)
for name, lr in settings.items():
x = 8.0
for step in range(1, 1001):
x = x - lr * grad(x)
if abs(x) < 0.01:
print(f{name}: nécessite {step} étapes)
break
else:
print(f{name}: Échec de convergence en 1000 étapes)
EXAMPLE 三种学习率 30 步后对比: 学习率设置 最终 x f(x) 判断 -------------------------------------------------------- 过小 (lr=0.01) 4.3219 18.678861 收敛中 合适 (lr=0.2) 0.0000 0.000000 已收敛 过大 (lr=1.05) -34.5929 1196.668701 发散 EXAMPLE 需要多少步收敛到 |x| < 0.01? 过小 (lr=0.01): 需要 377 步 合适 (lr=0.2): 需要 20 步 过大 (lr=1.05): 1000 步内无法收敛
Scénarios d'application en IA
| scene | Explication |
|---|---|
| Planification du taux d'apprentissage | En entraînement réel, la "décroissance du taux d'apprentissage" est couramment utilisée — commencer grand puis petit, avec une convergence rapide au début et un affinage par la suite. |
| Préchauffage | Lors de l'entraînement d'un Transformer, effectuez d'abord un préchauffage avec un taux d'apprentissage très faible, puis augmentez-le progressivement — afin d'éviter les oscillations initiales. |
| Adam adaptatif | Ajuste automatiquement le taux d'apprentissage pour chaque paramètre — le cas « Comparaison d'optimiseurs » le démontrera en détail. |