Пример 1. Траектория параметра

Как параметр движется к минимуму (траектория обучения)

Здесь мы вообще не думаем о предметной области. Нас интересует только одно:

как параметр $w$ меняется от шага к шагу.

Один параметр, MSE, чистый batch gradient descent.

$x = [1, 2, 3, 4];
$y = [2, 4, 6, 8]; // идеальная зависимость y = 2x

$w = 0.0;
$lr = 0.1;
$n = count($x);

echo "epoch\tw\t\tgradient\tloss\n";

for ($epoch = 1; $epoch <= 20; $epoch++) {

    $gradient = 0.0;
    $loss = 0.0;

    for ($i = 0; $i < $n; $i++) {
        $pred = $w * $x[$i];
        $error = $pred - $y[$i];

        $loss += $error ** 2;
        $gradient += $x[$i] * $error;
    }

    $loss /= $n;
    $gradient = (2 / $n) * $gradient;

    echo $epoch . "\t" .
         round($w, 4) . "\t" .
         round($gradient, 4) . "\t\t" .
         round($loss, 4) . PHP_EOL;

    $w -= $lr * $gradient;
}

Что здесь важно увидеть глазами:

– знак градиента меняется, когда мы «перелетаем» оптимум;

– шаги уменьшаются по мере приближения к минимуму;

– формула перестает быть абстрактной – это реальное движение числа.

Last updated