複雑さと学習率と損失関数

コンテンツはビデオ、ビデオアドレスから来ています:here1here2

ニューラルネットワークの複雑さは、ネットワーク層の数とニューラルネットワークパラメータの数、
空間の複雑さによって表されます。

  • レイヤーの数(計算能力のあるレイヤーのみを計算)=非表示レイヤーの数+1出力レイヤー;

  • 合計パラメーター=合計w+合計b;
    時間計算量:

  • 乗算および加算演算の数(
    例:
    ここに画像の説明を挿入します
    合計パラメーター=3x4+4x1 + 4x2+2x1 = 26
    乗算および加算演算の=)3x4 + 4x2 = 20

  • 指数関数的減衰の学習率
    は、最初に大きな学習率を使用してより良い解をすばやく取得し、次に学習率を徐々に下げて、トレーニングの後の段階でモデルを安定させることができます。
    指数関数的減衰学習率=初期学習率*学習率減衰率(現在のラウンド数/ 1回の減衰回数)指数関数的減衰学習率=初期学習率*学習率減衰率^ {(現在のラウンド数/ラウンド数一度崩壊の)}指し、多くの減衰保存学ぶ学習率を=早期開始の学校学習学習学習減衰低減ときにフロントホイール/複数の小さなホイール減衰マイナス1

  • ニューラルネットワークの最適化の目的はloss、次の3つの方法の合計最小化することです
    。①MSE;カスタム②;③クロスエントロピー;
    ①MSE、つまり平均二乗誤差をtf.reduce_mean(tf.square(y_-y))表すことできます。

import tensorflow as tf
x = tf.random.normal([20, 2], mean=2, stddev=1, dtype=tf.float32)
y = [item1 + 2 * item2 for item1, item2 in x]
w = tf.Variable(tf.random.normal([2, 1], mean=0, stddev=1))

epoch = 5000
lr = 0.002
for epoch in range(epoch):
    with tf.GradientTape() as tape:
        y_hat = tf.matmul(x, w)
        loss = tf.reduce_mean(tf.square(y_hat - y))
    w_grad = tape.gradient(loss, w)
    w.assign_sub(lr * w_grad)

print(w.numpy().T)

ここに画像の説明を挿入します
②カスタム;
上記では、損失関数を区分的関数として定義しています。予測値が真の値よりも大きい場合、モデルには適さないと考えられます。つまり、
f(y ^、y)= {3(y ^ − y)y ^ ⩾yy− y ^ y ^⩽yf (\ hat y、y)= \ begin {cases} 3(\ hat y-y)&\ hat y \ geqslant y \\ y- \ hat y&\ hat y \ leqslant y \ end {cases}f Y^および={{ 3 Y^およびYY^Y^YY^そして

import tensorflow as tf
x = tf.random.normal([20, 2], mean=2, stddev=1, dtype=tf.float32)
y = [item1 + 2 * item2 for item1, item2 in x]
w = tf.Variable(tf.random.normal([2, 1], mean=0, stddev=1))

epoch = 5000
lr = 0.002
for epoch in range(epoch):
    with tf.GradientTape() as tape:
        y_hat = tf.matmul(x, w)
        loss = tf.reduce_mean(tf.where(tf.greater(y_hat, y), 3*(y_hat - y), y-y_hat))
    w_grad = tape.gradient(loss, w)
    w.assign_sub(lr * w_grad)

print(w.numpy().T) # [[0.73728406 0.83368826]]

予測が大きいほどモデルの損失関数への影響が大きくなるため、予測はできるだけ小さくする必要があります。つまり、ここでの結果はすべて小さくなります。
簡単な変更を行います。つまり、次のようになります。

loss = tf.reduce_mean(tf.where(tf.greater(y_hat, y), (y_hat - y), 3*(y-y_hat)))

このとき、予測値が真の値よりも小さい場合は、モデルに適さないと考えます。つまり、できるだけ予測を大きくする必要があります。このときのトレーニング結果:[[1.6747012 1.9530903]]
③クロス-entropy損失関数は、
tf.losses.categorical_crossentropy(y, y_)
クロスエントロピー損失関数は、2つの確率分布間の距離を表します。
たとえば、既知のカテゴリが与えられた(1, 0)場合、予測

y_1 =(0.6、0.4);
y_2 =(0.8、0.2);

どの回答が標準の回答に近いかを測定する必要があります。クロスエントロピーを使用して計算および測定できます。
ここに画像の説明を挿入します

おすすめ

転載: blog.csdn.net/qq_26460841/article/details/113112609