2017-04-06 18 views
0

Tensorflowオプティマイザ(特にAdamOptimizer)は、損失関数を合計として、または平均値/平均値をミニバッチとして定義する際に優先されますか?Tensorflowオプティマイザ:損失合計対平均値

一般的に私の仮定は、損失がミニバッチのサイズに依存しないので、平均を使用することが好ましいということでした。したがって、任意のバッチサイズで動作する学習率を見つける方が簡単です。

しかし、Tensorflowは、 l2_lossは内部のように:

output = sum(t ** 2)/2 

これは、オプティマイザは、内部ですでにバッチサイズを占めていることを意味するものではない、すなわち、彼らは損失がバッチサイズで直線的に拡張することを期待しますか?また、L2ノルムの半分を最適化の観点からとる動機は何ですか?

答えて

1

ここで、l2_lossは実際に正則化損失関数です。パラメータがオーバーフィットしないように、主損失関数の内側に追加します。私たちは通常、グラジエントを取るときにl2の損失を2で割り、それを簡単にします。

すべてのオプティマイザでは、平均損失w.r.tバッチサイズを使用します。

+0

私は、2で除算すると、グラデーションで1つの乗算を少なくするだけであることがわかります。ですから、明確にするには、非正則化ユースケースの場合、 'tf.reduce_mean(tf.square(output-target))'を使用する方が良いでしょう。 – bluenote10

+0

あなたの損失関数に従っています。ここでは、あなたが実装している損失関数を線形二乗和といいます。それはいつも平均をとるのが良いことです。前のケース12の損失では、グラデーションを取得するときに2つの除算を使用して簡単に行うことができます。 –