Пример 2. Влияние learning rate
Один и тот же датасет – разные learning rate
Теперь берем тот же самый код, но запускаем его с разными $\eta$.
function train(float $lr): void {
$x = [1, 2, 3, 4];
$y = [2, 4, 6, 8];
$w = 0.0;
$n = count($x);
echo PHP_EOL . "Learning rate = $lr" . PHP_EOL;
for ($epoch = 1; $epoch <= 10; $epoch++) {
$gradient = 0.0;
for ($i = 0; $i < $n; $i++) {
$error = ($w * $x[$i]) - $y[$i];
$gradient += $x[$i] * $error;
}
$gradient = (2 / $n) * $gradient;
$w -= $lr * $gradient;
echo "Epoch $epoch: w = " . round($w, 4) . PHP_EOL;
}
}
train(0.01); // слишком медленно
train(0.1); // нормально
train(1.0); // расходимостьПедагогический эффект здесь сильнее, чем у любого объяснения:
– маленький шаг – модель почти не движется;
– разумный шаг – быстро сходится;
– большой шаг – начинает «прыгать» и терять устойчивость.
Это ровно та причина, по которой обучение иногда “не работает”.
Last updated