Пример 1. Векторы и скалярное произведение

В машинном обучении объект представляется вектором признаков. Например, для прогнозирования стоимости квартиры можно использовать площадь, количество комнат и возраст здания.

Пусть вектор признаков имеет вид:

x = [60, 3, 10]

Вектор коэффициентов модели:

w = [0.4, 2, −0.1]

Свободный член:

b = 5

Линейный прогноз рассчитывается по формуле:

ŷ = wᵀx + b

Подставим значения:

ŷ = 0.4 × 60 + 2 × 3 − 0.1 × 10 + 5 = 34

Реализация на Python:

import numpy as np

 

x = np.array([60, 3, 10])

w = np.array([0.4, 2, -0.1])

b = 5

 

prediction = np.dot(w, x) + b

 

print("Прогноз:", prediction)

Результат:

Прогноз: 34.0

Скалярное произведение позволяет объединить несколько признаков в одно числовое значение. В данном примере прогнозируемая стоимость составляет 34 млн тенге.

Пример 2. Градиентный спуск для минимизации функции потерь

Рассмотрим функцию потерь:

L(w) = (w − 3)²

Её минимальное значение достигается при w = 3.

Производная функции:

L′(w) = 2(w − 3)

Для поиска минимума используется градиентный спуск:

wₜ₊₁ = wₜ − ηL′(wₜ)

где η — скорость обучения.

Пусть начальное значение w₀ = 0, а скорость обучения η = 0.1.

Первый шаг:

w₁ = 0 − 0.1 × (−6) = 0.6

Второй шаг:

w₂ = 0.6 − 0.1 × (−4.8) = 1.08

Реализация на Python:

w = 0.0

learning_rate = 0.1

 

for iteration in range(10):

    gradient = 2 * (w - 3)

    w = w - learning_rate * gradient

    loss = (w - 3) ** 2

 

    print(

        f"Итерация {iteration + 1}: "

        f"w = {w:.4f}, "

        f"L = {loss:.4f}"

    )

С каждой итерацией параметр приближается к значению 3, а функция потерь уменьшается. Пример показывает, как производная используется для определения направления обновления параметров модели.

Пример 3. Влияние скорости обучения на оптимизацию

Скорость обучения определяет величину изменения параметров на каждой итерации градиентного спуска.

При слишком маленьком значении обучение происходит медленно. При чрезмерно большом значении алгоритм может не сходиться к минимуму.

Рассмотрим ту же функцию:

L(w) = (w − 3)²

Сравним три значения скорости обучения: 0.01, 0.1 и 1.1.

Реализация на Python:

def gradient_descent(learning_rate, steps=20):

    w = 0.0

 

    for _ in range(steps):

        gradient = 2 * (w - 3)

        w = w - learning_rate * gradient

 

    loss = (w - 3) ** 2

    return w, loss

 

 

for eta in [0.01, 0.1, 1.1]:

    w, loss = gradient_descent(eta)

 

    print(

        f"Скорость: {eta}, "

        f"параметр: {w:.4f}, "

        f"потери: {loss:.4f}"

    )

При η = 0.01 приближение к минимуму происходит медленно.

При η = 0.1 значение параметра постепенно приближается к оптимальному.

При η = 1.1 величина отклонения от минимума увеличивается, что свидетельствует о расходимости.

Следовательно, выбор скорости обучения непосредственно влияет на устойчивость и эффективность оптимизации.