Як уникнути локальних мінімумів
У попередній задачі ви побачили, як легко застрягти в локальних мінімумах. Ми мали просту задачу оптимізації з однією змінною, і градієнтний спуск усе одно не знайшов глобального мінімуму, бо спершу потрібно було пройти через локальні мінімуми. Один зі способів уникнути цього — використати імпульс (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(____, ____)