Оптимизация импульса в нейронной сети
Это псевдокод, в котором я хотел бы реализовать импульс.
http://ruder.io/optimizing-gradient-descent/
for i in range(nb_epochs):
np.random.shuffle(data)
for example in data:
params_grad = evaluate_gradient(loss_function, example, params)
params = params - learning_rate * params_grad
Я хотел бы сделать это так:
for i in range(nb_epochs):
np.random.shuffle(data)
for example in data:
params_grad = evaluate_gradient(loss_function, example, params)
pseudo_momentum = (change_of_params_grad*beta) + (learning_rate * params_grad)
params = params - pseudo_momentum
Я проверил это на f(x) = x**2
с производной f'(x) = 2x
, where x=2
params_grad*learning rate(0,01) = 0,04
change_of_params_grad * beta(0,9) = 3,6
В этом случае псевдо-импульс составляет 3,64, что почти в два раза больше, чем х. Конечно, это полная дивергенция, поэтому я добавил скорость обучения change_of_params_grad * beta(0,9)
и я получил 0,0364, что приводит к сходимости.
Но по ссылке, которую я дал, не нужно добавлять скорость обучения утверждений, так что я думаю, что я сделал что-то не так, но я не уверен, что именно. Можете ли вы посоветовать мне?