ПочатиПочніть безкоштовно

Як уникнути локальних мінімумів

У попередній задачі ви побачили, як легко застрягти в локальних мінімумах. Ми мали просту задачу оптимізації з однією змінною, і градієнтний спуск усе одно не знайшов глобального мінімуму, бо спершу потрібно було пройти через локальні мінімуми. Один зі способів уникнути цього — використати імпульс (momentum), який дає змогу оптимізатору „пробиватися" крізь локальні мінімуми. Ми знову використаємо функцію втрат із попередньої задачі, вона вже визначена і доступна вам як loss_function().

Графік одновимірної функції з кількома локальними мінімумами та глобальним мінімумом.

Кілька оптимізаторів у tensorflow мають параметр імпульсу, зокрема SGD і RMSprop. У цій вправі ви скористаєтеся RMSprop. Зверніть увагу, що цього разу x_1 і x_2 ініціалізовано тим самим значенням. Крім того, keras.optimizers.RMSprop() уже імпортовано для вас із tensorflow.

Ця вправа є частиною курсу

Вступ до TensorFlow на Python

Переглянути курс

Інструкції до вправи

  • Налаштуйте операцію opt_1 на швидкість навчання 0.01 і імпульс 0.99.
  • Налаштуйте opt_2 на використання оптимізатора root mean square propagation (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(____, ____)
Редагувати та запускати код