НачатьНачать бесплатно

Как избежать локальных минимумов

В предыдущей задаче мы убедились, насколько легко алгоритм может застрять в локальном минимуме. Даже в простой задаче оптимизации с одной переменной градиентный спуск не смог найти глобальный минимум, если на пути встречались локальные. Один из способов решить эту проблему — использовать импульс (momentum), который позволяет оптимизатору преодолевать локальные минимумы. Мы снова воспользуемся функцией потерь из предыдущей задачи — она уже определена и доступна вам как loss_function().

The graph is of a single variable function that contains multiple local minima and a global minimum.

Несколько оптимизаторов в tensorflow поддерживают параметр импульса, в том числе SGD и RMSprop. В этом упражнении вы будете использовать RMSprop. Обратите внимание, что на этот раз x_1 и x_2 инициализированы одинаковым значением. Кроме того, keras.optimizers.RMSprop() уже импортирован для вас из tensorflow.

Это упражнение является частью курса

Введение в TensorFlow на Python

Посмотреть курс

Инструкции к упражнению

  • Задайте для операции opt_1 скорость обучения 0,01 и импульс 0,99.
  • Настройте opt_2 на использование оптимизатора среднеквадратичного распространения (RMS) со скоростью обучения 0,01 и импульсом 0,00.
  • Определите операцию минимизации для opt_2.
  • Выведите x_1 и x_2 как массивы numpy.

Интерактивное практическое упражнение

Попробуйте выполнить это упражнение, дополнив этот пример кода.

# Initialize x_1 and x_2
x_1 = Variable(0.05,float32)
x_2 = Variable(0.05,float32)

# Define the optimization operation for opt_1 and opt_2
opt_1 = keras.optimizers.RMSprop(learning_rate=____, momentum=____)
opt_2 = ____

for j in range(100):
	opt_1.minimize(lambda: loss_function(x_1), var_list=[x_1])
    # Define the minimization operation for opt_2
	____

# Print x_1 and x_2 as numpy arrays
print(____, ____)
Редактировать и запускать код