始める無料で始める

局所最小値の落とし穴

次の損失関数 loss_function() のプロットを考えます。右側の点で示した大域的最小値に加え、左側の点を含む複数の局所最小値があります。

単変数関数のグラフで、複数の局所最小値と大域的最小値が含まれています。

この演習では、keras.optimizers.SGD() を使って loss_function() の大域的最小値を見つけます。これは2回行い、毎回 loss_function() への入力の初期値を変えます。最初は初期値 6.0 の変数 x_1 を使います。次に、初期値 0.3 の変数 x_2 を使います。loss_function() はすでに定義済みで利用できます。

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

Introduction to TensorFlow in Python

コースを見る

演習の手順

  • 学習率 0.01 の確率的勾配降下法(SGD)オプティマイザを使うように opt を設定します。
  • 損失関数 loss_function() と、初期値が 6.0 の変数 x_1 を用いて最小化を実行します。
  • 損失関数 loss_function() と、初期値が 0.3 の変数 x_2 を用いて最小化を実行します。
  • x_1x_2numpy 配列として出力し、値が異なるか確認します。これらはアルゴリズムが見つけた最小値です。

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

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

# Initialize x_1 and x_2
x_1 = Variable(6.0,float32)
x_2 = Variable(0.3,float32)

# Define the optimization operation
opt = keras.optimizers.____(learning_rate=____)

for j in range(100):
	# Perform minimization using the loss function and x_1
	opt.minimize(lambda: loss_function(____), var_list=[____])
	# Perform minimization using the loss function and x_2
	opt.minimize(lambda: ____, var_list=[____])

# Print x_1 and x_2 as numpy arrays
print(____.numpy(), ____.numpy())
コードを編集して実行