Оптимизация импульса в нейронной сети

Это псевдокод, в котором я хотел бы реализовать импульс.

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, что приводит к сходимости.

Но по ссылке, которую я дал, не нужно добавлять скорость обучения утверждений, так что я думаю, что я сделал что-то не так, но я не уверен, что именно. Можете ли вы посоветовать мне?

0 ответов

Другие вопросы по тегам