始める無料で始める

局所最小値を回避する

前の問題では、局所最小値に簡単にはまり込んでしまうことを確認しました。変数が1つの単純な最適化問題でも、まず局所最小値を通過しなければならない場合、勾配降下法は大域最小値を見つけられませんでした。この問題を避ける一つの方法がモメンタムで、最適化器が局所最小値を突き抜けるのに役立ちます。ここでも前の問題の損失関数を使います。これは loss_function() として定義済みで利用できます。

複数の局所最小値と大域最小値を含む1変数関数のグラフ。

tensorflow のいくつかの最適化器(SGDRMSprop など)にはモメンタムのパラメータがあります。本演習では RMSprop を使います。なお、今回は x_1x_2 が同じ値に初期化されています。さらに、keras.optimizers.RMSprop()tensorflow からすでにインポート済みです。

この演習はコースの一部です

Introduction to TensorFlow in Python

コースを見る

演習の手順

  • opt_1 を学習率 0.01、モメンタム 0.99 で設定します。
  • opt_2 を、学習率 0.01、モメンタム 0.00 の RMS(root mean square)最適化器で設定します。
  • opt_2 の最小化処理を定義します。
  • x_1x_2numpy 配列として出力します。

実践的なインタラクティブ演習

このサンプルコードを完成させて、この演習に挑戦してみましょう。

# 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(____, ____)
コードを編集して実行