簡體   English   中英

卷積神經網絡中的常數偏差

[英]Constant Bias in Convolutional Neural Network

我發現了在Tensorflow中實現的CNN的這個示例。

在CNN的此示例中,偏置是恆定的(從第59行開始)。

58 W1 = tf.Variable(tf.truncated_normal([6, 6, 1, K], stddev=0.1))
59 B1 = tf.Variable(tf.constant(0.1, tf.float32, [K]))
60 W2 = tf.Variable(tf.truncated_normal([5, 5, K, L], stddev=0.1))
61 B2 = tf.Variable(tf.constant(0.1, tf.float32, [L]))
62 W3 = tf.Variable(tf.truncated_normal([4, 4, L, M], stddev=0.1))
63 B3 = tf.Variable(tf.constant(0.1, tf.float32, [M]))

這是否意味着優化器不會調整偏差? 如果是,持續偏見的原因是什么? 為什么即使在網絡的完全連接部分中,偏差也保持恆定?

B1 = tf.Variable(tf.constant(0.1,tf.float32,[K]))

在此創建B1(變量),並使用常量對其進行初始化。 優化器在訓練期間更改變量B1,B2,B3。 只是它們是用常量初始化的。 你看到區別了嗎?

在C / C ++中,這類似於:

const float c = 0.1;
float B1 = c;
float W1 = 0.2; // initialized weights
float X= 10;
float out = X*W1 + B1;
std::cout << "ouput =, " << out << " B1 =" <<B1 <<"\n";
// now update bias, weight 
B1 = B1 + B1/10;
W1 = W1 + W1/10;
out = X*W1 + B1;
std::cout << "ouput =, " << out << " B1 =" <<B1 <<"\n";

這正是正在發生的事情。 用常量C初始化變量B1不會改變B1仍然是變量的事實。 只是您引用的示例中的作者決定。

偏見將隨着網絡的訓練而改變。 只是在這種價值上令人鼓舞。 偏置在完全連接的網絡中非常重要,它是一個永遠不會降低輸入值的值,網絡可以更好地發揮其作用。

神經網絡中的偏差的工作原理與線性方程中的偏差完全相同:

y = mx + c

它將輸出移位一個值。 由於該示例使用ReLU作為激活,因此任何負梯度都不會通過它傳播。 添加偏差可以傳播更多的梯度值。

通常,偏差會初始化為零,並且可以設置為可訓練或不可訓練。 但是在此示例中,他們將其初始化為常數0.1,這是不可訓練的。

與權重初始化相比,偏差初始化在訓練中並不十分重要。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM