Реализовать код оптимизации методом 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 - может, есть идеи, как это сделать?