Пример 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