Реализовать код оптимизации методом nesterov momentum

Требуется использовать код градиентного спуска для заданного уравнения регрессии и преобразовать его для оптимизации методом Методом nesterov momentum. Насколько понимаю, данный алгоритм - вариант реализации градиентного спуска. Регрессия задана искусственно: предполагается, что мы знаем Х и формулу получения на его основе Y. Формула там такая: vt = γvt-1 + η∇θ*J(θ), где θ = θ - vθ (здесь t и t-1 - индексы , также и в множителе ∇θ индексом является θ). выполнил такой код для градиентного спуска:

import numpy as np

N = 100
X = np.random.uniform(low=0, high=100, size=N)
Y = 2*X + 1 + np.random.normal(scale=5, size=N)

EPOCHS = 20
LEARNING_RATE = 0.0001
costs = []
params = []
preds = []
params = np.random.normal(size=(2,))

for i in range(EPOCHS):
    predictions = params[0] + params[1] * X    # по сути params[0] и params[1] - это тета0 и тета1
    preds.append(predictions)

    cost = np.sum(np.square(predictions - Y)) / (2 * len(predictions))
    costs.append(cost)
    
    params[0] -= LEARNING_RATE * np.sum(predictions - Y) / len(predictions)
    params[1] -= LEARNING_RATE * np.sum((predictions - Y) * X) / len(predictions)  
    print(params[0], params[1])

На выходе набор параметров 1.0055797224298348 1.0837101932121054 1.0099901833983396 1.3672964459080355 ... 1.0193469245769309 1.9812174467883341

Эти параметры соответствуют заданному уравнению Y.

Реализовать метод nesterov momentum - может, есть идеи, как это сделать?


Ответы (0 шт):